MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。
环境说明
- JDK 17
- MySQL 8.0.32
- Mybatis 3.5.10
环境准备
导入相关依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
使用Mybatis
首先编写 mybatis 配置文件mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--DTD(文档类型定义)提前规定了一些可用标签-->
<configuration>
<properties resource="application.properties"/>
<!--给指定包下的实体类起别名,之后可以直接使用别名指定实体类-->
<!--<typeAliases>-->
<!-- <package name="com.test.entity"/>-->
<!--</typeAliases>-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--添加 mapper映射文件-->
<mappers>
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
然后编写数据库表映射的实体类:
@Data
public class Student{
int sid;
String name;
String sex;
}
在根目录下创建 mapper 映射文件(由于数据表与实体类有部分字段不对应,因此直接使用 resultMap 标签指定实体类和数据表字段的对应关系):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="StudentMapper">
<resultMap id="studentMap" type="com.test.entity.Student">
<id column="id" property="sid"/>
<result column="name" property="name"/>
<result column="sex" property="sex"/>
</resultMap>
<select id="selectStudent" resultMap="studentMap">
select * from student
</select>
</mapper>
最后直接在主程序中使用定义好的 mapper 映射:
public static void main(String[] args) throws IOException {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
try(SqlSession sqlSession = sqlSessionFactory.openSession(true)){
List<Student> list = sqlSession.selectList("selectStudent");
list.forEach(System.out::println);
}
}