02.MyBatis在DAO层开发使用的Mapper动态代理方式
在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis
Mybatis鼓励使用Mapper动态代理的方式
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体等于Dao接口实现类方法。
1.编写Mapper.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接口类路径一致 --> <mapper namespace="cn.mybatis.mapper.UserMapper"> <!-- 通过ID查询一个结果 --> <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User"> select * from user where id = #{id} </select> <!-- 通过用户名模糊查询 --> <select id="findUserByUsername" parameterType="String" resultType="cn.itcast.mybatis.po.User"> select * from user where username like "%"#{username}"%" </select> <!-- 添加用户 --> <insert id="insert" parameterType="cn.itcast.mybatis.po.User"> insert into user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address}) </insert> </mapper>
2.编写Mapper.java接口文件
public interface UserMapper { /** * 通过ID查询一个结果 * @param id * @return */ public User findUserById(int id); /** * 通过用户名模糊查询 * @param username * @return */ public List<User> findUserByUsername(String username); /** * 添加用户 * @param user */ public void insert(User user); }
3.Mapper接口开发必须遵循的规范
- 1.Mapper.xml文件中的【namespace】必须与Mapper.java接口【类路径】相同
- 2.Mapper.java接口中的【方法名】必须与Mapper.xml中对应的【id】相同
- 3.Mapper.java接口中的【入参】必须与Mapper.xml中对应的【parameter】相同
- 4.Mapper.java接口中的【返回类型】必须与Mapper.xml中对应的【resultType】相同
4.在SqlMapConfig.xml中加载Mapper.xml映射文件
5.测试
public class UserServiceImpl { private SqlSessionFactory sqlSessionFactory; /** * 初始化工厂 * * @throws Exception */ @Before public void init() throws Exception { InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } /** * 通过ID查询一个结果 */ @Test public void m01() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 执行查询 User user = userMapper.findUserById(10); System.out.println(user); // 和Spring整理后由Spring管理 sqlSession.close(); } /** * 通过用户名模糊查询 */ @Test public void m02() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 执行查询 List<User> list = userMapper.findUserByUsername("王五"); for (User user : list) { System.out.println(user); } // 和Spring整理后由Spring管理 sqlSession.close(); } /** * 添加用户 */ @Test public void m03() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 执行查询 User user = new User(); user.setUsername("添加User"); user.setSex("男"); user.setBirthday(new Date()); user.setAddress("未知区域"); userMapper.insert(user); // 和Spring整理后由Spring管理 sqlSession.commit(); sqlSession.close(); } }
02.MyBatis在DAO层开发使用的Mapper动态代理方式的更多相关文章
- MyBatis开发Dao层的两种方式(Mapper动态代理方式)
MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...
- 基于Mybatis的Dao层开发
转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...
- Mybatis框架基础入门(三)--Mapper动态代理方式开发
使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...
- Mybatis入门——基础方式的增删该查、mapper动态代理方式的CRUD、类型转换器
一.基础方式的增删该查: 1.mybatis约定:输入参数parameterType和输出参数resulrType在形式上只能有一个. 2.如果输入/输出参数:是简单类型(8个基本类型加String) ...
- mybatis开发Dao的Mapper动态代理方式
1. 开发规范Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体跟Dao原始方法中接口实现类的方法相 ...
- Mybatis之旅第二篇-Mapper动态代理方式
一.引言 通过上一篇mybatis的入门学习,我们已经会使用mybatis实现简单的增删改查,但是我们也发现了用原始Dao开发的一些问题: Dao方法体存在重复代码:通过SqlSessionFacto ...
- Mybatis Mapper动态代理方式 typeAliases 别名的使用
目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
随机推荐
- NX二次开发-UFUN工程图表格注释获取某一行的tag函数UF_TABNOT_ask_nth_row
NX9+VS2012 #include <uf.h> #include <uf_tabnot.h> #include <NXOpen/Part.hxx> #incl ...
- golang的select典型用法
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作. 示例: ch1 := make (chan in ...
- word2vec中关于霍夫曼树的
再谈word2vec 标签: word2vec自然语言处理NLP深度学习语言模型 2014-05-28 17:17 16937人阅读 评论(7) 收藏 举报 分类: Felven在职场(86) ...
- webstorm快捷键、支持vue文件等部分使用技巧
转载:https://www.cnblogs.com/seven077/p/9771474.html 1.常用快捷键 shift+↑ 向上选取代码块shift+↓ 向下选取代码块ctrl+/ 注释/取 ...
- Mac Eclipse常用快捷键
Option + Command + X: 运行 Command + O:显示大纲 Command + 1:快速修复 Command + D:删除当前行 Command + Option + ↓:复制 ...
- tushare使用教程:初始化调用PRO版数据示例
下面介绍两种常用的数据调取方式: 通过tushare python包 使用http协议直接获取 注:pro版数据接口采用语言无关的http协议实现,但也提供了多种语言的SDK数据获取. 前提条件 1. ...
- 2018湘潭大学程序设计竞赛【C】
题目链接:https://www.nowcoder.com/acm/contest/105/C 题意:给你几个矩形的左上角和右下角的坐标,让你算有几个矩形相交. 题解: 每次都暴力标记一下炸弹区域里的 ...
- selenium基础-跳过验证码
selenium基础-跳过验证码 一.方法 设置万能验证码或者屏蔽验证码(最常用的方法) 使用验证码识别工具识别验证码 通过selenium操作cookies 直接使用配置文件的webdriver 二 ...
- qt5下面中文显示异常
在源文件中插入# pragma execution_character_set("utf-8")即可
- startup_stm32f10x_xx.s 启动代码文件选择
引用http://blog.csdn.net/gasbi/article/details/7545568 整体感觉stm32给的库文件太琐碎了,正如它的芯片型号一样繁多,例如启动文件: 网上查到的各个 ...