MyBatis开发: XML配置⽂件

前言

在IDEA的yml文件注释发现乱码

1.配置文件注释中文显示乱码

退出重进,发现不是乱码就成功


一.MyBatis XML配置⽂件 

学习了注解的⽅式, 接下来我们学习XML的⽅式.
使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能. 如果需要实现复杂的SQL功能,建议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中.
MyBatis XML的⽅式需要以下两步:
  • 配置数据库连接字符串和MyBatis
  • 写持久层代码

1.1配置连接字符串和MyBatis

此步骤需要进⾏两项设置,数据库连接字符串设置和 MyBatis 的 XML ⽂件配置。
如果是application.yml⽂件, 配置内容如下:
# 数据库连接配置
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
如果是application.properties⽂件, 配置内容如下:
#驱动类名称
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 写持久层代码

持久层代码分两部分
1. ⽅法定义 Interface
2. ⽅法实现: XXX.xml

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>

返回⾃增 id
接⼝定义不变, Mapper.xml 实现 设置useGeneratedKeys 和keyProperty属性
如果使⽤@Param设置参数名称的话, 使⽤⽅法和注解类似  

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>
<mapper> 标签:需要指定 namespace 属性,表⽰命名空间,值为 mapper 接⼝的全限定
名,包括全包名.类名。
<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. 起别名
  2. 结果映射
  3. 开启驼峰命名

其中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>

关于开发中使⽤哪种模式这个问题, 没有明确答案. 仁者⻅仁智者⻅智, 并没有统⼀的标准, 更多是取决于你的团队或者项⽬经理, 项⽬负责⼈


三.多表查询

多表查询和单表查询类似, 只是SQL不同⽽已
⽂章表的uid, 对应⽤⼾表的id.

1.数据库创建articleinfo表

2.创建对象

3.定义接口,声明方法 

Mybatis 不分单表还是多表, 主要就是三部分: SQL, 映射关系和实体类 

通过映射关系, 把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对象)。

  • 34
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值