前言
1.配置文件注释中文显示乱码
退出重进,发现不是乱码就成功
一.MyBatis XML配置⽂件
使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能. 如果需要实现复杂的SQL功能,建议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中.
- 配置数据库连接字符串和MyBatis
- 写持久层代码
1.1配置连接字符串和MyBatis
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
1.yml文件配置
# 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件
mapper-locations: classpath:mybatis/**Mapper.xml
1.2 写持久层代码
2.建包
3.创建一个接口(方法的声明),在mapper文件下创建一个接口
@Mapper
public interface UserInfoXmlMapper {
Integer insert( UserInfo userInfo);
}
二.使用XML进行数据库操作
2.1增操作(insert)
4.方法的调用(在mybits包下创建一个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/example/demo/mapper/UserInfoXmlMapper">
<insert id="insert">
insert into userinfo (username, password, age, gender)
values (#{username}, #{password}, #{age}, #{gender})
</insert>
</mapper>
5.返回声明的方法进行单元测试
6.插入数据(记得注解信息要全)
package com.example.demo.mapper;
import com.example.demo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class UserInfoXmlMapperTest {
@Autowired
private UserInfoXmlMapper userInfoXmlMapper;
@Test
void insert() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("日向雏田");
userInfo.setPassword("520");
userInfo.setAge(18);
userInfo.setGender(1);
userInfoXmlMapper.insert(userInfo);
}
}
7.查看数据库,是否插入成功
2.2删除操作(delete)
删除操作(单元测试):
对数据库进行删除id为5的信息
1.方法声明
Integer delete(Integer id);
2.使用xml文件进行SQL
<delete id="delete">
delete from userinfo where id = #{id}
</delete>
3.单元测试
@Test
void delete() {
userInfoXmlMapper.delete(5);
}
4. 删除成功
2.3修改操作(update)
对数据库更新操作(更新id=1,用户admin的password)
1.方法声明
Integer update(UserInfo userInfo);
2.使用xml文件进行SQL
<update id="update">
update userinfo set password = #{password} where id =#{id}
</update>
3.单元测试
@Test
void update() {
UserInfo userInfo = new UserInfo();
userInfo.setId(1);
userInfo.setPassword("admin");
userInfoXmlMapper.update(userInfo);
}
4.修改成功
2.4查询操作(select)
1.声明方法
List<UserInfo> selectAllUser();
2.使用xml文件进行SQL
<select id="selectAllUser" resultType="com.example.demo.model.UserInfo">
select * from userinfo
</select>
- id :是和 Interface (接⼝)中定义的⽅法名称⼀样的,表⽰对接⼝的具体实现⽅法。
- resultType :是返回的数据类型,也就是开头我们定义的实体类.
在MyBatis中,<select>
标签用于定义SQL查询操作,而resultType
属性是该标签中一个非常重要的属性,它指定了SQL查询返回的结果应该被映射成的Java类型。具体来说,resultType
告诉MyBatis如何将数据库中的结果集(ResultSet)中的每一行数据转换成Java对象。
3.单元测试
@Test
void selectAllUser() {
System.out.println(userInfoXmlMapper.selectAllUser());
}
4.查询成功
补充:
同样的, 使⽤XML 的⽅式进⾏查询, 也存在数据封装的问题
解决办法和注解类似:
- 起别名
- 结果映射
- 开启驼峰命名
其中1,3的解决办法和注解⼀样,不再多说, 接下来看下xml如果来写结果映射。
2.4.1结果映射
以下Mapper.xml文件
<resultMap id="BaseMap" type="com.example.demo.model.UserInfo">
<id column="id" property="id"></id>
<result column="delete_flag" property="deleteFlag"></result>
<result column="create_time" property="createTime"></result>
<result column="update_time" property="updateTime"></result>
</resultMap>
<select id="queryAllUser" resultMap="BaseMap">
select id, username,`password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo
</select>
关于开发中使⽤哪种模式这个问题, 没有明确答案. 仁者⻅仁智者⻅智, 并没有统⼀的标准, 更多是取决于你的团队或者项⽬经理, 项⽬负责⼈
三.多表查询
⽂章表的uid, 对应⽤⼾表的id.
1.数据库创建articleinfo表
2.创建对象
3.定义接口,声明方法
Mybatis 不分单表还是多表, 主要就是三部分: SQL, 映射关系和实体类
4.创建xml文件使用SQL语句
5.单元测试
6.测试没问题
7.开始连接表
7.1新增连接表的对象
7.2,新增对象
7.3xml文件写连接表SQL语句
<select id="selectArticleAndUserById" resultType="com.example.demo.model.ArticleInfo">
select ta.*, tb.username, tb.gender from articleinfo ta
left join userinfo tb
on ta.uid = tb.id
where ta.id = #{id}
</select>
7.4进行单元测试
@Test
void selectArticleAndUserById() {
System.out.println(articleInfoMapper.selectArticleById(1));
}
8 连接成功
总结:
在MyBatis中,XML配置文件扮演着至关重要的角色,它们定义了数据库操作的行为和规则。接下来,我将用通俗的例子来解释这些配置文件的概念和功能。
1. XML配置文件的概念
XML配置文件是一种使用XML语言编写的文件,它们包含了MyBatis框架运行所需的配置信息。MyBatis通过解析这些XML文件来获取数据库连接信息、SQL语句、映射关系等,从而实现对数据库的操作。
2. 全局配置文件(mybatis-config.xml)
概念
全局配置文件是MyBatis的“总开关”,它包含了MyBatis运行所需的全局设置,如数据源、事务管理、类型别名、插件等。
功能
- 数据源配置:告诉MyBatis如何连接到数据库,包括数据库的URL、用户名、密码等信息。这就像是你告诉家里的水龙头(MyBatis):“嘿,水龙头,去厨房的水管(数据库)那里取水吧,密码是XXX”。
- 事务管理:配置MyBatis如何进行事务管理,确保数据库操作的原子性、一致性、隔离性和持久性。这就像是你告诉水龙头:“记得每次用完都要关紧,别漏水哦”。
- 映射器配置:指定Mapper XML文件的位置,Mapper XML文件是定义SQL语句和映射规则的地方。这就像是你告诉水龙头:“哦对了,那些具体的用水规则(SQL语句)都在那边的墙上贴着(Mapper XML文件)呢”。
3. 映射器文件(Mapper XML)
概念
映射器文件是MyBatis的核心,它定义了SQL语句以及这些SQL语句如何与Java对象进行映射。
功能
- 定义SQL语句:在Mapper XML文件中,你可以定义各种SQL语句,如查询、插入、更新、删除等。这些SQL语句会根据你的业务需求来编写,实现数据的增删改查。
- 映射规则:除了SQL语句外,Mapper XML文件还定义了SQL语句的返回结果如何映射到Java对象上,以及Java对象的哪些属性会被用作SQL语句的参数。这就像是你告诉水龙头:“嘿,当我打开这个开关(调用Mapper接口的方法)时,你就去执行墙上的那条规则(SQL语句),然后把结果放到这个杯子里(Java对象)吧”。
举个例子~
想象一下,你是一家餐厅的老板,MyBatis就是你的厨房助手。全局配置文件就像是厨房的“总菜单”,它告诉厨房助手(MyBatis)如何准备食材(连接到数据库),以及厨房的基本规则(事务管理)。而映射器文件就像是具体的“菜品制作说明”,它详细描述了每一道菜(SQL语句)的制作步骤(SQL逻辑),以及如何将食材(数据库数据)变成美味的菜品(Java对象)。