MyBatis定义Mapper接口方式及规则

在使用Mybatis操作数据库时,往往脱离不了相关Mapper文件的编写。今天我们就说说几种Mapper文件编写的方式及相关路径规则。
如有问题还请大家进行及时纠正。

使用注解方式

如下定义一个操作用户的Mapper 接口:


@Mapper
public interface UserMapper{
   
   @Select("SELECT * FROM user WHERE username = #{username} And age = #{age}")
   public User findByUsernameAndAge(
   @Param("username") String username),
   @Param("age") String age
   );

   @Select("SELECT * FROM user")
   @MapKey(value="id")
   public Map<String,User> findAllOfMap();

}

如上代码所示没有特殊路径要求,只需将Mapper接口注册到MyBatis 上下文即可,无需关系其他。

使用XML文件方式

如下定义一个操作用户的Mapper 接口:


@Mapper
public interface UserMapper{
   public User findByUsernameAndAge(
   @Param("username") String username),
   @Param("age") String age
   );

   @MapKey(value="id")
   public Map<String,User> findAllOfMap();
}

与之对应一个UserMapper.xml文件编写SQL片段:

<?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.test.dao.UserMapper">
   <select id="findByUsernameAndAge">
       SELECT * FROM user WHERE username = #{username} And age = #{age}
  </select>
   
  <select id="findAllOfMap" resultType="map">
       SELECT * FROM user
  </select>

</mapper>

如上代码所示,使用一个Mapper接口和一个对应的xml 文件编写时,必须保证xml文件名称必须和对应的Mapper接口相同,同时保证Mapper接口和对应的xml在同一个包下.相关解析源码如下:

  private void loadXmlResource() {
    // Spring 可能不知道真正的资源名称,所以我们检查一个标志以防止再次加载资源两次,
    // 这个标志是在 XMLMapperBuilderbindMapperForNamespace 设置的。
    // namespace:org.apache.test.dao.RoleDao:判断mapper接口对应的mapper.xml文件是否加载过
    if (!configuration.isResourceLoaded("namespace:" + type.getName())) {

      // 通过mapper接口名称获取同包下mapper.xml文件
      // interface org.apache.test.dao.RoleDao -> org/apache/test/dao/RoleDao.xml
      String xmlResource = type.getName().replace('.', '/') + ".xml";

      InputStream inputStream = null;
      try {
        inputStream = Resources.getResourceAsStream(type.getClassLoader(), xmlResource);
      } catch (IOException e) {
        // ignore, resource is not required
      }

      // 如果没有加载到mapper接口对应的xml文件时,则通过全注解模式加载mapper信息.
      if (inputStream != null) {
        // 通过XMLMapperBuilder解析mapper.xml文件
        XMLMapperBuilder xmlParser = new XMLMapperBuilder(inputStream, assistant.getConfiguration(), xmlResource,
            configuration.getSqlFragments(), type.getName());
        xmlParser.parse();
      }
    }
  }

使用MyBatis-Config.xml文件方式

此方式后续进行补充。


  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值