一. Mapper代理开发概述

之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下

在这里插入图片描述
这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护

如果使用Mapper 代理方式(如下图)则不存在硬编码问题

在这里插入图片描述

  • 通过上面的描述可以看出 Mapper 代理方式的目的:
    • 解决原生方式中的硬编码
    • 简化后期执行SQL
  1. Mybatis 官网也是推荐使用Mapper代理的方式下图是截止官网的图片:
    在这里插入图片描述

二. 使用Mapper代理要求(重点中的重点)

使用Mapper代理方式,必须满足以下要求:

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

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  1. 设置SQL映射文件的namespace属性为Mapper接口全限定名
    在这里插入图片描述
  2. 在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致(查询语句多个则是List集合查询,单个那么就是user对象咯)
    在这里插入图片描述
  3. 注意注意!!!mybatis配置文件下的映射器路径需要改

在这里插入图片描述

  • 注意
    如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将核心配置文件的加载映射配置文件的配置修改为
    在这里插入图片描述
  1. 最终获取代理"Mapper"
    执行结果:
    在这里插入图片描述

代码:

package com.sgs;

import com.sgs.mapper.UserMapper;
import com.sgs.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
//        1. 加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


//        2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();




//        3. 执行sql,查询所有是"selectList()方法"  一个是...one
        //List<User> users = sqlSession.selectList("test.selectAll");

           //3.1 获取UserMapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();

        System.out.println(users);

//        4. 释放资源
        sqlSession.close();
    }
}

三. 实操的代码

在这里插入图片描述

main目录下的java目录中

1. UserMapper接口

路径:com\sgs\mapper\UserMapper.java

package com.sgs.mapper;

import com.sgs.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

2. User类

路径:com\sgs\pojo\User.java

package com.sgs.pojo;


// 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 + '\'' +
                '}';
    }
}

3. MybatisDemo类

路径:com\sgs\MybatisDemo.java

package com.sgs;

import com.sgs.mapper.UserMapper;
import com.sgs.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
//        1. 加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


//        2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();




//        3. 执行sql,查询所有是"selectList()方法"  一个是...one
        //List<User> users = sqlSession.selectList("test.selectAll");

           //3.1 获取UserMapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();

        System.out.println(users);

//        4. 释放资源
        sqlSession.close();
    }
}

main目录下的resources目录中

1. UserMapper.xml

路径:com\sgs\mapper\UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">


<!--名称空间-->
<mapper namespace="com.sgs.mapper.UserMapper">
    <select id="selectAll" resultType="com.sgs.pojo.User">
        select * from tb_user;
    </select>
</mapper>

2. logback.xml

路径:logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">


<!--名称空间-->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level]  %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="com.sgs" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>


    <!--

      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

3. mybatis.xml

路径:mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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://localhost:3306/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="o676448"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
<!--      映射器  -->
<!--        <mapper resource="com/sgs/mapper/UserMapper.xml"/>-->

<!--        包扫描的方式简化SQL映射文件的加载    此时是属于接口的包路径,并且注意分隔符的写法-->
        <package name="com.sgs.mapper"/>
    </mappers>


</configuration>
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐