写mybatis代码的方法有两种:
- 注解
- xml方式
本篇就介绍XML的方式
使用XML来配置映射语句能够实现复杂的SQL功能,也就是将sql语句写到XML配置文件中。
目录
[一、配置XML文件的路径,在resources/mapper 的目录下](#一、配置XML文件的路径,在resources/mapper 的目录下)
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
二、写持久层代码
持久代码分两部分
- 方法定义:Interface
- 方法实现: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 应用到其他操作中。