Mybatis入门实战
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
Maven相关依赖
<!-- 引入 MySQL 数据库驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- lombok 依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<!-- 引入 MyBatis 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- 单元测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
Mysql数据库脚本
CREATE DATABASE `db_mybatis`;
CREATE TABLE `t_user` (
`id` int NOT NULL,
`username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名称',
`birthday` datetime NULL DEFAULT NULL COMMENT '生日',
`sex` char(1) NULL DEFAULT '' COMMENT '性别',
`address` varchar(255) NOT NULL DEFAULT '' COMMENT '地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ;
INSERT INTO `t_user` VALUES (1, '张三', '2002-01-22 14:41:28', '男', '广西河池市宜州市');
INSERT INTO `t_user` VALUES (2, '李四', '2001-01-22 14:41:28', '女', '广西河池市巴马县');
编写一个user 实体类。
@Data
@ToString
public class UserEntity {
private Integer id;
private String userName;
private Date birthday;
private String sex;
private String address;
}
SqlMapConfig.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"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射配置文件-->
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
编写一个 userMapper.xml
我们要在这个映射配置文中去配置实体类以及 user 表它的一个映射关系。并且我们的 SQL 语句也是要写在这个 usermapper.xml 这个映射文件。这个映射配置文件创建在哪?那通常我们把配置文件都是创建在 resources 这个目录下。
<?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.demo.entity.UserEntity">
<!--
namespace:命名空间,与 id 属性共同构成唯一标识
resultType:返回结果类型(自动映射封装):要封装的实体的全路径
-->
<select id="findAll" resultType="com.demo.entity.UserEntity">
select * from t_user
</select>
</mapper>
编写测试
public class MyBatisTest {
@Test
public void myBatisQuickStartTest() throws IOException {
//1. 加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 获取 SqlSessionFactory 工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//3. 获取SQLSession 会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4. 执行 SQL,参数:statement
List<UserEntity> userEntityList = sqlSession.selectList("UserEntity.findAll");
//5. 遍历结果
for (UserEntity userEntity : userEntityList) {
System.out.println(userEntity);
}
sqlSession.close();
}
}