【Java EE】Mybatis之XML详解

文章目录

MyBatis XML的⽅式需要以下两步:

  1. 配置数据库连接字符串和MyBatis

  2. 写持久层代码

🎍配置数据库连接和MyBatis

application.yml⽂件配置内容如下:

css 复制代码
 spring:
 datasource:
  url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
   characterEncoding=utf8&useSSL=false
  username: root
  password: 你自己设置的密码
  driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
 configuration: # 配置打印 MyBatis⽇志
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mapper-locations: classpath:mapper/**Mapper.xml

如果是application.properties⽂件,配置内容如下:

css 复制代码
#驱动类名称 
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. ⽅法定义:Interface
  2. ⽅法实现:XXX.xml

🌸添加mapper接口

数据持久层的接⼝定义:

css 复制代码
@Mapper
public interface UserInfoXMlMapper {
    
}

🌸添加UserInfoXMLMapper.xml

数据持久成的实现,MyBatis的固定xml格式:

css 复制代码
<?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="org.example.mybatis.mapper.UserInfoXMlMapper">

</mapper>

创建UserInfoXMLMapper.xml,路径参考yml中的配置

查询所有⽤⼾的具体实现:

css 复制代码
<?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">
 <select id="queryAllUser" resultType="com.example.demo.model.UserInfo">
 select username,`password`, age, gender, phone from userinfo
 </select>
</mapper>

以下是对以上标签的说明:

• 标签:需要指定namespace 属性,表⽰命名空间,值为mapper接⼝的全限定

名,包括全包名.类名。

• 查询标签:是⽤来执⾏数据库的查询操作的:

◦ id :是和Interface (接⼝)中定义的⽅法名称⼀样的,表⽰对接⼝的具体实现⽅法。

◦ resultType :是返回的数据类型,也就是开头我们定义的实体类.

🌸单元测试

css 复制代码
@SpringBootTest
class UserInfoMapperTest {
 @Autowired
 private UserInfoMapper userInfoMapper;
 @Test
 void queryAllUser() {
 List<UserInfo> userInfoList = userInfoMapper.queryAllUser();
 System.out.println(userInfoList);
 }
 
}

🌲CRUD

🌸增(Insert)

UserInfoMapper接⼝:

css 复制代码
Integer insertUser(UserInfo userInfo);

UserInfoMapper.xml实现:

css 复制代码
<insert id="insertUser">
 insert into userinfo (username, `password`, age, gender, phone) values (#
{username}, #{password}, #{age},#{gender},#{phone})
</insert>

如果使⽤@Param设置参数名称的话,使⽤⽅法和注解类似

UserInfoMapper接⼝:

css 复制代码
Integer insertUser(@Param("userinfo") UserInfo userInfo);

UserInfoMapper.xml实现:

css 复制代码
<insert id="insertUser">
 insert into userinfo (username, `password`, age, gender, phone) values
 (#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>

返回⾃增id

接⼝定义不变,Mapper.xml实现设置useGeneratedKeys和keyProperty属性

css 复制代码
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
 insert into userinfo (username, `password`, age, gender, phone) values
 (#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>

🌸删(Delete)

UserInfoMapper接⼝:

css 复制代码
Integer deleteUser(Integer id);

UserInfoMapper.xml实现:

css 复制代码
<delete id="deleteUser">
 delete from userinfo where id = #{id}
</delete>

🌸改(Update)

UserInfoMapper接⼝:

css 复制代码
Integer updateUser(UserInfo userInfo);

UserInfoMapper.xml实现:

css 复制代码
<update id="updateUser">
 update userinfo set username=#{username} where id=#{id}
</update>

🌸查(Select)

同样的,使⽤XML的⽅式进⾏查询,也存在数据封装的问题

我们把SQL语句进⾏简单修改,查询更多的字段内容

css 复制代码
<select id="queryAllUser" resultType="com.example.demo.model.UserInfo">
 select id, username,`password`, age, gender, phone, delete_flag, 
create_time, update_time from userinfo
</select>

结果显⽰:deleteFlag,createTime,updateTime也没有进⾏赋值.

解决办法和注解类似:

  1. 起别名
  2. 结果映射
  3. 开启驼峰命名
    其中1,3的解决办法和注解⼀样,不再多说,接下来看下xml如果来写结果映射

Mapper.xml

css 复制代码
<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>

⭕总结

感谢大家的阅读,希望得到大家的批评指正,和大家一起进步,与君共勉!

相关推荐
q***81643 小时前
MySQL:数据查询-limit
数据库·mysql
p***92483 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
S***26754 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
JIngJaneIL5 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
这是程序猿6 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
I***t7166 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql
i***t9196 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08296 小时前
【监控】spring actuator源码速读
java·spring boot·spring
一 乐6 小时前
应急知识学习|基于springboot+vue的应急知识学习系统(源码+数据库+文档)
数据库·vue.js·spring boot
vx_dmxq2116 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php