②【MyBatis】 Mapper代理方式开发( 常用 )

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述


  • 使用Mapper代理的目的
    • 解决原生方式中的硬编码
    • 简化 后期SQL语句的执行
  • Mapper代理方式的优势
    • 代码不仅更清晰,类型更加安全,还不用担心可能出错的字符串字面值以及强制类型转换。



⚪使用Mapper代理方式开发

步骤

  1. 定义Mapper接口(与SQL映射文件同名),并将Mapper接口与SQL映射文件放置在同一目录下;
  2. 将SQL映射文件的namespace属性设置为Mapper接口全限定名(如"com.java.mapper.UserMapper");
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持方法返回值类型与SQL映射文件一致;
  4. 编码(Coding):使用SqlSession对象getMapper方法获取Mapper接口代理对象,并调用对应方法完成SQL的执行;

在这里插入图片描述



1. Mapper接口与SQL映射文件

资源包下创建一个目录,存放SQL映射文件

注意,创建时使用"\“,不能使用”." !!!

在这里插入图片描述

在这里插入图片描述

SQL映射文件位置改动后,需要在MyBatis核心配置文件中重新配置SQL映射文件位置哦!"com/java/mapper/UserMapper.xml

若Mapper接口名称与SQL配置文件名称一致且在同一目录下,可以简化MyBatis配置文件中配置映射文件的操作。

在这里插入图片描述


设置同名接口,目录名称保持一致

虽然现在接口与映射文件仅目录同名而位置不同,但在编译后会因为目录同名的关系被放置在同一位置;

在这里插入图片描述



2. 设置映射文件namespace属性

将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">

<!--配置namespace命名空间,id,返回值类型-->
<mapper namespace="com.java.mapper.UserMapper">
    <select id="selectAll" resultType="com.java.pojo.User">
        select * from tb_user;
    </select>
</mapper>



3. 定义接口方法,方法名、返回值类型与映射文件id、resultType保持一致

public interface UserMapper {
    //方法名、返回值类型与映射文件id、resultType保持一致
    public List<User> selectAll();
}



4. 通过SqlSession对象getMapper方法获取代理对象并执行SQL

测试

public class mybatisDemo {
    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语句
//        //传入Mapper映射文件中SQL语句的 "命名空间+id"
//        List<User> users = sqlSession.selectList("test.selectAll");
//
//        System.out.println(users);
//
//        //释放资源
//        sqlSession.close();

        //2. Mapper代理方式,简洁、安全、避免硬编码
        //try()中创建资源,无需手动释放
        try(SqlSession sqlSession = sqlSessionFactory.openSession()){
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.selectAll();
            System.out.println(users);
        }
    }
}

输出结果

[User{id=1, username=‘张三’, password=‘123’, gender=‘男’, addr=‘北京’}, User{id=2, username=‘李四’, password=‘456’, gender=‘男’, addr=‘上海’}, User{id=3, username=‘王麻子’, password=‘789’, gender=‘女’, addr=‘广州’}]





在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.29.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值