MyBatis开发: XML配置⽂件

news/2024/9/23 21:15:27/

前言

在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=falseusername: rootpassword: rootdriver-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文件配置

java"># 配置 mybatis xml 的文件路径,在 resources/mapper 创建所有表的 xml 文件mapper-locations: classpath:mybatis/**Mapper.xml

1.2 写持久层代码

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

2.建包 

 3.创建一个接口(方法的声明),在mapper文件下创建一个接口

java">@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.插入数据(记得注解信息要全) 

java">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 {@Autowiredprivate UserInfoXmlMapper userInfoXmlMapper;@Testvoid 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.方法声明

java">Integer delete(Integer id);

2.使用xml文件进行SQL

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

 3.单元测试

java"> @Testvoid delete() {userInfoXmlMapper.delete(5);}

4. 删除成功


2.3修改操作(update)

数据库更新操作(更新id=1,用户admin的password)

1.方法声明

java"> Integer update(UserInfo userInfo);

2.使用xml文件进行SQL

java"><update id="update">update userinfo set password = #{password} where id =#{id}</update>

 3.单元测试 

java">@Testvoid update() {UserInfo userInfo = new UserInfo();userInfo.setId(1);userInfo.setPassword("admin");userInfoXmlMapper.update(userInfo);}

4.修改成功 


2.4查询操作(select)

1.声明方法

java">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.单元测试 

 

java"> @Testvoid 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 taleft join userinfo tbon ta.uid = tb.idwhere ta.id = #{id}</select>

 7.4进行单元测试

java"> @Testvoid 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对象)。


http://www.ppmy.cn/news/1503959.html

相关文章

微前端(qiankun)

微前端 特点&#xff1a;独立开发、独立部署&#xff0c;独立运行&#xff0c;增量升级 解决的问题&#xff1a;日常开发过程中&#xff0c;可能有很多老项目需要迭代&#xff0c;但是可能新的一些可能需要使用的依赖或者新的一些框架&#xff0c;老项目已经不满足&#xff0c;…

FFmpeg实现文件夹多视频合并

ffmpeg version 6.1.1 要求: 合并的视频同分辨率、同帧率 命令: python 多文件夹多视频合并.py --input_videos D:\videos --output_videos D:\out_videos --output_txts D:\out_txt要求视频文件夹输入目录:--videos--test1001.mp4002.mp4--test2001.mp4002.mp4输出目录(自动创…

Python酷库之旅-第三方库Pandas(034)

目录 一、用法精讲 101、pandas.Series.__array__魔法方法 101-1、语法 101-2、参数 101-3、功能 101-4、返回值 101-5、说明 101-6、用法 101-6-1、数据准备 101-6-2、代码示例 101-6-3、结果输出 102、pandas.Series.get方法 102-1、语法 102-2、参数 102-3、…

TCP为什么需要四次挥手?

tcp为什么需要四次挥手&#xff1f; 答案有两个&#xff1a; 1.将发送fin包的权限交给被动断开方的应用层去处理&#xff0c;也就是让程序员处理 2.接第一个答案&#xff0c;应用层有了发送fin的权限&#xff0c;可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…

Django学习(二)

get请求 练习&#xff1a; views.py def test_method(request):if request.method GET:print(request.GET)# 如果链接中没有参数a会报错print(request.GET[a])# 使用这个方法&#xff0c;当查询不到参数时&#xff0c;不会报错而是返回你设置的值print(request.GET.get(c,n…

后表观遗传学时代如何开展DNA甲基化研究?

DNA甲基化是一种重要的表观遗传学修饰形式&#xff0c;指的是DNA分子上附加甲基基团&#xff08;-CH3&#xff09;的过程。在甲基化的过程中&#xff0c;甲基基团通常被共价地添加到DNA分子的胞嘧啶&#xff08;Cytosine&#xff0c;简称C&#xff09;碱基上&#xff0c;形成5-…

出差一个月,回来发现USB转串口坏了4个

昨天同事问吾有没有串口线&#xff0c;我还奇怪。告诉我坏了好几个&#xff0c;我还真是震惊了&#xff0c;至于吗&#xff1f; 于是把几个坏了收集起来&#xff0c;挨个试了一番。结论是一个还能凑合用&#xff0c;三个是真坏了。所以有必要加个绝缘胶布保护一下。

HarmonyOS入门

HarmonyOS 系统定义 HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统。 Harmony提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设置&#xff0c;提供全场景&#xff08;移动办公、运动…