Mybatis中Mapper动态代理方式
文章目录
- 开发规范
- Mapper接口开发需要遵循以下规范
- Mapper.xml(映射文件)
- UserMapper(接口文件)
- 加载UserMapper.xml文件
- 总结
- selectOne和selectList:
- namespace:
开发规范
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mapper.xml(映射文件)
UserMapper.xml配置文件内容:最好把xml都放在config目录下
<?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:命名空间,用于隔离sql -->
<!-- 还有一个很重要的作用,使用动态代理开发DAO,1. namespace必须和Mapper接口类路径一致 -->
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper"><!-- 根据用户id查询用户 --><!-- 2. id必须和Mapper接口方法名一致 --><!-- 3. parameterType必须和接口方法参数类型一致 --><!-- 4. resultType必须和接口方法返回值类型一致 --><select id="queryUserById" parameterType="int"resultType="cn.itcast.mybatis.pojo.User">select * from user where id = #{id}</select><!-- 根据用户名查询用户 --><select id="queryUserByUsername" parameterType="string"resultType="cn.itcast.mybatis.pojo.User">select * from user where username like '%${value}%'</select><!-- 保存用户 --><insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User"><selectKey keyProperty="id" keyColumn="id" order="AFTER"resultType="int">select last_insert_id()</selectKey>insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});</insert></mapper>
UserMapper(接口文件)
public interface UserMapper {/*** 根据id查询* * @param id* @return*/User queryUserById(int id);/*** 根据用户名查询用户* * @param username* @return*/List<User> queryUserByUsername(String username);/*** 保存用户* * @param user*/void saveUser(User user);
}
加载UserMapper.xml文件
修改SqlMapConfig.xml文件,添加以下所示的内容:
<!-- 加载映射文件 --><mappers><mapper resource="sqlmap/User.xml" /><mapper resource="mapper/UserMapper.xml" /></mappers>
编写的测试方法如下:
public class UserMapperTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void init() throws Exception {// 创建SqlSessionFactoryBuilderSqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 加载SqlMapConfig.xml配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 创建SqlsessionFactorythis.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);}@Testpublic void testQueryUserById() {// 获取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 从sqlSession中获取Mapper接口的代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 执行查询方法User user = userMapper.queryUserById(1);System.out.println(user);// 和spring整合后由spring管理sqlSession.close();}@Testpublic void testQueryUserByUsername() {// 获取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 从sqlSession中获取Mapper接口的代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 执行查询方法List<User> list = userMapper.queryUserByUsername("张");for (User user : list) {System.out.println(user);}// 和spring整合后由spring管理sqlSession.close();}@Testpublic void testSaveUser() {// 获取sqlSession,和spring整合后由spring管理SqlSession sqlSession = this.sqlSessionFactory.openSession();// 从sqlSession中获取Mapper接口的代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 创建保存对象User user = new User();user.setUsername("刘备");user.setBirthday(new Date());user.setSex("1");user.setAddress("蜀国");// 执行查询方法userMapper.saveUser(user);System.out.println(user);// 和spring整合后由spring管理sqlSession.commit();sqlSession.close();}
}
总结
selectOne和selectList:
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。
namespace:
mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。
Mybatis中Mapper动态代理方式相关推荐
- 【Java】Mybatis mapper动态代理方式
前言 我们在使用Mybatis的时候,获取需要执行的SQL语句的时候,都是通过调用xml文件来获取,例如:User user = (User) sqlSession.selectOne("c ...
- MyBatis之Mapper动态代理开发
MyBatis之Mapper动态代理开发 2017/9/30 1.SqlSession的使用范围 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder ...
- Mybatis Mapper动态代理方式 typeAliases 别名的使用
目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...
- MyBatis DAO层开发——Mapper动态代理方式
SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
- 【Mybatis学习笔记】Mapper动态代理四项原则和注意事项
如果使用原始的DAO,要自己对其进行实现,而如果使用Mybatis的Mapper动态代理,就可以让Mybatis自动帮你实现DAO接口. Mapper动态代理的四项原则 1.接口方法名需要与Mappe ...
- 原始dao和Mapper动态代理的开放方式---Mybatis学习笔记(六)
1.原始Dao开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 1.映射文件:(user.xml) <?xml version="1.0" encodin ...
- MyBatis中Mapper代理方式
Mapper 的动态代理作用 目前使用sqlsession进行增删改查的缺点: [1]没有办法实现多参数的传递 [2]书写的时候没有接口,后期的维护就比较的低 解决的方案: Mapper的代理方式实现 ...
- Mybatis DAO开发--Mapper动态代理开发方式
Mybatis DAO开发–Mapper动态代理开发方式 第一步:jar包 创建lib目录,引入相应的jar包,本节课用到的案例引入的jar包就是spring整合mybatis要用到的全部jar包. ...
- Spring 整合Mybatis Mapper动态代理方法
先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...
最新文章
- 机器视觉------- SciSmart图像定位-ROI校正算法
- java流程控制图_Java流程控制
- 标准化工作取得新突破 窄带物联网商用指日可待
- 处理数字_4_计算某列的总和
- C# 调Win32 API SendMessage简单用法及wMsg常量
- gg oracle tjs 同步_配置Goldengate从Oracle到PostgreSQL的同步复制
- git checkout之一 HEAD基本和detached 状态
- 三电平igbt死区时间计算_IGBT基础与运用-2
- java 6 linux_CentOS 6.5 安装java
- Node——设置响应报文头实现下载
- 操作技巧——保障无线上网的技巧
- 【优化算法】搜索引擎优化算法(BES)【含Matlab源码 1426期】
- 五大地形等高线特征_【新微专题】从等高线地形图的实际应用分析如何培养图表判读能力?...
- 超越宝典汽配汽修管理系统——“维修业务”模块功能实现
- Java中Object转化为int类型
- 二维码扫描登录,你必须知道的 3 件事!
- 高盛报告:未来5-10年区块链将被广泛应用【附下载】
- 如何稳定的连接steam服务器,科技教程:怎么解决与Steam服务器连接时出现的问题...
- Hadoop文件基础操作命令
- 2022-2028全球ERV空气交换器行业调研及趋势分析报告
热门文章
- python txt转json_实战篇 | 用Python来找你喜欢的妹子(二)
- stream去重_使用Java Stream API中DistinctBy删除重复数据
- python类的使用_python类的使用
- layui 传递前端请求_layui弹出层如何传值?
- zabbix内网安装部署_zabbix2.4.8升级3.0.31操作部署记录
- 【LeetCode笔记】6. Z字形变化(JAVA、思路)
- 中兴没有云服务器_中国移动携手中兴通讯推进5G网络云建设
- java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别
- 华为云域名注册_华为云域名专场钜惠,助推中小企业云速建站
- leetcode 75 --- sort-colors