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 { ? ListselectAll(); }
-
在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"> ? <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> ? <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 //Listusers = sqlSession.selectList("test.selectAll"); //3.1 获取UserMapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Listusers = userMapper.selectAll(); ? System.out.println(users); ? //4. 释放资源 sqlSession.close(); ? ? } }