XML映射文件

XML映射文件

在日常使用中,通过注释的方式使用简单sql语句可能足够了,但是如果遇到比较复杂的sql语句,注释就显得力不从心了,例如动态sql语句,xml映射文件解决了注释sql的缺点

xm文件规范

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)

  • XML映射文件的namespace属性为Mapper接口全限定名一致

  • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

一、XML配置文件实现

第1步:创建XML映射文件

在/resources文件夹下创建一个和接口地址一样的包名,然后创建一个同名的文件

例如,我们的项目结构是这样的

我们想将mapper包下的UserMapper的sql语句在xml文件中实现,我们就需要在创建一个同名包,我们可以直接右键选择Copy Reforence复制文件全名,这里

mapper的全名为com.aboutjianzhe.mapper,那么我们就需要在resource下同样创建一个同名的包,创建语句是这样的com/aboutjianzhe/mapper,

这里我们使用斜杠/而不是点.,注意,然后创建一个同名的xml文件,图中应该创建UserMapper.xml这个文件

二、编写XML映射文件

在我们创建的xml文件里添加以下结构基本语句,可以直接区官网复制,传送门

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
 
</mapper>

解释:

  • namespace:填写的是mapper包的全名,这里我们应该填写com.aboutjianzhe.mapper,这样写是为了让springboot能够找到sql语句的位置
  • id为Mapper对应的接口函数名
  • resultType为返回值类型的全类名,注意,是单条记录的类型,例如:List 的返回值类型应该为Emp为不是List

完整代码

<?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.aboutjianzhe.mapper.UserMapper">
    <select id="list" resultType="com.aboutjianzhe.pojo.User">
            select * from user where name = #{name};
    </select>
</mapper>
@Mapper
public interface UserMapper {
    
    List<User> list(String name);
}

解释:

  • id:与函数名相同,我们这里的函数名是list,所以id那里填写list
  • resultType:返回值类型,注意,这里的返回值类型是单个返回值类型,不是List<User>,而是User,这里同样需要填写User的全名路径 com.aboutjianzhe.pojo.User
  • select:这个标签表示我们需要执行的操作,我们需要的是查询操作,所以选择select标签

三、插件推荐:MyBatisX

使用

示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.EmpMapper">
    <select id="getEmpsByPage" resultType="com.example.pojo.Emp">
        select * from emp
        <where>
            <if test="name!= null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
            <if test="gender!= null">
                and gender = #{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>
    
</mapper>	

and #{end}


order by update_time desc

```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值