一、MyBatis 一些不太重要的知识,了解即可

二、MyBatis 功能架构

三、MyBatis 工作流机制

四、搭建MyBatis环境
1. 安装
-
可以访问 https://github.com/mybatis/mybatis-3/releases 下载jar包
下载MyBatis
-
当然更加推荐使用maven的方式,在pom.xml中的 <dependencies> </dependencies> 中加入以下内容。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
2. SqlSessionFactory的配置
- XML 的配置方式
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
3.创建Java对象
package cn.lazyfennec;
public class User {
private Integer id;
private String userName;
private String corp;
public User(Integer id, String userName, String corp) {
super();
this.id = id;
this.userName = userName;
this.corp = corp;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getCorp() {
return corp;
}
public void setCorp(String corp) {
this.corp = corp;
}
}
4.构建操作接口
package cn.lazyfennec;
public interface UserMapper {
public void addUser(User user);
public void deleteUser(Integer id);
public void updateUser(User user);
public User getUser(Integer id);
}
5.映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lazyfennec.UserMapper">
<select id="getUser" resultType="cn.lazyfennec.User" parameterType="int">
select id, userName, corp from user where id = #{id}
</select>
</mapper>
6. 注册配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/lazyfennec/UserMapper.xml"/>
</mappers>
</configuration>
五、完成数据库查询的例子

-
步骤如下:
- 声明配置文件目录读取
- 加载应用配置文件
- 创建SqlSessionFactory
- 获取Session
- 获取操作类
- 完成查询操作
- 关闭session
-
例子如下所示:
package cn.lazyfennec;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMyBatis {
public static void main(String[] args) {
// 1.声明配置文件目录读取
String resource = "mybatis-conf.xml";
// 2.加载应用配置文件
InputStream inputStream = HelloMyBatis.class.getClassLoader().getResourceAsStream(resource);
// 3.创建SqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 4. 获取Session
SqlSession sqlSession = sessionFactory.openSession();
try {
// 5.获取操作类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 6. 完成查询操作
User user = userMapper.getUser(9);
System.out.println(user.getId() + " " + user.getUserName() + " " + user.getCorp());
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7.关闭session
if(sqlSession!=null) sqlSession.close();
}
}
}
六、MyBatis优势与劣势
- 优势:
- 入门门槛较低
- 更加零花,SQL优化
- 劣势:
- 需要自己编写SQL,工作量大
- 数据库移植性差
七、MyBatis 注解方式
在Mapper接口类的方法上可以使用@Select查询,这样可以避免使用xml配置文件。具体如下所示:
package cn.lazyfennec;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("select * from user where id=#{id}")
public User getUser(Integer id);
}
此外使用此种方法时,可以不在conf.xml的mappers 中加入对应的mapper内容,转而使用以下方式
Configuration configuration = sessionFactory.getConfiguration();
configuration.addMapper(UserMapper.class);
具体如下
package cn.lazyfennec;
import java.io.InputStream;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMyBatis {
public static void main(String[] args) {
// 1.声明配置文件目录读取
String resource = "mybatis-conf.xml";
// 2.加载应用配置文件
InputStream inputStream = HelloMyBatis.class.getClassLoader().getResourceAsStream(resource);
// 3.创建SqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 区别,代码方式加载UserMapper
Configuration configuration = sessionFactory.getConfiguration();
configuration.addMapper(UserMapper.class);
// 4. 获取Session
SqlSession sqlSession = sessionFactory.openSession();
try {
// 5.获取操作类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 6. 完成查询操作
User user = userMapper.getUserByAnnotation(9);
System.out.println(user.getId() + " " + user.getUserName() + " " + user.getCorp());
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7.关闭session
if(sqlSession!=null) sqlSession.close();
}
}
}
八、其他的方法实现
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.lazyfennec.UserMapper">
<select id="getUser" resultType="cn.lazyfennec.User" parameterType="int">
select id, userName, corp from user where id = #{id}
</select>
<insert id="addUser" parameterType="cn.lazyfennec.User" useGeneratedKeys="true" keyProperty="id">
insert into user (userName,corp) values(#{userName}, #{corp})
</insert>
<update id="updateUser" parameterType="cn.lazyfennec.User">
update user set userName=#{userName}, corp=#{corp} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
九、其他的内容可以参考官方文档
点击右方链接查看官方文档:https://mybatis.org/mybatis-3/zh/index.html
十、更多进阶知识
点击右方连接查看: https://www.jianshu.com/p/b16f80fa8679
网友评论