【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>

⭕总结

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

相关推荐
煎饼皮皮侠17 分钟前
【设计】设计一个web版的数据库管理平台后端(之五) --借鉴mybatis
数据库·mybatis
九皇叔叔7 小时前
《MySQL 体系架构详解:Server 层、SQL 执行流程与 InnoDB、MyISAM、MEMORY 存储引擎》
sql·mysql·架构
jay神9 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
愤怒的苹果ext10 小时前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh
谢亮_vipxieliang13 小时前
ValidX分组验证详解:不同场景使用不同验证规则
java·spring boot·后端·spring cloud·eclipse·hibernate
超兔一体云13 小时前
MySQL索引优化实战——从慢查询到索引调优
后端·mysql
2601_9620748114 小时前
大数据-264 实时数仓 - Canal MySQL的binlog研究 存储目录 变动信息 配置MySQL
大数据·数据库·mysql
凤山老林14 小时前
Spring Boot 集成 Spring Vault:集中式密钥管理与动态凭证轮换
spring boot·后端·spring·vault·集中式秘钥管理
2601_9620711714 小时前
八. Spring Boot2 整合连接 Redis(超详细剖析)
spring boot·redis·后端
2601_9620738114 小时前
大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
大数据·数据库·mysql