个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
②【MyBatis】 Mapper代理方式
- 使用Mapper代理的
目的
: -
- 解决原生方式中的硬编码 ;
- 简化 后期SQL语句的执行 ;
- Mapper代理方式的
优势
: -
- 代码不仅更清晰,类型更加安全,还不用担心可能出错的字符串字面值以及强制类型转换。
⚪使用Mapper代理方式开发
步骤
:
- 定义Mapper接口(与SQL映射文件同名),并将Mapper接口与SQL映射文件放置在同一目录下;
- 将SQL映射文件的
namespace
属性设置为Mapper接口全限定名(如"com.java.mapper.UserMapper"); - 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的
id
,并保持方法返回值类型与SQL映射文件一致; - 编码(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=‘广州’}]