Mybatis框架是优秀的持久层框架,用于简化 JDBC 开发,解决了硬编码问题和操作繁琐问题。MyBatis 免除了几乎所有的 JDBC代码以及设置参数和获取结果集的工作。
MyBatis快速入门:
- 写数据库,创建user表,添加数据
- 创建模块,导入坐标
2.1 如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中(在官网可查询):
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
- 编写 MyBatis 核心配置文件 – > 替换连接信息 解决硬编码问题
<?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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql的映射文件-->
<mapper resource="com/lic/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题
<?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="com.lic.mapper.UserMapper">
<select id="selectAll" resultType="com.lic.pojo.User">
select * from tb_user;
</select>
</mapper>
- 编码
5.1. 定义POJO类(pojo 包下创建 User类
)
public class User {
private int id;
private String username;
private String password;
private String gender;
private String addr;
//省略了 setter 和 getter
}
5.2 加载核心配置文件,获取 SqlSessionFactory 对象
5.3 获取 SqlSession 对象,执行 SQL 语句
public class MybatisDemo {
public static void main(String[] args) throws IOException {
// 1.加载Mybatis的核心配置文件,获取sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession对象,执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行sql;传入唯一标识
List<User> users = sqlSession.selectList("test.selectAll");
System.out.println(users);
// 释放资源
sqlSession.close();
}
}
Mapper代理开发
之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下:
List<User> users = sqlSession.selectList("test.selectAll");
这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用Mapper 代理方式则不存在硬编码问题。
//获取UserMapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.selectAll();
Mapper代理使用要求
-
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
-
设置SQL映射文件的namespace属性为Mapper接口全限定名。
-
在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。
-
编写代码
public static void main(String[] args) throws IOException {
// 1.加载Mybatis的核心配置文件,获取sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession对象,执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
// Mapper代理开发
//获取UserMapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.selectAll();
System.out.println(userList);
// 释放资源
sqlSession.close();
}
运行结果: