首页 > 数据库 >Mybatis学习笔记(三)——Mybatis执行sql的两种方式

Mybatis学习笔记(三)——Mybatis执行sql的两种方式

时间:2022-09-04 22:11:51浏览次数:52  
标签:Mapper sql 接口 MyBatis SqlSession 笔记 SQL Mybatis selectOne

这部分内容前边简单提过了,之前写第一个Mybatis示例时用的就是第一种方式。

本节主要介绍 MyBatis 执行 SQL 语句的两种方式和它们的区别。
MyBatis 有两种执行 SQL 语句的方式,如下:

1.通过 SqlSession 发送 SQL

2.通过 SqlSession 获取 Mapper 接口,通过 Mapper 接口发送 SQL

1.SqlSession发送SQL

直接通过“命名空间(namespace)+SQL id”的方式执行 SQL,不需要获取映射器。 
Website website = (Website)sqlSession.selectOne("net.biancheng.mapper.WebsiteMapper.getWebsite",1);

MyBatis 常用的查询方法有 2 种,分别为 selectOne 和 selectList。

selectOne 方法表示使用查询并且只返回一个对象,必须指定查询条件。只能查询 0 或 1 条记录,大于 1 条记录则运行错误。常用格式如下(也有其它重载方法,根据需要选择)。

sqlSession.selectOne(String arg0, Object arg1)

selectList 方法表示使用查询并且返回一个列表。可以查询 0 或 N 条记录。常用格式如下。

sqlSession.selectList(String arg0)

也可指定参数:

sqlSession.selectList(String arg0, Object arg1)

以上语法格式中,String 对象由一个命名空间加 SQL id 组合而成,它完全定位了一条 SQL,这样 MyBatis 就会找到对应的 SQL。Object 对象为需要传递的参数,也就是查询条件。

selectOne 实现的 selectList 都可以实现,即 list 中只有一个对象。但 selectList 能实现的,selectOne 不一定能实现。

如果 MyBatis 中只有一个 id 为 getWbsite 的 SQL,那么也可以简写为:

Website website = (Website )sqlSession.selectOne("getWbsite",1);

2.Mapper接口发送 SQL

 SqlSession 还可以获取 Mapper 接口,通过 Mapper 接口发送 SQL,如下所示。
WebsiteMapper websiteMapper = sqlSession.getMapper(WebsiteMapper.class);
Website website = websiteMapper.getWebsite(1);

通过 SqlSession 的 getMapper 方法获取一个 Mapper 接口,然后就可以调用它的方法了。因为 XML 文件或者接口注解定义的 SQL 都可以通过“类的全限定名+方法名”查找,所以 MyBatis 会启用对应的 SQL 运行,并返回结果。

3.区别

上面分别讲解了 MyBatis 两种发送 SQL 的方式,一种用 SqlSession 直接发送,另外一种通过 SqlSession 获取 Mapper 接口再发送。笔者建议采用 Mapper 接口发送 SQL 的方式,理由如下:

  • 使用 Mapper 接口编程可以消除 SqlSession 带来的功能性代码,提高可读性,而 SqlSession 发送 SQL,需要一个 SQL id 去匹配 SQL,比较晦涩难懂。
  • 使用 Mapper 接口,类似 websiteMapper.getWebsite(1) 则是完全面向对象的语言,更能体现业务的逻辑。
  • 使用 websiteMapper.getWebsite(1) 方式,IDE 会提示错误和校验,而使用 sqlSession.selectOne("getWebsite",1L) 语法,只有在运行中才能知道是否会产生错误。

目前使用 Mapper 接口编程已成为主流,尤其在 Spring 中运用 MyBatis 时,Mapper 接口的使用就更为简单,所以本教程使用 Mapper 接口的方式讨论 MyBatis。

标签:Mapper,sql,接口,MyBatis,SqlSession,笔记,SQL,Mybatis,selectOne
From: https://www.cnblogs.com/worthmove/p/16656284.html

相关文章

  • postgresql/lightdb CommandCounterIncrement()函数的作用
    CommandCounterIncrement的作用是使当前事务中前面语句的修改对本语句可见,相当于oracle中的当前读概念(currentread,只不过oracle区分,pg不区分)。事务中每执行一个语句后......
  • 论lightdb/postgresql中的search_path及实现兼容性管理
    上一篇介绍了lightdb/postgresqlpublic、pg_catalogschema的区别及pg_namespace概念,因为最近几个版本开发下来,遇到了很多兼容性挑战。所以这一节来专门讨论一下searc......
  • 第一次读书笔记
    总结:第一二单元总的来说是在描述Linux系统中c语言的重要性,以及在其中的一些使用技巧。其中C语言数据结构中的数据结构,就是Linux文件系统构建起来的基础。第一章主要包含......
  • lightdb使用一条sql实现高性能事务一致性归历史
    相比insertselect,delete,如下:--lightdb专有oracle匿名块写法BEGINTRANSACTIONISOLATIONLEVELREPEATABLEREAD;insertintoxxselectxxfromyywhereid<xxx;......
  • 学习笔记1
    一、学习笔记第一章1.Unix  Unix是20世纪70年代初出现的一个操作系统,除了作为网络操作系统之外,还可以作为单机操作系统使用。Unix作为一种开发平台和台式操作系统获......
  • 第一二章学习笔记
    第一章引言本章简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&TSystemV以及Unix的其他版本,如BSD、HPUX、IBMAIX和Sun/SolarisUnix。此外,还介绍了Linux......
  • mybatis之MetaObject
    MetaObject元数据对象,底层肯定是反射,通过反射来进行设置值。这个可以来操作对象中的属性,哪怕是组合方式,无论有多少层,这个都可以来进行操作。举例如下所示:publicclass......
  • Unix/Linux系统编程学习笔记-1
    笔记第一章引言一、概述:在第一章引言里,简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&TSystemV以及Unix的其他版本,如BSD、HPUX、IBMAIX和Sun/Solari......
  • 《Unix/Linux系统编程》第一、二章读书笔记
    自学教材1、2章学习笔记一、任务要求学教材第1,2章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)知识的结构......
  • 《信息安全系统设计与实现》第一周学习笔记
    《信息安全系统设计与实现》第一周学习笔记20201303张奕博一、任务要求自学教材第1,2章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实......