MyBatis学习笔记一

本文最后更新于:3 个月前

本文主要记录了Java中的MyBatis框架的学习,初次了解其在项目中的具体位置和功能。

MyBatis


官方文档

点击前往

什么是 MyBatis?

MyBatis 是一款持久层框架,

它支持自定义 SQL、存储过程以及高级映射。

安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

1
2
3
4
5
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>

我学习时的配置:

  • MySQL5.7
  • Maven3.6.0
  • Mybatis3.5.2
  • IDEA2019.1

我学习时的父工程pom.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<!-- 父工程 -->
<groupId>com.zmq</groupId>
<artifactId>Mybatis-Study</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
</modules>

<!-- 依赖 -->
<dependencies>
<!-- MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- junit测试单元框架-->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 资源过滤,防止运行时找不到文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

</project>

子工程pom.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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Mybatis-Study</artifactId>
<groupId>com.zmq</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>mybatis-01</artifactId>

<!-- 资源过滤,防止运行时找不到文件-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

</project>

创建MyBatis配置文件

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
<!-- 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.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3307/mydb?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>

<!-- 创建接口后注册接口实现文件-->
<mappers>
<mapper resource="com/zmq/dao/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
23
24
25
26
27
28
29
30
31
32
33
34
35
//MybatisUtils.java
package com.zmq.utils;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {

private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取SqlSession对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}

//SqlSession 完全包含了面向数据库执行SQL命令的所有方法
public static SqlSession getSqlSession(){
//openSession(true)可以自动提交事务
return sqlSessionFactory.openSession();
}


}

创建Pojo层实体类

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
//User.java
package com.zmq.pojo;

public class User {
private int id;
private String name;
private String pwd;

//无参构造
public User() {
}
//有参构造
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
//getset方法
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}

//toString方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}

创建接口文件(Dao层)

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
//UserDao.java
package com.zmq.dao;

import com.zmq.pojo.User;

import java.util.List;

public interface UserDao {

//获取所有用户
List<User> getUserList();

//根据id查询用户
User getUserById(int id);

//新增用户
int addUser(User user);

//修改用户
int updateUser(User user);

//删除用户
int delUserById(int id);


}

创建接口实现配置文件(相当于JavaWeb的impl层)

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
<!-- 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">
<!--namespace用来绑定DAO接口-->
<mapper namespace="com.zmq.dao.UserDao">
<!-- 这里相当于实现接口的方法 resultType绑定全限定名-->
<select id="getUserList" resultType="com.zmq.pojo.User">
select * from mydb.user
</select>

<select id="getUserById" parameterType="int" resultType="com.zmq.pojo.User">
select * from mydb.user where id = #{id}
</select>

<insert id="addUser" parameterType="com.zmq.pojo.User" >
insert into mydb.user(id, name, pwd) values (#{id},#{name},#{pwd});
</insert>

<update id="updateUser" parameterType="com.zmq.pojo.User">
update mydb.user set name=#{name},pwd=#{pwd} where id = #{id}
</update>

<delete id="delUserById" parameterType="int">
delete from mydb.user where id = #{id}
</delete>
</mapper>

测试

在Dao的文件中,右击要测试的方法,点击goto,创建测试

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//UserDaoTest.java
package com.zmq.dao;

import com.zmq.pojo.User;
import com.zmq.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;


public class UserDaoTest {

//测试查询全部User
@Test
public void test(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//sqlSession.getMapper(UserDao.class);后ALT+回车生成赋给的对象UserDao
//这里要拿SQL,从Dao包里拿,面向接口编程,可以直接从UserDao接口里拿
UserDao userDao = sqlSession.getMapper(UserDao.class);
//执行方法
List<User> userList = userDao.getUserList();

//增强For循环输出
for(User user:userList){
System.out.println(user);
}


//关闭sqlSession
sqlSession.close();
}

//测试通过id查询
@Test
public void getUserById(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);

User user = userDao.getUserById(1);
System.out.println(user);

//关闭sqlSession
sqlSession.close();
}


//测试新增用户
@Test
public void addUser(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);

userDao.addUser(new User(3,"alan","852456"));

//提交事务----->>增删改都要提交事务,否则保存不到数据库
sqlSession.commit();
System.out.println("添加成功!");
//关闭sqlSession
sqlSession.close();
}

//测试修改用户
@Test
public void updateUser(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);

userDao.updateUser(new User(2,"alex","159852"));


//提交事务----->>增删改都要提交事务,否则保存不到数据库
sqlSession.commit();
System.out.println("修改成功!");
//关闭sqlSession
sqlSession.close();
}


//测试删除用户
@Test
public void delUserById(){
//获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);

userDao.delUserById(2);


//提交事务----->>增删改都要提交事务,否则保存不到数据库
sqlSession.commit();
System.out.println("删除成功!");
//关闭sqlSession
sqlSession.close();
}


}

MyBatis学习笔记一
https://superlovelace.top/2023/10/24/MyBatis_1/
作者
棱境
发布于
2023年10月24日
更新于
2023年10月31日
许可协议