文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅谈MyBatis执行SQL的两种方式

2024-04-02 19:55

关注

前言

本文介绍MyBatis执行SQL语句的2种方式:SqlSession和Mapper接口以及它们的区别。

准备接口和Mapper配置文件:

定义UserMapper接口:


package cn.cvs.dao;

import cn.cvs.pojo.User;

import java.util.List;

public interface UserMapper {
    //查找所有的用户信息
    public List<User> findAll();
    //查询用户的数量
    public int selectCount();
}

定义UserMapper配置文件:


<?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="cn.cvs.dao.UserMapper">
<!--    查找所有的用户信息-->
    <select id="findAll" resultType="cn.cvs.pojo.User">
        SELECT * FROM t_sys_user
    </select>
<!--    查询用户的数量-->
    <select id="selectCount" resultType="int">
        SELECT count(1) FROM t_sys_user
    </select>
</mapper>

指定sqlMapConfig其mapper文件的位置:

在sqlMapConfig.xml文件里面添加<mappers>成对标签,然后里加上成对的mapper标签,使用mapper的resource属性指定mapper文件的路径,这个路径是从target/classes路径开启的。

使用注意:
resource=“mapper文件的路径,使用 / 分割路径”,记住不是"."
一个mapper resource 指定一个mapper文件

代码模板:


<mappers>
	<mapper resource="mapper文件的路径"/>
</mappers>

使用SqlSession 发送 SQL

指定要执行的sql语句的 id:

sql的id = namespace+"."+ select|update|insert|delete标签的id属性值

例如:
namespace为cn.cvs.dao.UserMapper指定id为selectCount的sql语句


格式:命名空间(namespace)+点(.)+id属性值(id)
格式:cn.cvs.dao.UserMapper.selectCount

在这里插入图片描述

这样 MyBatis 就会找到对应的 SQL

通过SqlSession的方法,执行sql语句


List<User> list = sqlSession.selectList("cn.cvs.dao.UserMapper.findAll");

selectList 方法表示使用查询并且只返回一个List集合

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


List<User> list = sqlSession.selectList("selectCount");

这是 MyBatis 前身 iBatis 所留下的方式。

使用 Mapper 接口发送 SQL

用 Mapper 接口发送SQL就是以动态代理的方式sqlsession.getMapper(dao.class)获取dao接口对象,执行对应方法即可。这样做不用我们再去写dao接口的实现类就可以直接执行对应sql语句,其实就是MyBatis以代理的方式帮我们创建了接口的实现类。

Mapper规范:namespace要写dao接口的全限定名称,标签id要写接口方法名

在这里插入图片描述

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


UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list2=mapper.findAll();

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

比较两种发送 SQL 方式

用 SqlSession 接口发送 SQL :
无需定义dao接口,直接通过"命名空间+id"调用对应的SQL
List list = sqlSession.selectList(“cn.cvs.dao.UserMapper.findAll”);

用 Mapper 接口发送 SQL :
通过 SqlSession 获取 Mapper 接口
格式:接口类名 对象名 = sqlSession.getMapper(接口类名.class);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
调用对应的SQL
List list2=mapper.findAll();

建议采用 SqlSession 获取 Mapper 接口的方式:

使用 Mapper 接口编程可以消除 SqlSession 带来的功能性代码,提高可读性,而 SqlSession 发送 SQL,需要一个> SQL id 去匹配 SQL,比较晦涩难懂。

到此这篇关于浅谈MyBatis执行SQL的两种方式的文章就介绍到这了,更多相关MyBatis执行SQL内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯