MyBatis关于Mapper代理开发

Mapper代理开发

  • 目的:

  • 解决原生方式中的硬编码

  • 简化后期执行SQL

Mapper代理开发的步骤

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

  3. 在Mapper接口中定义方法,方法名就是SQL映射文件sql语句的id,并保持参数类型和返回值类型一致

  4. 编码

    1. 通过 SqlSession的getMapper方法获取 Mapper接口的代理对象

    2. 调用对应方法完成sql的执行

细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。

获取SqlSession,获取mapper接口,接口下面有个同名映射文件,通过.selectAll()方法调用,找到文件对应的id获取对应的sql语句。返回值是list。

Mapper代理开发(出现问题请看MyBatis第一个项目)

  1. 在src中com.uestc.mapper下面创建一个UserMapper接口

复制代码
package com.uestc.mapper;
​
import com.uestc.pojo.User;
​
import java.util.List;
​
public interface UserMapper {
​
    List<User> selectAll();
}
复制代码

 

  1. 在src的resources下面创建一个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"><!--
    namespace:名称空间
 -->
<mapper namespace="com.uestc.mapper.UserMapper">
    <select id="selectAll" resultType="com.uestc.pojo.User">
        select *
        from tb_user;
    </select></mapper>
复制代码

 

  1. 在com.ustc.pojo下面创建一个User类

复制代码
//alt + 鼠标左键 整列编辑
public class User {
​
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;
​
    public Integer getId() {
        return id;
    }
​
    public void setId(Integer id) {
        this.id = id;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
​
    public String getGender() {
        return gender;
    }
​
    public void setGender(String gender) {
        this.gender = gender;
    }
​
    public String getAddr() {
        return addr;
    }
​
    public void setAddr(String addr) {
        this.addr = addr;
    }
​
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}
复制代码

 

  1. 在mybatis-config.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库连接信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 加载sql映射文件 -->
<!--        <mapper resource="com/uestc/mapper/UserMapper.xml"/>--><!-- Mapper代理方式 -->
        <package name="com.uestc.mapper"/></mappers>
</configuration>
复制代码

 

  1. 在com.uestc下面创建一个测试类MyBatisDemo2

复制代码
/**
 * MyBatis 代理开发
 */
public class MyBatisDemo2 {
​
    public static void main(String[] args) throws IOException {
        //1. 加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
​
​
        //2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
​
        //3. 执行sql
        //List<User> users = sqlSession.selectList("test.selectAll");
        //3.1 获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();
​
        System.out.println(users);
​
        //4. 释放资源
        sqlSession.close();
​
​
    }
}
复制代码

 

posted @   Resign~as  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示