MaBatis--Mapper代理

目前使用SqlSession进行增删改查的缺点:

  1. 没有办法实现多参传值
  2. 书写的时候没有接口,后期的维护低

使用Mapper的动态代理方式来解决问题

具体实现

首先我们需要编写Dao层相关的数据库接口--AccountMapper

public interface AccountMapper {
/**
* 查询account表中的所有数据
* @return 返回结果集
*/
List<Account> selectAll(); /**
*
* @param account 需要插入的JavaBean对象
* @return 影响行
*/
int insert(Account account);
}

接下来编写SQL映射文件--AccountMapper.xml

<?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">
<!-- namespace = "接口的全路径" -->
<mapper namespace="com.lyl.dao.AccountMapper">
<!-- id接口的方法名 -->
<select id="selectAll" resultType="account">
select * from account
</select> <insert id="insert">
insert into Account values(DEFAULT ,#{username},#{balance})
</insert>
</mapper>

再编写测试类--Test4

public class Test4 {
public static void main(String[] args) throws Exception {
// 1.解析mybatis.xml文件配置
String resource = "mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.得到SqlSessionFactory工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3.得到一个SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 4.SQL操作 AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class); // 通过动态代理得到接口对象
List<Account> list = accountMapper.selectAll(); Account account = new Account();
account.setUsername("lyl");
account.setBalance(9999);
int a = accountMapper.insert(account); System.out.println(list);
System.out.println(a);
// 5.关闭资源
sqlSession.close();
}
}

控制台结果:

[Account{id=1, username='张三', balance=1000.0}, Account{id=3, username='王五', balance=2000.0}, Account{id=4, username='赵六', balance=4000.0}, Account{id=5, username='丈八', balance=3000.0}]
1

主要看AccountMapper.xml,和Test4,那么通过上面的代码和注释可以看到我们不再通过SqlSession对象直接操作数据库,而是通过accountMapper接口对象来调用接口的方法操作数据库,这样我们就可以通过编写接口的方法来自定义传参类型以及个数,更加灵活规范的书写我们的SQL操作。那接口和SQL映射文件是怎么绑定在一起的呢?

两者绑定在一起并起作用都是依靠动态代理(动态代理我现在也没学所以不做解释),我们能看到最直观的线索就是AccountMapper.xml<mapper>标签中的namespace属性的值刚好就是我们AccountMapper接口在项目中的路径,这并不是巧合,就是依靠namespace来桥接接口和SQL映射文件。

既然可以传多参,那么参数的类型也是可以自定义,常见的对象,List,Map...都是可以传入,但是在SQL映射文件中取出实参却每个都不太一样。

取出对象:直接写对象的属性即可,MyBatis会自动帮我们取出

取出多个参数:用#{param1},#{param2}...即可一次对照形参的顺序即可,也可以用MaBatis的注解起别名@Param("xx")即可。

其他的类型可以自行百度。

MyBatis的Mapper代理笔记的更多相关文章

  1. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  2. Mybatis的mapper代理开发方法

    一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...

  3. Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)

    整体目录结构: 其中包下全部是采用mybatis自动生成工具生成. mybatis自动生成文件 <?xml version="1.0" encoding="UTF- ...

  4. mybatis——使用mapper代理开发方式

    ---------------------------------------------------------------generatorConfig.xml------------------ ...

  5. mybatis入门-mapper代理原理

    原始dao层开发 在我们用mybatis开发了第一个小程序后,相信大家对于dao层的开发其实已经有了一个大概的思路了.其他的配置不用变,将原来的test方法,该为dao的方法,将原来的返回值,直接在d ...

  6. Mybatis的mapper代理开发dao方法

    看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...

  7. springboot集成下,mybatis的mapper代理对象究竟是如何生成的

    前言 开心一刻 中韩两学生辩论. 中:端午节是属于谁的? 韩:韩国人! 中:汉字是谁发明的? 韩:韩国人! 中:中医是属于谁的? 韩:韩国人! 中:那中国人到底发明过什么? 韩:韩国人! 前情回顾 M ...

  8. mybatis入门--mapper代理方式开发

    不使用代理开发 之前,我们说了如何搭建mybatis框架以及我们使用mybatis进行简单的增删改查.现在,我们一起来构建一个dao层的完整代码.并用@test来模拟service层对dao层进行一下 ...

  9. mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例

    public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private ...

随机推荐

  1. HDFS中NameNode工作机制

    引言 NameNode: 存储元数据 管理整个HDFS集群 DataNode: 存储数据的block SecondaryNameNode: 辅助HDFS完成一些事情 NameNode和Secondar ...

  2. JavaScript学习04(标准对象)

    标准对象 在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用 typeof 操作符获取对象的类型,它总是返回一个字符串: typeof 12 ...

  3. Sqli-Labs less38-45

    less-38 前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html 实际上就是多条sql语句一起使用. 在38关源码中加入输出 ...

  4. Are You OK?主键、聚集索引、辅助索引

    每张表都一定存在主键吗? 关于这个问题,各位小伙伴们不妨先自己想一想,再往下寻找答案. 首先公布结论:对于 InnoDB 存储引擎来说,每张表都一定有个主键(Primary Key)! 让人非常遗憾的 ...

  5. arthas-Java诊断工具

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 官网:https://arthas.aliyun.com/zh-cn/ 当你遇到以下类似问题而束手无策时,Arthas可以帮助你 ...

  6. C#硬件访问(摄像头、麦克风)

    #需要引用:AForge类库.Microsoft.DirectX using System;using System.Windows.Forms;namespace CameraTest{ publi ...

  7. Linux初探之如何查看帮助文档自学命令

    linux命令种类繁多,参数各异,要每个都记住除非是过目不忘的神人,否则你只能记住常用的那几个,等到 要用时还是得靠--help,man,info这些命令去读文档,可是这些文档看起来也不那么直观,所以 ...

  8. Mysql慢查询explain

    转自:https://www.toutiao.com/i6776461352522220036/?tt_from=weixin&utm_campaign=client_share&wx ...

  9. RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  10. 2020最精细的Java学习路线图

    在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...