MyBatis框架系列之------MyBatis 框架 Dao 代理

本文深入探讨了MyBatis框架中的Dao代理,如何实现CRUD操作,包括去掉Dao接口实现类,通过getMapper获取代理对象,并执行SQL语句。此外,文章详细介绍了参数处理,如parameterType、多种参数传递方式(如@Param、对象、位置、Map)以及#和$的区别。最后,讨论了结果封装,包括resultType、resultMap的使用,以及实体类属性与列名不同的处理策略和模糊like查询的两种实现方法。
摘要由CSDN通过智能技术生成

一、Dao 代理实现 CURD

1.案例

1)去掉 Dao 接口实现类

2)getMapper 获取代理对象

只需调用 SqlSession 的 getMapper()方法,即可获取指定接口的实现类对象。该方法的参数为指定 Dao接口类的 class 值。

SqlSession session = factory.openSession();
StudentDao dao = session.getMapper(StudentDao.class);
复制代码

使用工具类:

StudentDao studentDao =
    MyBatisUtil.getSqlSession().getMapper(StudentDao.class);
复制代码

3)使用 Dao 代理对象方法执行 sql 语句

select 方法:

@Test
public void testSelect() throws IOException {
    final List<Student> studentList = studentDao.selectStudents();
    studentList.forEach( stu -> System.out.println(stu));
}
复制代码

insert 方法:

@Test
public void testInsert() throws IOException {
    Student student = new Student();
    student.setId(1006);
    student.setName("林浩");
    student.setEmail("linhao@163.com");
    student.setAge(26);
    int nums = studentDao.insertStudent(student);
    System.out.println("使用 Dao 添加数据:"+nums);
}
复制代码

update 方法

@Test
public void testUpdate() throws IOException {
    Student student = new Student();
    student.setId(1006);
    student.setAge(28);
    int nums = studentDao.updateStudent(student);
    System.out.println("使用 Dao 修改数据:"+nums);
}
复制代码

delete 方法

@Test
public void testDelete() throws IOException {
    int nums = studentDao.deleteStudent(1006);
    System.out.println("使用 Dao 修改数据:"+nums);
}
复制代码

2、原理

动态代理

MapperProxy 类定义:

invoke()方法:

重点方法:

​​

二、深入了解参数

1、parameterType

parameterType: 接口中方法参数的类型, 类型的完全限定名或别名。这个属性是可选的,因为 MyBatis可以推断出具体传入语句的参数,默认值为未设置(unset)。接口中方法的参数从 java 代码传入到mapper 文件的 sql 语句。

int 或 java.lang.Integer

hashmap 或 java.util.HashMap

list 或 java.util.ArrayList

student 或 com.bjpowernode.domain.Student

select,insert,update,delete 都可以使用 parameterType 指定类型。

例如:

<delete id="deleteStudent" parameterType="int">
    delete from student where id=#{studentId}
</delete>
复制代码

等同于

<delete id="deleteStudent" parameterType="java.lang.Integer">
    delete from student where id=#{studentId}
</delete>
复制代码

2、Mybatis 传递参数

从 java 代码中把参数传递到 mapper.xml 文件。

3、一个简单参数

Dao 接口中方法的参数只有一个简单类型(java 基本类型和 String),占位符 #{ 任意字符 },和方法的参数名无关。

接口方法:

Student selectById(int id);
复制代码

mapper 文件:

<select id="selectById" resultType="com.bjpowernode.domain.Student">
    select id,name,email,age from student where id=#{studentId}
</select>
复制代码

#{studentId} , studentId 是自定义的变量名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值