Mybatis的基础操作——03

写mybatis代码的方法有两种:

  1. 注解
  2. xml方式

本篇就介绍XML的方式

使用XML来配置映射语句能够实现复杂的SQL功能,也就是将sql语句写到XML配置文件中。

目录

[一、配置XML文件的路径,在resources/mapper 的目录下](#一、配置XML文件的路径,在resources/mapper 的目录下)

二、写持久层代码

1.添加mapper接口

2.添加UserInfoXMLMapper.xml

三、增删改查操作

1.增(Insert)

2.删(Delete)

3.改(Update)

4.查(Select)


Mybatis XML 的方式需要以下步骤:

一、配置XML文件的路径,在resources/mapper 的目录下

application.yml文件的配置如下

java 复制代码
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

application.properties⽂件的配置如下

java 复制代码
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml

二、写持久层代码

持久代码分两部分

  1. 方法定义:Interface
  2. 方法实现:XXX.xml

1.添加mapper接口

数据持久层的接口定义:

java 复制代码
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserInfoXMlMapper {
   List<UserInfo> queryAllUser();
}

2.添加UserInfoXMLMapper.xml

数据持久层的实现,mybatis的xml固定格式为:

java 复制代码
<?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.UserInfoMapper">
 
</mapper>
  • 创建UserInfoXMLMapper.xml, 路径参考yml中的配置,注意路径和格式要对应,不然会出错。
  • 在XML文件中添加sql语句,查询所有用户的具体实现:
java 复制代码
<?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 user_info
 </select>
</mapper>

补充:

  • namespace里面的是全限定类名,表示要实现哪个接口 。
  • id为方法名
  • 给访问接口添加单元测试:
java 复制代码
@SpringBootTest
class UserInfoMapperTest {
  @Autowired
  private UserInfoMapper userInfoMapper;
  @Test
  void queryAllUser() {
  List<UserInfo> userInfoList = userInfoMapper.queryAllUser();
     System.out.println(userInfoList);
  }
}

运行测试方法即可。


三、增删改查操作

1.增(Insert)

UserInfoMapper 接口

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

UserInfoMapper.xml 实现:

java 复制代码
<insert id="insertUser">
   insert into userinfo (username, `password`, age, gender, phone) values (#
{username}, #{password}, #{age},#{gender},#{phone})
</insert>
  • 如果使用@Param 设置参数名的话,使用方法和注解类似。

UserInfoMapper 接口:

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

UserInfoMapper.xml 实现:

java 复制代码
<insert id="insertUser">
 insert into user_info (username, `password`, age, gender, phone) values
 (#{userInfo.username},#{userInfo.password},#{userInfo.age},#
{userInfo.gender},#{userInfo.phone})
</insert>
  • 返回自增id:

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

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

2.删(Delete)

UserInfoMapper接口:

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

UserInfoMapper.xml 实现:

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

3.改(Update)

UserInfoMapper接口:

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

UserInfoMapper.xml实现:

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

4.查(Select)

同样的,使用XML的方式进行查询,也存在数据绑定的问题。

  • 我们把 sql语句进行简单修改,查询更多的字段内容。
java 复制代码
<select id="queryAllUser" resultType="com.example.demo.model.UserInfo">
 select id, username,`password`, age, gender, phone, delete_flag, 
create_time, update_time from user_info
</select>

运行结果:

结果显示,deleteFlag,createTime,update也没有进行赋值。

解决办法和注解类似:

1.起别名(用as)

2.结果映射(resultMap)

3.配置驼峰命名

其中1,3的解决办法和注解一样,不在多说了,接下来看下xml来写结果映射。

Mapper.xml

java 复制代码
<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 user_info
</select>

可以把设置的 id 应用到其他操作中。

相关推荐
2301_8194143021 分钟前
C++与区块链智能合约
开发语言·c++·算法
不想看见40428 分钟前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
炸膛坦客31 分钟前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
娇娇yyyyyy41 分钟前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
bcbobo21cn44 分钟前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
计算机安禾1 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
阿贵---1 小时前
C++构建缓存加速
开发语言·c++·算法
没有bug.的程序员1 小时前
Serverless 弹性扩容引发的全线熔断:Spring Boot 启动耗时从 1s 压缩至 0.3s 的物理级绞杀
java·spring boot·kubernetes·serverless·扩容·线上
紫丁香1 小时前
pytest_自动化测试3
开发语言·python·功能测试·单元测试·集成测试·pytest
bearpping1 小时前
java进阶知识点
java·开发语言