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();
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


