ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MyBatis框架——MyBatis执行SQL的两种方式(转载)

2022-04-30 14:04:53  阅读:155  来源: 互联网

标签:Mapper 接口 SqlSession SQL MyBatis 转载 selectOne


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

MyBatis 有两种执行 SQL 语句的方式,如下:
  1. 通过 SqlSession 发送 SQL
  2. 通过 SqlSession 获取 Mapper 接口,通过 Mapper 接口发送 SQL

 

 

SqlSession发送SQL

有映射器之后就可以通过 SqlSession 发送 SQL 了。我们以 getWebsite 这条 SQL 为例看看如何发送 SQL。
  • Website website = (Website)sqlSession.selectOne("net.biancheng.mapper.WebsiteMapper.getWebsite",1);
MyBatis 常用的查询方法有 2 种,分别为 selectOne 和 selectList。

 

 

1)selectOne 

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

 

 

2)selectList 

selectList 方法表示使用查询并且返回一个列表。可以查询 0 或 N 条记录。常用格式如下。
  • sqlSession.selectOne(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);
这是 MyBatis 前身 iBatis 所留下的方式。

 

 

Mapper接口发送 SQL

 

 

SqlSession 还可以获取 Mapper 接口,通过 Mapper 接口发送 SQL,如下所示。

  • WebsiteMapper websiteMapper = sqlSession.getMapper(WebsiteMapper.class);
  • Website website = websiteMapper.getWebsite(1);

 

 

通过 SqlSession 的 getMapper 方法获取一个 Mapper 接口,然后就可以调用它的方法了。

因为 XML 文件或者接口注解定义的 SQL 都可以通过“类的全限定名+方法名”查找,所以 MyBatis 会启用对应的 SQL 运行,并返回结果。

 

 

 

区别

 

 

上面分别讲解了 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,接口,SqlSession,SQL,MyBatis,转载,selectOne
来源: https://www.cnblogs.com/xiaobaibailongma/p/16209999.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有