浅谈MyBatis执行SQL的两种方式

网友投稿 762 2022-12-22

浅谈MyBatis执行SQL的两种方式

浅谈MyBatis执行SQL的两种方式

目录前言准备接口和Mapper配置文件:使用SqlSession 发送 SQL使用 Mapper 接口发送 SQL比较两种发送 SQL 方式

前言

本文介绍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 findAll();

//查询用户的数量

public int selectCount();

}

定义UserMapper配置文件:

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

SELECT * FROM t_sys_user

SELECT count(1) FROM t_sys_user

指定sqlMapConfig其mapper文件的位置:

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

使用注意:

resource=“mapper文件的路径,使用 / 分割路径”,记住不是"."

一个mapper resource 指定一个mapper文件

代码模板:

使用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 list = sqlSession.selectList("cn.cvs.dao.UserMapper.finMjjiVrhzdAll");

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

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

List 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 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 带来的功能性代码,提高可读性,而 SqlSesshttp://ion 发送 SQL,需要一个> SQL id 去匹配 SQL,比较晦涩难懂。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:智能网联车载终端(车联网智能车载终端)
下一篇:修改手机软件应用框架怎么修改(手机如何修改应用程序)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~