请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 531|回复: 0

mybatis接口编程

[复制链接]

32

主题

32

帖子

114

积分

版主

Rank: 7Rank: 7Rank: 7

积分
114
发表于 2022-4-24 12:59:55 | 显示全部楼层 |阅读模式
面向接口编程
前面章节我们通过MyBatis的入门程序我们完成了对数据库的CRUD,只需要在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样你就可以用全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了,就像前面的例子中那样
User user = sqlSession.selectOne("findUserById", 1);
你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。极度依赖于字符串字面值,很容易就写错,不利于程序的编码效率,于是MyBatis还支持面向Mapper接口的编程方式,类似如下一样 :
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
可以看到这种方式好处,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句
1.1.面向接口编程步骤第1步:针对表编写Mapper接口
如 :这里我们针对的是User表,故我们在com.cc.mapper包中这里创建的接口 为:UserMapper.java,其他表类似
public interface UserMapper {
    User selectUser(int id);   
}第2步:编写Mapper接口的映射
在config的sqlmap下创建UserMapper.xml文件,添加如下的映射
<!--
namespace : 名称空间 1、隔离sql 语句 2、绑定接口 注意:这里必须为Mapper接口的全限定名,否则报错
id:sql的映射的唯一标识
resultType:sql语句执行的结果封装的类(全限定名)
#{id}:接受传递过来的参数
-->
<mapper namespace="com.cc.mapper.UserMapper">
  <!-- -User selectUser(int id); -->
  <select id="selectUser" resultType="com.cc.entity.User">
    select * from user where id = #{id}
  </select>
</mapper>第3步:编写测试类@Test
public void testMapper() throws IOException {
  SqlSession sqlSession = null;

  // 1.构建SqlSessionFactory
  String resource = "mybatis-config.xml";
  InputStream inputStream = Resources.getResourceAsStream(resource);
  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  try {
    // 2.创建SqlSession对象
    // 1)提供了在数据库执行 SQL 命令所需的所有方法。
    // 2)你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    sqlSession = sqlSessionFactory.openSession();

    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    User user = userMapper.selectUser(27);

    System.out.println("user:" + user);

  } finally {
    // 3.关闭sqlSession
    sqlSession.close();
  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2022-11-28 19:45 , Processed in 0.045229 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表