一、引言

前篇的文章中没有使用mapper代理的方式,调用方法比较麻烦,造成很多代码重复,所以mybatis在输入输出映射的基础上又添加了mapper代理的配置方式方便使用。

先上张图,这张图是说明mybatis发展的进程,本文使用了描红的方法,并没有和spring整合==

二、代码

代码结构如下:

1.配置文件:

SqlMapConfig.xml

这里使用了mapper包自动搜索(此时mapper的java类与xml必须名字相同,在同一个文件夹),别名自动定义==

推荐这么使用,虽然要求多

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--加载属性文件 --><properties resource="db.properties"></properties><!--别名 --><typeAliases><package name="cn.xcy.mybatis.po"></package></typeAliases><!-- 对事务的管理和连接池的配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!--加载映射文件  --><mappers><package name="cn.xcy.mybatis.mapper"/></mappers>
</configuration>

log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1/mybatis
jdbc.username=root
jdbc.password=123

2.mapper中文件:

这两个文件要在同一个文件夹(mapper搜索文件夹),同时命名必须一致==

UserMapper.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">
<mapper namespace="cn.xcy.mybatis.mapper.UserMapper"><resultMap type="user" id="userResultMap"><id column="_id" property="id" /><result column="_name" property="name" /><result column="_age" property="age" /></resultMap><select id="findUserByID" parameterType="int" resultType="user">select* from T_USER where id= #{id}</select><select id="findUsers" resultType="user">select * from T_USER</select><select id="findUsersByName" parameterType="string" resultType="user">select * from T_USER where name like '%${value}%'</select><select id="findUserList" parameterType="uservo" resultType="usercustom">select * from T_USER where id=#{userCustom.id} and name like'%${userCustom.name}%'</select><select id="findUserByIDResultmap" parameterType="int"resultMap="userResultMap">select id _id,name _name,age _agefrom T_USER where id= #{id}</select>
</mapper>

UserMapper.java

package cn.xcy.mybatis.mapper;import java.util.List;import cn.xcy.mybatis.po.User;
import cn.xcy.mybatis.po.UserCustom;
import cn.xcy.mybatis.po.UserVo;public interface UserMapper {public User findUserByID(int id) throws Exception;public List<User> findUsers() throws Exception;public List<User> findUsersByName(String name) throws Exception;public List<UserCustom> findUserList(UserVo userVo) throws Exception;public User findUserByIDResultmap(int id) throws Exception;}

3.po文件:

User.java

package cn.xcy.mybatis.po;public class User {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";}}

UserCustom.java

package cn.xcy.mybatis.po;public class UserCustom extends User {}

UserVo.java

package cn.xcy.mybatis.po;public class UserVo {private UserCustom userCustom;public UserCustom getUserCustom() {return userCustom;}public void setUserCustom(UserCustom userCustom) {this.userCustom = userCustom;}}

4.测试:

     String resource="SqlMapConfig.xml";InputStream inputStream= Resources.getResourceAsStream(resource);//创建sessionfactorySqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession =sqlSessionFactory.openSession();UserMapper userMapper=sqlSession.getMapper(UserMapper.class);User user=userMapper.findUserByID(2);List<User> users=userMapper.findUsers();List<User> listUsers=userMapper.findUsersByName("谢");UserVo userVo=new UserVo();UserCustom userCustom=new UserCustom();userCustom.setId(1);userCustom.setAge(26);userVo.setUserCustom(userCustom);List<UserCustom> listUsers2=userMapper.findUserList(userVo);User user1=userMapper.findUserByIDResultmap(3);sqlSession.close();System.out.println(user);

三、总结

  • mapper代理方法的提出
  • mapper代理方法的实现

JavaWeb——Mybatis进阶mapper代理相关推荐

  1. Mybatis非mapper代理配置

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

  2. Mybatis的mapper代理开发方法

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

  3. Mybatis的Mapper代理

    Mybatis通过jdk所提供的代理方案根据给出的mapper接口以及mapper的xml来实现mapper的代理实现. 当Mybatis正在解析xml配置文件的时候,在解析mapper节点的时候会调 ...

  4. 你有没有想过,在SpringBoot集成下,Mybatis的mapper代理对象究竟是如何生成的?...

    作者:青石路 cnblogs.com/youzhibing/p/10486307.html 前情回顾 之前我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建S ...

  5. Mybatis之Mapper代理开发方式

    Mapper代理开发规范 使用过程中我们要遵守下面规则: 1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下. 在resource目录下创建文件夹 c ...

  6. MyBatis中Mapper代理方式

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

  7. MyBatis的Mapper 代理的增删改查操作(三)

    沉迷于黑与白世界中的人,无论怎么挣扎,都逃不过被同化的命运.前世看见了什么,那么今世便是什么. 上一章简单介绍了MyBatis的命名空间方式的增删改查操作(二),如果没有看过,请观看上一章. 一. M ...

  8. 4、MyBatis + Log4j日志查看Sql参数、结果集元数据、Mapper代理开发、JDK的动态代理与CGLib代理

    文章目录 MyBatis优化开发 日志 ResultSet如何转换为Java对象 数据库元数据 结果集元数据 Fastjson 基于MyBatis的DAO开发(传统) 推荐mapper代理开发 JDK ...

  9. mybatis源码解析 - mapper代理对象的生成

    1.简单示例 先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图: 完整代码地址:kingoe/boot-study:mapper层和我们平时说的dao ...

最新文章

  1. 递归与非递归转换(栈知识应用)
  2. 类加载机制-双亲委派,破坏双亲委派--这一篇全了解
  3. 【智能驾驶】车道线检测中的新IPM(逆透视变换)算法实验效果
  4. 全面解析Java的垃圾回收机制
  5. 如何做好一条0~2岁的产品狗
  6. python接口自动化接口依赖_Python接口自动化之mock模块简单使用
  7. 百度地图描绘轨迹html,百度地图API 绘制轨迹历史
  8. mysql share mode_mysql锁:mysql lock in share mode 和 select for update
  9. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
  10. B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
  11. 爬虫-相关库知识整理(更新)
  12. 明略数据获 10 亿人民币 C 轮融资,华兴新经济基金、腾讯领投
  13. matlab计算系统过渡过程时间,MATLAB在电机拖动拖动系统过渡过程分析中的应用
  14. java 生成素数_java – 素数生成器逻辑
  15. 在Thinkphp中使用AJAX实现无刷新分页
  16. 服务器上安装python anaconda最简明教程
  17. 1.4.1用空间向量研究直线、平面的位置关系教学设计
  18. java 预览word文档_Java版office文档在线预览
  19. git error Missing tree 解决办法
  20. 分享史上Java最牛逼,最简短的代码

热门文章

  1. Unity Physics.Raycast踩坑
  2. linux执行命令带时间戳,Linux查看History记录加时间戳的小技巧
  3. MongoDB集群安装与配置2.4.3版本
  4. apache 日志参数
  5. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
  6. ANT自动化压缩合并JS/CSS和更改版本号
  7. lintcode :Count and Say 报数
  8. 三维点云学习(5)4-实现Deeplearning-PointNet-1-数据集的批量读取
  9. SAE学习-使用SAE的Storage服务存储图片
  10. 三维点云学习(1)下-点云体素降采样