文章目录

  • 开发规范
    • 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动态代理方式相关推荐

  1. 【Java】Mybatis mapper动态代理方式

    前言 我们在使用Mybatis的时候,获取需要执行的SQL语句的时候,都是通过调用xml文件来获取,例如:User user = (User) sqlSession.selectOne("c ...

  2. MyBatis之Mapper动态代理开发

    MyBatis之Mapper动态代理开发 2017/9/30 1.SqlSession的使用范围 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder ...

  3. Mybatis Mapper动态代理方式 typeAliases 别名的使用

    目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...

  4. MyBatis DAO层开发——Mapper动态代理方式

    SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...

  5. 【Mybatis学习笔记】Mapper动态代理四项原则和注意事项

    如果使用原始的DAO,要自己对其进行实现,而如果使用Mybatis的Mapper动态代理,就可以让Mybatis自动帮你实现DAO接口. Mapper动态代理的四项原则 1.接口方法名需要与Mappe ...

  6. 原始dao和Mapper动态代理的开放方式---Mybatis学习笔记(六)

    1.原始Dao开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 1.映射文件:(user.xml) <?xml version="1.0" encodin ...

  7. MyBatis中Mapper代理方式

    Mapper 的动态代理作用 目前使用sqlsession进行增删改查的缺点: [1]没有办法实现多参数的传递 [2]书写的时候没有接口,后期的维护就比较的低 解决的方案: Mapper的代理方式实现 ...

  8. Mybatis DAO开发--Mapper动态代理开发方式

    Mybatis DAO开发–Mapper动态代理开发方式 第一步:jar包 创建lib目录,引入相应的jar包,本节课用到的案例引入的jar包就是spring整合mybatis要用到的全部jar包. ...

  9. Spring 整合Mybatis Mapper动态代理方法

    先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...

最新文章

  1. 机器视觉------- SciSmart图像定位-ROI校正算法
  2. java流程控制图_Java流程控制
  3. 标准化工作取得新突破 窄带物联网商用指日可待
  4. 处理数字_4_计算某列的总和
  5. C# 调Win32 API SendMessage简单用法及wMsg常量
  6. gg oracle tjs 同步_配置Goldengate从Oracle到PostgreSQL的同步复制
  7. git checkout之一 HEAD基本和detached 状态
  8. 三电平igbt死区时间计算_IGBT基础与运用-2
  9. java 6 linux_CentOS 6.5 安装java
  10. Node——设置响应报文头实现下载
  11. 操作技巧——保障无线上网的技巧
  12. 【优化算法】搜索引擎优化算法(BES)【含Matlab源码 1426期】
  13. 五大地形等高线特征_【新微专题】从等高线地形图的实际应用分析如何培养图表判读能力?...
  14. 超越宝典汽配汽修管理系统——“维修业务”模块功能实现
  15. Java中Object转化为int类型
  16. 二维码扫描登录,你必须知道的 3 件事!
  17. 高盛报告:未来5-10年区块链将被广泛应用【附下载】
  18. 如何稳定的连接steam服务器,科技教程:怎么解决与Steam服务器连接时出现的问题...
  19. Hadoop文件基础操作命令
  20. 2022-2028全球ERV空气交换器行业调研及趋势分析报告

热门文章

  1. python txt转json_实战篇 | 用Python来找你喜欢的妹子(二)
  2. stream去重_使用Java Stream API中DistinctBy删除重复数据
  3. python类的使用_python类的使用
  4. layui 传递前端请求_layui弹出层如何传值?
  5. zabbix内网安装部署_zabbix2.4.8升级3.0.31操作部署记录
  6. 【LeetCode笔记】6. Z字形变化(JAVA、思路)
  7. 中兴没有云服务器_中国移动携手中兴通讯推进5G网络云建设
  8. java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别
  9. 华为云域名注册_华为云域名专场钜惠,助推中小企业云速建站
  10. leetcode 75 --- sort-colors