# 前置环境

创建项目到创建配置文件可以看看这篇文章的,里面涵盖了视频,数据库和操作的语句是另外的东西,自己看完就知道哪里需要改哪些不需要改了,

【Mybatis】使用 mybatis 框架连接 mysql 数据库详细步骤_mybatis 连接数据库 - CSDN 博客

# 创建表

连接数据后,选择一个数据库创建表,后续就是利用这个表来操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `t_user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (1, 'admin', 'admin', 'admin@qq.com', '1008611');
INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (2, 'root', 'root', 'root@qq.com', '1008622');
INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (19, 'admin2', 'root2', 'root@qq.com2', '1008644');


注意

每个人的 mysql 版本或者不一致,创建的语法也会有不同,如果使用上述语句创建表出现如下报错,请移步这篇文章更改创建表的语句 解决方案

[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'_怎么用浏览器控制台修改职教云版本 - CSDN 博客

1
2
[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'

# 创建表的实体类

表里面的属性都需要利用类来操作,生成对应的方法才可以。在 Java 目录下以这样的形式创建软件包

com.knroy.pojo 下新建 User.java 类,里面定义的属性对应数据库中的字段

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
package com.knroy.pojo;

public class User {
private Integer id;
private String username;
private String password;
private String email;
private String phone;

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 String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public User() {
}

public User(Integer id, String username, String password, String email, String phone) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
'}';
}

}



# IDEA 安装插件

编译器找到插件商店安装 MyBatisX 后面写 mappe 语句代理会非常方便会自己生成,如果商店不行的看下面的方案,我一般是挂梯子或者换成本机电脑长期连接过的网络比如个人热点,因为 IDEA 好像从什么时候版本开始对网络安全有要求陌生网络不需要加载东西出现,所以可以换成电脑熟悉的网络,不行就看文章吧

解决 idea 中插件商店加载不出来插件问题_idea 插件商店加载不出来 - CSDN 博客

解决 IDEA 无法打开 Marketplace 的三种方案_idea marketplace-CSDN 博客

# IDEA 连接数据库

输入账号密码就行了,有的人驱动下载不了建议挂梯子试试或者百度一下,我有这种情况但是我还是可以直接连接成功

# 创建 Maven 项目

创建简单的 Maven 项目

创建完成后把 org.example 软件包删除 (感觉没用上还碍眼)

# 配置 pom.xml 依赖

将这两个依赖加入到 pom.xml 文件内然后刷新项目,会看到右边已经是成功添加的状态了这样依赖就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 // jdbc驱动
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
// mybatis驱动
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
</dependencies>

# Mybatis 核心配置文件

main 目录下的 resources 下创建 Mybatis-config.xml 里面是数据库的连接信息包括后面的 SQL 语句映射的路径, 下面的全部可以复制,但是需要修改的是账户密码还有需要连接的数据库名,代码没有问题,如果哪里错了细心一点看看

<mappers> 标签内需要写 sql 语句的映射出来的核心配置文件路径,也就是操作 SQL 语句的 xml 路径

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 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"/>
<!-- 这里要写入我们连接mysql数据库的信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="000000"/>
</dataSource>
</environment>
</environments>
<!-- 这里要写sql映射路径userMapp.xml路径-->
<mappers>
<mapper resource="com/knroy/Mapper/userMapper.xml"/>
</mappers>
</configuration>

# 操作 SQL 语句 xml 文件

同样在这个地方 resources 下先创建几个目录,再到目录下面创建 userMapper.xml 文件,取名随意因为我操作的是用户表就这个取了,此 文件下对应的是实现的语句增删改查,并且你看清楚代码里面的路径关系,

1
2
3
4
5
6
7
8
namespace: 编写功能方法的接口路径

id: 功能接口中对应的抽象方法

resultType: 实体类的路径



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
<?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建立接口的关系-->
<mapper namespace="com.knroy.Mapper.userMapper">


<select id="queryUser" resultType="com.knroy.pojo.User">
select id,username,password,email,phone from t_user
</select>

<select id="likeUser" parameterType="String" resultType="com.knroy.pojo.User">
select * from t_user where username like '%${username}%'
</select>

<insert id="addUser">
insert into t_user values(#{id},#{username},#{username},#{email},#{phone})
</insert>

<delete id="delUser">
delete from t_user where id=#{id}
</delete>

<update id="updateUser">
update t_user set username=#{username},password=#{password},email=#{email},phone=#{phone} where id=#{id}
</update>

</mapper>

# 操作 SQL 接口 xml 文件

要实现 Mapper 代理,所以在后面我们会建一个和 userMapper.xml 同名的接口,在接口中便会存放与 userMapper.xml 中 sql 语言一样的抽象方法,二者是对应关系的而且目录和软件包也是一致的名称

userMapper 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.knroy.Mapper;

import com.knroy.pojo.User;

import java.util.List;

//此接口定义了需要执行的SQL操作,有的查询有的增加,链接的userMaooerXML映射文件定义了具体的SQL语句,
// 通过这种方式实现了SQL和Java代码的解耦,提高了代码的可维护性和灵活


public interface userMapper {
// 接口内写抽象方法,虽然接口中的public对应接口是多余的,后面写的返回的类型

public List<User> queryUser(); // 功能是查询表所以方法的类型是集合类型
public Boolean addUser(User user); // 添加用户
public Boolean delUser(String id); // 根据id删除
public Boolean updateUser(User user); // 更新用户
public List<User> likeUser(String name); // 模糊查询
}

记得创建类选择为接口哦

在接口里面写好这些方法后,前期安装的插件就起到作用了,点击这个小红鸟它会帮我们自动定位回到编写 SQL 语句的文件并生成语句是什么,这个安装了自己就会知道怎么用了,简述就是能生成能定位

# 测试类 test

建立一个测试类运行这些 SQL 语句实现增删改查,在 test 目录下的 java 目录新建 test.java

其实下面的是我自己复制的,有的地方没有太明白所以没有注释,有心的人随便找个 AI 代审一下就行了,

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
import com.knroy.Mapper.userMapper;
import com.knroy.pojo.User;
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;
import java.util.List;

public class test {
public static void main(String[] args) throws IOException {
String resource = "Mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

try (SqlSession sqlSession = sqlSessionFactory.openSession()) {

// 拿到接口的对象
userMapper userMapper = sqlSession.getMapper(userMapper.class);

// 查询所有用户
List<User> userList = userMapper.queryUser();
System.out.println("All users:");
for (User user : userList) {
System.out.println(user);
}
System.out.println("查询完成\n");

// 添加用户 通过实例化 user实体类的构造方法写入参数
User newUser = new User(21, "Alice", "123456", "alice@example.com", "1234567890");
// 将实例后的对象传入接口的方法中,
userMapper.addUser(newUser);
System.out.println("添加用户完成\n");

// 删除用户不需要什么对象 使用接口的方法传入id就可以实现删除用户
userMapper.delUser("1");
System.out.println("删除用户完成\n");

// 更新用户和增加用户一个道理
User updateUser = new User(2, "Bob", "654321", "bob@example.com", "9876543210");
userMapper.updateUser(updateUser);
System.out.println("更新用户完成\n");

// 模糊查询用户
List<User> likeUserList = userMapper.likeUser("Alice");
System.out.println("Users with name like 'Alice':");
for (User user : likeUserList) {
System.out.println(user);
}
System.out.println("模糊查询完成\n");

List<User> userList1 = userMapper.queryUser();
System.out.println("All users:");
for (User user : userList1) {
System.out.println(user);
}
System.out.println("操作结束后的表查询完成\n");


// 提交事务
sqlSession.commit();
}
}
}