前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >②【MyBatis】 Mapper代理方式开发( 常用 )

②【MyBatis】 Mapper代理方式开发( 常用 )

作者头像
.29.
发布2024-03-14 09:32:27
880
发布2024-03-14 09:32:27
举报
文章被收录于专栏:个人技术博客个人技术博客
②【MyBatis】 Mapper代理方式
  • ⚪使用Mapper代理方式开发
    • 1. Mapper接口与SQL映射文件
    • 2. 设置映射文件namespace属性
    • 3. 定义接口方法,方法名、返回值类型与映射文件id、resultType保持一致
    • 4. 通过SqlSession对象getMapper方法获取代理对象并执行SQL

  • 使用Mapper代理的目的
    • 解决原生方式中的硬编码
    • 简化 后期SQL语句的执行
  • Mapper代理方式的优势
    • 代码不仅更清晰,类型更加安全,还不用担心可能出错的字符串字面值以及强制类型转换。

⚪使用Mapper代理方式开发

步骤

  1. 定义Mapper接口(与SQL映射文件同名),并将Mapper接口与SQL映射文件放置在同一目录下;
  2. 将SQL映射文件的namespace属性设置为Mapper接口全限定名(如"com.java.mapper.UserMapper");
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持方法返回值类型与SQL映射文件一致;
  4. 编码(Coding):使用SqlSession对象getMapper方法获取Mapper接口代理对象,并调用对应方法完成SQL的执行;

1. Mapper接口与SQL映射文件

资源包下创建一个目录,存放SQL映射文件

注意,创建时使用"\“,不能使用”." !!!

SQL映射文件位置改动后,需要在MyBatis核心配置文件中重新配置SQL映射文件位置哦!"com/java/mapper/UserMapper.xml 若Mapper接口名称与SQL配置文件名称一致且在同一目录下,可以简化MyBatis配置文件中配置映射文件的操作。

设置同名接口,目录名称保持一致

虽然现在接口与映射文件仅目录同名而位置不同,但在编译后会因为目录同名的关系被放置在同一位置;

2. 设置映射文件namespace属性

将namespace属性设置为Mapper接口的全限定名

代码语言:javascript
复制
<?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">

<!--配置namespace命名空间,id,返回值类型-->
<mapper namespace="com.java.mapper.UserMapper">
    <select id="selectAll" resultType="com.java.pojo.User">
        select * from tb_user;
    </select>
</mapper>
3. 定义接口方法,方法名、返回值类型与映射文件id、resultType保持一致
代码语言:javascript
复制
public interface UserMapper {
    //方法名、返回值类型与映射文件id、resultType保持一致
    public List<User> selectAll();
}
4. 通过SqlSession对象getMapper方法获取代理对象并执行SQL

测试

代码语言:javascript
复制
public class mybatisDemo {
    public static void main(String[] args) throws IOException {
        //1. 加载mybatis配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//
//        //2. 获取SqlSession对象去执行SQL
//        SqlSession sqlSession = sqlSessionFactory.openSession();
//
//        //3. 执行SQL语句
//        //传入Mapper映射文件中SQL语句的 "命名空间+id"
//        List<User> users = sqlSession.selectList("test.selectAll");
//
//        System.out.println(users);
//
//        //释放资源
//        sqlSession.close();

        //2. Mapper代理方式,简洁、安全、避免硬编码
        //try()中创建资源,无需手动释放
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.selectAll();
            System.out.println(users);
        }
    }
}

输出结果

[User{id=1, username=‘张三’, password=‘123’, gender=‘男’, addr=‘北京’}, User{id=2, username=‘李四’, password=‘456’, gender=‘男’, addr=‘上海’}, User{id=3, username=‘王麻子’, password=‘789’, gender=‘女’, addr=‘广州’}]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ②【MyBatis】 Mapper代理方式
  • ⚪使用Mapper代理方式开发
    • 1. Mapper接口与SQL映射文件
      • 2. 设置映射文件namespace属性
        • 3. 定义接口方法,方法名、返回值类型与映射文件id、resultType保持一致
          • 4. 通过SqlSession对象getMapper方法获取代理对象并执行SQL
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档