在之前的开发过程中,使用的是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 的学习。