mybatis-环境搭建
0 目录

1 Maven工程
设置打包方式
1
2
3
4<groupId>com.xxxx.xxx</groupId>
<artifactId>MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>引入依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
2 数据库准备
1 | |
3 创建Mybatis核心文件
核心文件取名:mybatis-config.xml,存放位置src/main/resources
1 | |
4 实体类、mapper接口
实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@Data
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String gender;
private String email;
}mapper接口
1
2
3
4
5public interface UserMapper {
//添加用户信息
int insertUser();
}
5 映射文件
- mapper接口的全类名和映射文件的命名空间(namespace)保持一致,在resource下使用/代替.
- mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
UserMapper.xml
1 | |
6 测试
1 | |
7 日志
引入依赖
1
2
3
4
5
6
7<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>log4j.xml,位置src/main/resources
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
8 工具类
1 | |
9 增删改查
mapper接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public interface UserMapper {
//添加用户信息
int insertUser();
//删除用户信息
void deleteUser();
//修改用户信息
void updateUser();
//通过id查询一个实体类对象
User getUserById();
//查询实体类集合
List<User> getUserList();
}xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43<?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.xxxx.xxx.mapper.UserMapper">
<!--
mapper接口和映射文件要保证两个一致:
1.mapper接口的全类名和映射文件的namespace一致
2.mapper接口中的方法的方法名要和映射文件中的sql语句的id保持一致
-->
<!--添加用户信息-->
<insert id="insertUser">
insert into t_user values(null,'张三','123',23,'男',"123@163.com")
</insert>
<!--删除用户信息-->
<delete id="deleteUser">
delete from t_user where id = 2
</delete>
<!--修改用户信息-->
<update id="updateUser">
update t_user set username='ybc',password='123' where id = 3
</update>
<!--
resultType:自动映射,用于属性名和表中字段名一致的情况
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
-->
<!--通过id查询一个实体类对象-->
<select id="getUserById" resultType="com.xxxx.lln.pojo.User">
select * from t_user where id = 3
</select>
<!--查询实体类集合-->
<select id="getUserList" resultType="com.xxxx.lln.pojo.User">
select * from t_user
</select>
</mapper>代码测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82public class MyBatisTest {
/**
* 测试添加用户信息
* @throws IOException
*/
@Test
public void testInsertUser() throws IOException {
//获取核心配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//获取sql的会话对象SqlSession(不会自动提交事务),是MyBatis提供的操作数据库的对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取sql的会话对象SqlSession(会自动提交事务),是MyBatis提供的操作数据库的对象
//SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取UserMapper的代理实现对象getMapper(Class<T> var1)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用mapper接口中的方法,实现添加用户信息的功能
int result = userMapper.insertUser();
//通过sql语句的唯一标识找到sql并执行,唯一标识是namespace.sqlId
//int result = sqlSession.insert("com.xxxx.lln.mapper.UserMapper.insertUser");
System.out.println("返回结果:"+result);
//提交事务
sqlSession.commit();
//关闭会话
sqlSession.close();
}
/**
* 测试删除用户信息
*/
@Test
public void testDeleteUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser();
sqlSession.close();
}
/**
* 测试修改用户信息
*/
@Test
public void testUpdateUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updateUser();
sqlSession.close();
}
/**
* 通过id查询一个实体类对象
*/
@Test
public void testGetUserById(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById();
System.out.println(user);
sqlSession.close();
}
/**
* 查询实体类对象集合
*/
@Test
public void testGetUserList(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
userList.forEach(System.out::println);
sqlSession.close();
}
}
查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
- resultType:自动映射,用于属性名和表中字段名一致的情况
- resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常
TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值
10 核心文件详解
顺序:
properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,
reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?
1 | |
mybatis-环境搭建
https://baijianglai.cn/mybatis-环境搭建/64bafa7e8456/