【测试开发】知识点-mybatis,使用入门
在之前的开发过程中,使用的是mybatis-plus
框架来进行数据库操作。但是在开发过程中,会有需要自定义sql的地方,这就要用原生的mybatis
。
这里再简述下:Mybatis-Plus 只是在 MyBatis 的基础上做了增强但不做改变,可以进一步简化开发、提高效率。
一、介绍 MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。原来是 Apache 的一个开源项目 iBatis, 2010年6月这个项目由 Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code 旗下, iBatis3.x 正式更名为 MyBatis 。
MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二、简单的查询
1. 添加依赖
我直接在测试平台的项目的 pom.xml 添加依赖,因为项目里的表和javaBean都是现成的,导入依赖完成后即可使用。
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2. 新增全局配置文件
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,所以需要有个 XML 文件用于构建 SqlSessionFactory 的实例。
我在项目的resources
下新建mybatis-config.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>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
这里<dataSource>
需要换成自己对应的数据库连接信息。<mapper>
里也是后面需要修改的地方,用于注册具体放sql的 xml 文件。
3. 创建sql映射的 xml 文件
就先使用 User 表测试用,对应的 javaBean 就是 package com.pingguo.bloomtest.pojo;
下面的User
类:
@Data
public class User {
@TableId(type = IdType.ID_WORKER)
private Long id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT) // 新增的时候填充数据
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的时候填充数据
private Date updateTime;
}
OK,新建一个 xml 文件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="org.mybatis.example.UserMapper">
<select id="selectUser" resultType="com.pingguo.bloomtest.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
namespace
:名称空间,暂时随便起个名字,后面可以跟 id 组成唯一标识id
:代表这个标签的唯一标识resultType
:返回值类型,查出来的记录想要封装成 User 对象sql
:在标签里写上对应的 sql#{id}
:从传递过来的参数中取出 id 值
4. 测试类进行查询
新建一个测试类MybatisTest
用于测试:
public class MybatisTest {
@Test
void test() throws IOException {
// 根据配置文件,创建一个 SqlSessionFactory 对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取 SqlSession 实例,可以执行已经映射的 sql 语句
try (SqlSession session = sqlSessionFactory.openSession()) {
User User = (User) session.selectOne("org.mybatis.example.UserMapper.selectUser", 3);
System.out.println(User);
}
}
}
- 第一步:根据全局的配置文件创建一个 SqlSessionFactory 对象
- 第二步:获取 SqlSession 实例,执行已经映射的 sql 语句。selectOne(),分别传入唯一标识和参数
执行一下,发现报错了:
原来映射sql的xml文件没有在全局配置文件里注册。修改mybatis-config.xml
中的mappers
标签:
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
再重新执行一下
查询成功。
这里仅仅是个简单查询,就相当于写了个 helloword,后续还有更多关于 mybatis 的学习。