MyBatis动态代理简介及示例说明
下文笔者讲述MyBatis动态代理的简介说明,如下所示
Mapper动态代理简介
Mapper动态代理机制 使我们只需编写数据交互的接口及方法定义 和对应的Mapper映射文件 然后具体的数据交互和数据绑定由Mybatis动态代理完成 我们日常开发中,如何使Mybatis支持动态代理 Mapper实现代理动态代理非常简单,只需遵守一定的规范即可 如: 创建一个interface接口 接口名称保持与某个mapper.xml配置文件相同 接口中方法定义的方法和方法参数 以及方法返回类型 需和mapper.xml配置文件中的SQL映射的id及输入/输出映射类型相同 而mapper的namespace指定interface接口路径 然后就可以使用SqlSession类获取Mapper代理(即一个interface接口类型的对象)来执行SQL映射配置
Mapper动态代理实例
编写一个使用Mapper动态代理操作用户信息的实例。 实例MyBatis驼峰命名规则 在MyBatis的全局配置文件SqlMapConfig.xml(mybatis-config.xml)中 开启驼峰命名规则 <!-- 开启自动驼峰命名规则(camel case)映射 --> <setting name="mapUnderscoreToCamelCase" value="true"/> 1.数据库中创建用户信息表(tb_user) 并添加数据 -- 创建“用户信息”数据表 CREATE TABLE IF NOT EXISTS tb_user ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号', user_name VARCHAR(50) NOT NULL COMMENT '用户姓名', blog_url VARCHAR(50) NOT NULL COMMENT '博客地址', remark VARCHAR(50) COMMENT '备注' ) COMMENT = '用户信息表'; -- 添加数据 INSERT INTO tb_user(user_name,blog_url,remark) VALUES('的博客','https://www.java265.com/','我是java265.com'); 2.创建用户信息持久化类User.java package com.java265.mybatis.po; /** * 用户信息的持久化类 * **/ public class User { private int Id; //用户ID private String userName; //用户姓名 private String blogUrl; //博客地址 private String remark; //备注 /**省略 get set **/ } 3.创建SQL配置文件UserMapper.xml 其中namespace中的路径为 即将创建的mapper代理接口的路径 <?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="com.java265.mybatis.mapper.UserMapper"> <!-- 查询用户 --> <select id="queryUserById" parameterType="int" resultType="com.java265.mybatis.po.User"> SELECT * FROM tb_user WHERE id = #{id} </select> <!-- 新增用户 --> <insert id="insertUser" parameterType="com.java265.mybatis.po.User"> INSERT INTO tb_user(user_name,blog_url,remark) VALUES(#{userName},#{blogUrl},#{remark}) </insert> <!-- 修改用户 --> <update id="updateUser" parameterType="com.java265.mybatis.po.User"> UPDATE tb_user SET user_name = #{userName} ,blog_url=#{blogUrl} ,remark=#{remark} WHERE id = #{id} </update> <!-- 删除用户 --> <delete id="deleteUser" parameterType="java.lang.Integer"> DELETE FROM tb_user WHERE id = #{id} </delete> </mapper> 4.在MyBatis的全局配置文件SqlMapConfig.xml(mybatis-config.xml)中 mappers标签中配置上述的mapper映射文件。 <!-- 加载映射文件 --> <mappers> <!-- 其他的Mapper映射文件... --> <!-- 用户信息Mapper映射配置文件 --> <mapper resource="com/pjb/mybatis/sqlmap/UserMapper.xml"/> </mappers> 5.编写Mapper代理接口 package com.java265.mybatis.mapper; import com.java265.mybatis.po.User; /** * 用户信息Mapper动态代理接口 * **/ public interface UserMapper { //查询用户 public User queryUserById(int id) throws Exception; //新增用户 public int insertUser(User user) throws Exception; //修改用户 public int updateUser(User user) throws Exception; //删除用户 public int deleteUser(int id) throws Exception; } 6.运行查询用户方法 /** * 查询用户 * */ @Test public void queryUserById() throws Exception { DataConnection dataConnection = new DataConnection(); SqlSession sqlSession = dataConnection.getSqlSession(); //获取Mapper代理 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //执行Mapper代理对象的查询方法 User user = userMapper.queryUserById(1); if(user!=null) { System.out.println("用户编号:" + user.getId()); System.out.println("用户姓名:" + user.getUserName()); System.out.println("博客地址:" + user.getBlogUrl()); System.out.println("备注信息:" + user.getRemark()); } sqlSession.close(); } 7.执行新增用户方法 /** * 新增用户 * */ @Test public void insertUser() throws Exception { DataConnection dataConnection = new DataConnection(); SqlSession sqlSession = dataConnection.getSqlSession(); //获取Mapper代理 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //新增用户对象 User user = new User(); user.setUserName("的博客"); user.setBlogUrl("https://blog.csdn.net/"); user.setRemark("您好,欢迎访问 的博客"); //执行Mapper代理对象的新增方法 int count = userMapper.insertUser(user); sqlSession.commit(); System.out.println("执行结果:"+count); sqlSession.close(); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。