首页 > 其他分享 >②【MyBatis】 Mapper代理方式开发( 常用 )

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

时间:2024-03-13 15:29:44浏览次数:27  
标签:Mapper 映射 文件 代理 接口 SQL MyBatis id

在这里插入图片描述

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

在这里插入图片描述

②【MyBatis】 Mapper代理方式


  • 使用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=‘广州’}]





在这里插入图片描述

标签:Mapper,映射,文件,代理,接口,SQL,MyBatis,id
From: https://blog.csdn.net/ebb29bbe/article/details/136680966

相关文章

  • Spring核心思想之 AOP:如何影响DI并引入三级缓存解决DI中涉及代理的问题
    Spring中AOP的实现与在Spring核心思想之AOP:在自定义容器基础上实现AOP功能中实现的自定义AOP一样,采用后置处理器方式。在Spring的核心思想之DI:详解SpringDI循环依赖实现机制文中末尾提到了一个问题,为什么是三级缓存而不是二级。下面示例AOP是如何影响DI的?......
  • springboot的代理模式示例----面向切面编程
    1.定义切面类 2.编写切面类importcom.alibaba.fastjson.JSON;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.xlkh.bigscreen.common.utils.RedisDeviceUtil;importcom.xlkh.bigscreen.service.bigscreen.BigscreenRedisService;importcom.xlkh.bigs......
  • MyBatisPlus代码生成器(新)
    MyBatisPlus代码生成器(新)注意:适用版本:mybatis-plus-generator3.5.1以上版本参考:官网本次配置:JDK17+SpringBoot3.1.5+MyBatisPlus3.5.3.1注意:mybatis-plus-generator版本需与mybatis-plus版本一致最新依赖参考:https://mvnrepository.com/artifact/com.baomid......
  • Python爬取免费IP代理时,无法解析到数据
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【ZXS】问了一个Python网络爬虫实战问题。问题如下:我这里遇到一个问题:【爬取免费IP代理时,无法解析到数据】,我通过xpath,css定位到了元素,但是在运行时返回空列表,请问我该怎么解决呀以下是解析数据的截图:他自......
  • MyBatis动态SQL写法
    一、MyBatis动态sql是什么动态SQL是MyBatis的强大特性之一。在JDBC或其它类似的框架中,开发人员通常需要手动拼接SQL语句。根据不同的条件拼接SQL语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态SQL恰好解......
  • 利用Nginx正向代理实现局域网电脑访问外网
    引言在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的。这时候,可以借助Nginx来搭建一个正向代理服务器,实现局域网内电脑通过Nginx转发访问外网的需求。在工作中我遇到了一个类似的情况:在公司网络中,由于管理要求,局域网......
  • 记录报错内容以及如何修改(mapper包下面的映射文件扫描不到)
    这个错误是在使用mybatis和mapper的时候发生的,一般报这种错误都是因为配置不匹配,或者是写错了路径,或者是写的sql语句有了问题,但是我检查了很多遍都没有发现任何有关语句和路径的错误。 排除了这些低级错误的可能后,这里会报错的原因也基本就只有一个了,那就是mapper接口和mapper.......
  • Ubuntu Server 部署 FRP 反向代理
    踩坑记录第一次我使用Docker镜像snowdreamtech/frps部署frps,发现始终连不上去。在本地的Dockerlog中显示如下错误:2024-03-1217:02:312024/03/1209:02:31[I][root.go:142]startfrpcserviceforconfigfile[/etc/frp/frpc.toml]2024-03-1217:02:312024/03/12......
  • Idea - 关于mybatis的插件
       idea中配置的mybatis的mapper类和xml文件的图标怎么自动变为mybatis的logo?需要安装什么插件,怎么安装?  在IntelliJIDEA中,要使MyBatis的mapper接口和XML文件自动显示为MyBatis的图标,你通常需要一个支持MyBatis的插件。其中,最常用和官方推荐的插件是"MyBati......
  • 在Linux中,nginx反向代理和负载均衡实现原理是什么?
    在Linux环境中,Nginx实现反向代理和负载均衡是通过编写和配置Nginx服务器的配置文件来完成的。以下是如何利用Nginx实现这两种功能的基本原理和步骤:1.反向代理实现原理:反向代理是一种服务端代理,它允许Nginx服务器接收来自客户端的所有请求,并根据配置规则将这些请求透明地转发给......