MyBatis的Mapper代理笔记
MaBatis--Mapper代理
目前使用
SqlSession进行增删改查的缺点:
- 没有办法实现多参传值
- 书写的时候没有接口,后期的维护低
使用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代理笔记的更多相关文章
- Mybatis非mapper代理配置
转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- Mybatis的mapper代理开发方法
一.开发规范 1.映射文件中的namespase等于mapper接口类路径 2.statement的id与mapper中的方法名一致 3.让mapper的接口方法输入参数类型与statement中的p ...
- Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)
整体目录结构: 其中包下全部是采用mybatis自动生成工具生成. mybatis自动生成文件 <?xml version="1.0" encoding="UTF- ...
- mybatis——使用mapper代理开发方式
---------------------------------------------------------------generatorConfig.xml------------------ ...
- mybatis入门-mapper代理原理
原始dao层开发 在我们用mybatis开发了第一个小程序后,相信大家对于dao层的开发其实已经有了一个大概的思路了.其他的配置不用变,将原来的test方法,该为dao的方法,将原来的返回值,直接在d ...
- Mybatis的mapper代理开发dao方法
看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...
- springboot集成下,mybatis的mapper代理对象究竟是如何生成的
前言 开心一刻 中韩两学生辩论. 中:端午节是属于谁的? 韩:韩国人! 中:汉字是谁发明的? 韩:韩国人! 中:中医是属于谁的? 韩:韩国人! 中:那中国人到底发明过什么? 韩:韩国人! 前情回顾 M ...
- mybatis入门--mapper代理方式开发
不使用代理开发 之前,我们说了如何搭建mybatis框架以及我们使用mybatis进行简单的增删改查.现在,我们一起来构建一个dao层的完整代码.并用@test来模拟service层对dao层进行一下 ...
- mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例
public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private ...
随机推荐
- HDFS中NameNode工作机制
引言 NameNode: 存储元数据 管理整个HDFS集群 DataNode: 存储数据的block SecondaryNameNode: 辅助HDFS完成一些事情 NameNode和Secondar ...
- JavaScript学习04(标准对象)
标准对象 在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用 typeof 操作符获取对象的类型,它总是返回一个字符串: typeof 12 ...
- Sqli-Labs less38-45
less-38 前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html 实际上就是多条sql语句一起使用. 在38关源码中加入输出 ...
- Are You OK?主键、聚集索引、辅助索引
每张表都一定存在主键吗? 关于这个问题,各位小伙伴们不妨先自己想一想,再往下寻找答案. 首先公布结论:对于 InnoDB 存储引擎来说,每张表都一定有个主键(Primary Key)! 让人非常遗憾的 ...
- arthas-Java诊断工具
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 官网:https://arthas.aliyun.com/zh-cn/ 当你遇到以下类似问题而束手无策时,Arthas可以帮助你 ...
- C#硬件访问(摄像头、麦克风)
#需要引用:AForge类库.Microsoft.DirectX using System;using System.Windows.Forms;namespace CameraTest{ publi ...
- Linux初探之如何查看帮助文档自学命令
linux命令种类繁多,参数各异,要每个都记住除非是过目不忘的神人,否则你只能记住常用的那几个,等到 要用时还是得靠--help,man,info这些命令去读文档,可是这些文档看起来也不那么直观,所以 ...
- Mysql慢查询explain
转自:https://www.toutiao.com/i6776461352522220036/?tt_from=weixin&utm_campaign=client_share&wx ...
- RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列
系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...
- 2020最精细的Java学习路线图
在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...