MyBatis关于Mapper代理开发
-
目的:
-
解决原生方式中的硬编码
-
简化后期执行SQL
Mapper代理开发的步骤
-
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
-
-
在Mapper接口中定义方法,方法名就是SQL映射文件sql语句的id,并保持参数类型和返回值类型一致
-
编码
-
通过 SqlSession的getMapper方法获取 Mapper接口的代理对象
-
调用对应方法完成sql的执行
-
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
获取SqlSession,获取mapper接口,接口下面有个同名映射文件,通过.selectAll()方法调用,找到文件对应的id获取对应的sql语句。返回值是list。
Mapper代理开发(出现问题请看MyBatis第一个项目)
-
在src中com.uestc.mapper下面创建一个UserMapper接口
package com.uestc.mapper; import com.uestc.pojo.User; import java.util.List; public interface UserMapper { List<User> selectAll(); }
-
在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>
-
在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 + '\'' + '}'; } }
-
在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>
-
在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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏