# 2.Mybatis-搭建mybatis
# 1.创建maven工厂
引入如下依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- pom.xml -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.创建MyBatis的核心配置文件
进行配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://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.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
代码标签解释:
| 标签 | 核心属性 | 取值 / 说明 |
|---|---|---|
<environments> | default | 指定默认环境的 id |
<environment> | id | 环境唯一标识(如 dev/test/prod),不可重复 |
<transactionManager> | type | JDBC(手动事务)/MANAGED(外部托管,如 Spring) |
<dataSource> | type | POOLED(连接池,常用)/UNPOOLED(无连接池)/JNDI(容器数据源) |
具体解释:
environments 配置连接多个数据库的环境
属性:1)default默认使用环境的id
2)environment配置某个具体的环境
属性:
1)id:配置数据库环境的唯一标识,不能重复
2)trasactionManager:设置事务管理方式
属性:
1)type:JDBC和MANAGED两个值
JDBC:事务的原生管理方式,需手动提交和回滚
MANAGED:被管理,例如spring
2)datasource:配置数据源
属性:type包括POOLED,UNPOOLED,JNDI
POOLED:使用数据库连接池缓存数据库连接
UNPOOLED:不使用数据库连接池
JNDI:表示使用上下文数据源
# 3.创建接口和映射文件
实体类
package com.demo.pojo;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User(){
}
public User(Integer id, String username, String password, Integer age, String sex, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", email='" + email + '\'' +
'}';
}
}
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
82
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
82
接口
public interface UserMapper {
/*
* 面向接口编程两个一致
* 1.namespace与类的全类名一致
* 2.id与接口中的方法一致
*/
int insertUser();
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.UserMapper">
<insert id="insertUser">
insert into t_user values(null,'张三','123455',11,'男','123@qq.com')
</insert>
</mapper>
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 4.测试
@Test
public void test1() throws IOException {
// 1.加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 3.创建SqlSessionFactory
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.获取SqlSession(openSession的true代表自动提交sql)
SqlSession sqlSession = sessionFactory.openSession(true);
// 5.创建mapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.insertUser();
//sqlSession.commit();
System.out.println(i);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 5.加入日志功能
引入依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
配置log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.ibatis" level="debug"/>
<Logger name="java.sql" level="debug"/>
<Logger name="com.demo" level="debug"/>
<Root level="info">
<AppenderRef ref="stdout"/>
</Root>
</Loggers>
</Configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 6.查询测试
UserMapper定义方法
User selectUser();
List<User> selectAllUser();
1
2
3
2
3
映射文件
<select id="selectUser" resultType="com.demo.pojo.User">
select * from t_user where id=2
</select>
<select id="selectAllUser" resultType="com.demo.pojo.User">
select * from t_user
</select>
1
2
3
4
5
6
7
2
3
4
5
6
7
注:查询时必须要设置结果类型,有两种:
1)resultType为默认映射,字段名和属性名一致时用
2)resultMap为自定义映射,字段名和属性名不一致或多表查询字段名冲突时用
测试
@Test
public void test2() throws IOException {
// 1.加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 3.创建SqlSessionFactory
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.获取SqlSession
SqlSession sqlSession = sessionFactory.openSession(true);
// 5.创建mapper接口的代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAllUser();
for (User user : users) {
System.out.println(user);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18