MyBatis动态代理简介及示例说明

戚薇 MyBatis 发布时间:2023-05-03 21:16:11 阅读数:4862 1
下文笔者讲述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();
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202305/6334.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者