八十、MyBatis框架DAO代理

举报
托马斯-酷涛 发表于 2022/05/26 01:13:53 2022/05/26
【摘要】 文章目录 DAO代理实现数据库操作 parameterType 一个简单参数 使用@Param 使用对象 DAO代理实现数据库操作 1、去掉Dao接口实现类 2、getMapper获取代理对象 只需调用 SqlSession 的 getMapper()方法,即可获取指定接口的实现...

文章目录

DAO代理实现数据库操作

parameterType

一个简单参数

使用@Param

使用对象


DAO代理实现数据库操作

1、去掉Dao接口实现类

2、getMapper获取代理对象

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


  
  1. SqlSession session = factory.openSession();
  2. StudentDao dao = session.getMapper(StudentDao.class);

使用工具类


  
  1. StudentDao studentDao =
  2. MyBatisUtil.getSqlSession().getMapper(StudentDao.class);

getMapper()创建的对象,是代替我们自己创建的 StudentDaoImpl 类

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

select方法进行查询


  
  1. @Test
  2. public void testSelect() throws IOException {
  3. final List<Student> studentList = studentDao.selectStudents();
  4. studentList.forEach( stu -> System.out.println(stu));
  5. }

insert方法进行插入


  
  1. @Test
  2. public void testInsert() throws IOException {
  3. Student student = new Student();
  4. student.setId(1006);
  5. student.setName("林浩");
  6. student.setEmail("linhao@163.com");
  7. student.setAge(26);
  8. int nums = studentDao.insertStudent(student);
  9. System.out.println("使用 Dao 添加数据:"+nums);
  10. }

4、深入理解参数

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

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 指定类型。

eg:


  
  1. <delete id="deleteStudent" parameterType="int">
  2. delete from student where id=#{studentId}
  3. </delete>
  4. 等同于
  5. <delete id="deleteStudent" parameterType="java.lang.Integer">
  6. delete from student where id=#{studentId}
  7. </delete>

一个简单参数

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

接口方法

Student selectById(int id);
 

mapper文件


  
  1. <select id="selectById" resultType="com.bjpowernode.domain.Student">
  2. select id,name,email,age from student where id=#{studentId}
  3. </select>

#{studentId} , studentId 是自定义的变量名称,和方法参数名无关。

测试方法


  
  1. @Test
  2. public void testSelectById(){
  3. //一个参数
  4. Student student = studentDao.selectById(1005);
  5. System.out.println("查询 id 是 1005 的学生:"+student);
  6. }

使用@Param

当 Dao 接口方法多个参数,需要通过名称使用参数。 在方法形参前面加 入@Param(“自定义参数名”),mapper 文件使用#{自定义参数名}。


  
  1. 例如定义 List<Student> selectStudent( @Param(“personName”)
  2. String name ) { … }
  3. mapper 文件 select * from student where name =
  4. #{ personName}

接口方法


  
  1. List<Student> selectMultiParam(@Param("personName") String name,
  2. @Param("personAge") int age);

Mapper文件


  
  1. <select id="selectMultiParam" resultType="com.bjpowernode.domain.Student">
  2. select id,name,email,age from student where name=#{personName} or age
  3. =#{personAge}
  4. </select>

测试方法


  
  1. @Test
  2. public void testSelectMultiParam(){
  3. List<Student> stuList = studentDao.selectMultiParam("李力",20);
  4. stuList.forEach( stu -> System.out.println(stu));
  5. }

使用对象

使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。 每一个属性就是一个参数。

语法格式: #{ property,javaType=java 中数据类型名

jdbcType=数据类型名称 } javaType, jdbcType 的类型 MyBatis 可以检测出来,一般不需要设置。常用格式 #{ property }

 创建保存参数值的对象 QueryParam


  
  1. package com.bjpowernode.vo;
  2. public class QueryParam {
  3. private String queryName;
  4. private int queryAge;
  5. //set ,get 方法
  6. }

接口方法

List<Student> selectMultiObject(QueryParam queryParam);
 

Mapper文件


  
  1. <select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
  2. select id,name,email,age from student where name=#{queryName} or age
  3. =#{queryAge}
  4. </select>
  5. <select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
  6. select id,name,email,age from student
  7. where name=#{queryName,javaType=string,jdbcType=VARCHAR}
  8. or age =#{queryAge,javaType=int,jdbcType=INTEGER}
  9. </select>

测试方法


  
  1. @Test
  2. public void selectMultiObject(){
  3. QueryParam qp = new QueryParam();
  4. qp.setQueryName("李力");
  5. qp.setQueryAge(20);
  6. List<Student> stuList = studentDao.selectMultiObject(qp);
  7. stuList.forEach( stu -> System.out.println(stu));
  8. }


文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/123487142

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。