Mybatis - 入门
官方文档(中文)
官方文档永远是最重要的参考资料.
mybatis 是一个半自动化(对象的属性和数据库表中的字段的对应关系需要程序员手动维护)的对象-关系映射框架,可以方便地将数据库中存储的记录与 Java 对象建立对应关系。
本文以对 mysql 数据库中的单个表格的增删改查演示 mybitis 的基本配置和使用。
创建一个 Maven 工程 helloworld
修改 pom.xml 文件,添加依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
</dependency>
</dependencies>
创建数据库 demo 及 t_user 表格
create table t_user
(
id int primary key auto_increment,
username varchar(200),
password varchar(64),
email varchar(256)
);
insert into t_user (id, username, password, email) VALUES (1, 'zs', 'zs', 'zs@163.com');
insert into t_user (id, username, password, email) VALUES (2, 'ls', 'ls', 'ls@163.com');
insert into t_user (id, username, password, email) VALUES (3, 'ww', 'ww', 'ww@163.com');
insert into t_user (id, username, password, email) VALUES (4, 'a', 'a', 'a@163.com');
insert into t_user (id, username, password, email) VALUES (5, 'b', 'b', 'b@163.com');
insert into t_user (id, username, password, email) VALUES (6, 'c', 'c', 'c@163.com');
insert into t_user (id, username, password, email) VALUES (7, 'd', 'd', 'd@163.com');
insert into t_user (id, username, password, email) VALUES (8, 'e', 'e', 'e@163.com');
insert into t_user (id, username, password, email) VALUES (9, 'f', 'f', 'f@163.com');
insert into t_user (id, username, password, email) VALUES (10, 'g', 'g', 'g@163.com');
insert into t_user (id, username, password, email) VALUES (11, 'h', 'h', 'h@163.com');
创建实体类 User.java
package com.demo.helloworld.entity;
public class User {
private Integer id;
private String username;
private String password;
private String email;
// 省略 get 和 set 方法
}
创建 UserMapper 接口文件
package com.demo.batis.mapper;
import com.demo.batis.entity.User;
import java.util.List;
public interface UserMapper {
User getUserById(Integer id);
List<User> findUsers();
Integer insertUser(User user);
Integer deleteUserById(Integer id);
Integer updateUser(User user);
}
在 Resources 目录下创建 mybatis 的全局配置文件 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="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/helloworld"/>
<property name="username" value="root"/>
<property name="password" value="root"/><!--改成你自己的数据库用户名和密码-->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
在 Resources 目录下创建 mapper 目录及 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.helloworld.batis.mapper.UserMapper">
<select id="getUserById" resultType="com.helloworld.batis.entity.User">
select * from t_user where id = #{id}
</select>
<select id="findUsers" resultType="com.helloworld.batis.entity.User">
select * from t_user
</select>
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user (id, username, password, email) values (#{id}, #{username}, #{password}, #{email})
</insert>
<delete id="deleteUserById">
delete from t_user where id = #{id}
</delete>
<update id="updateUser" parameterType="User">
update t_user set username = #{username}, password = #{password}, email = #{email} where id = #{id}
</update>
</mapper>
至此,项目的配置文件均已完成,可以编写相关的测试类,检查增删改查的功能是否正确。
在 test 目录中新建类 com.demo.helloworld.mapper.UserMapperTest
class UserMapperTest {
@Test
void getUserById() throws IOException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer id = 1;
User user = userMapper.getUserById(id);
Assertions.assertEquals(1, user.getId());
}
@Test
void findUsers() throws IOException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.findUsers();
Assertions.assertTrue(users.size() > 0);
}
@Test
void insertUser() throws IOException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
user.setEmail("admin@admin.com");
Integer result = userMapper.insertUser(user);
Assertions.assertTrue(result > 0);
}
@Test
void deleteUserById() throws IOException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer result = userMapper.deleteUserById(1);
Assertions.assertEquals(1, result);
}
@Test
void updateUser() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
user.setUsername("test");
user.setPassword("test");
Integer result = userMapper.updateUser(user);
Assertions.assertEquals(1, result);
}
}
其中,为了方便获得 SqlSession,创建了一个工具类 SqlSessionUtil
public class SqlSessionUtil {
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession(true); // 开启事务的自动提交
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
至此,一个简单的利用mybatis对数据库单表进行增删改查的操作就完成了!