Mybatis笔记(1)-快速入门
概述
中文文档: https://mybatis.org/mybatis-3/zh/index.html
MyBatis 是支持定制化 SQL,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJO映射成数据库中的记录。它内部封装了 jdbc,使开发者能更专注于 SQL 代码, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
快速入门
该示例基于IDEA的Maven项目。
1.导入依赖
主要是导入mybatis和mysql jdbc驱动包依赖。
<!-- 两个必须导入的依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
使用lombok可以通过使用
@Data注解修饰entity类,从而使Lombok为该类自动生成getter、setter、constructor以及toString。使用前需在idea中安装Lombok插件:【Settings】-》【Plugins】,搜索Lombok,安装即可。
若不使用Lombok则后述的User类注意添加getter、setter等。
2.创建实体类、数据表以及dao接口(Mapper)
包结构:
user表:

User
@Data
public class User {
private Integer id;
private String username;
private String password;
}
UserMapper
public interface UserMapper {
User selectById(Integer id);
}
Mybatis中,把dao接口称为Mapper(映射器)。
3.创建映射文件
在resource目录下创建Mapper对应的xml配置文件,Mapper对应的xml文件在resource中的目录结构要与Mapper的包结构保持一致,如图:

PS:IDEA的Maven项目中,在resource目录下不能创建package,只能创建redirect,且创建目录时,需一层一层创建,这样在磁盘中才会有对应的目录结构,若在创建时使用 com.entity的命名方式,则在磁盘中只会创建一个名为com.entity的目录
UserMapper.xml:
<?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.dao.UserMapper">
<!-- #{id}将会接收UserMapper.selectById方法中的id参数 -->
<select id="selectById" resultType="com.entity.User" >
select * from user where id = #{id}
</select>
</mapper>
4.创建主配置文件
主配置文件用于用于配置数据源,事务管理器,映射文件位置等其他全局设置。一般命名为SqlMapConfig.xml,放在resource目录下。
<?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>
<!-- default属性指定配置的environment中某一个的id -->
<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://localhost:3306/test?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的路径,注意分隔符是 / 而不是 . -->
<mappers>
<mapper resource="com/mapper/UserMapper.xml"/>
</mappers>
</configuration>
5.获取SqlSession,进行数据库操作
测试方法:
@Test
public void test() throws IOException {
//获取主配置文件的输入流
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
//创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//通过SqlSessionFactoryBuilder加载输入流,创建工厂
SqlSessionFactory factory = builder.build(in);
//通过工厂创建SqlSession对象
SqlSession sqlSession = factory.openSession();
//通过SqlSession对象获取Dao的代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//执行数据库操作
User user = userDao.selectById(1);
System.out.println("user = " + user);
//关闭sqlSession
sqlSession.close();
}
执行test方法,输出:user = User(id=1, username=张三, password= 123456)
获取SqlSession步骤
步骤如下:
-
读取配置文件。通过org.apache.ibatis.io.Resources类的
getResourceAsStream()静态方法获取主配置文件的输入流:InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); -
创建SqlSessionFactory工厂。SqlSessionFactory不能直接通过构造器创建,需先创建一个SqlSessionFactoryBuilder,再通过builder加载上述创建的输入流,创建工厂对象:
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.builde(in);//传入主配置文件的输入流 -
通过工厂创建SqlSession对象。
SqlSession session = factory.openSession(); -
通过session获取dao接口的代理对象(也可以不使用代理对象,直接使用session对象的方法实现数据库操作,如selectAll()等)
XxxDao dao = session.getMapper(XxxDao.class); -
使用该dao代理对象执行方法,进行数据库操作。

浙公网安备 33010602011771号