欢迎光临散文网 会员登陆 & 注册

MyBatis框架详解—Dao 代理(上篇)

2021-03-22 16:54 作者:动力节点小王本王  | 我要投稿



本篇文章主要内容

Dao 接口动态代理

参数传递

处理查询结果

like 和主键

Dao 代理实现数据库操作

步骤

(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);

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

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

select 方法:

 insert 方法:

深入理解参数

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

更多看课件资源中的有关别名的文件或者 mybatis-3.5.1.pdf 15 页。    

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

例如:

一个简单参数

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

接口方法:

测试方法:

多个参数-使用@Param

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

例如定义

List<Student> selectStudent( @Param(“personName”) 

String name ) { … }

             mapper 文 件 select * from student where name = 

#{ personName}

 接口方法:

mapper 文件:

测试方法:

多个参数-使用对象

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

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

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

mybatis-3.5.1.pdf 第 43 页 4.1.5.4 小节:

创建保存参数值的对象 QueryParam

接口方法:

List<Student> selectMultiObject(QueryParam queryParam);

mapper 文件:

测试方法:

多个参数-按位置

参数位置从 0 开始, 引用参数语法 #{ arg 位置 } , 第一个参数是#{arg0}, 第二个是#{arg1}

注意:mybatis-3.3 版本和之前的版本使用#{0},#{1}方式, 从mybatis3.4 开始使用#{arg0}方式。

接口方法:

List<Student> selectByNameAndAge(String name,int age);

mapper 文件

测试方法:

多个参数-使用 Map

Map 集合可以存储多个值,使用 Map 向mapper 文件一次传入多个参数。Map 集合使用String 的key,

Object 类型的值存储参数。 mapper 文件使用 # { key } 引用参数值。

例如:Map<String,Object> data = new HashMap<String,Object>(); 

          data.put(“myname”,”李力”);

          data.put(“myage”,20);

接口方法:

List<Student> selectMultiMap(Map<String,Object> map);

mapper 文件:

测试方法:

#和$

#:占位符,告诉mybatis 使用实际的参数值代替。

并使用PrepareStatement 对象执行sql 语句, #{…}代替 sql 语句的“?”。

这样做更安全,更迅速,通常也是首选做法,

 mapper 文件

转为 MyBatis 的执行是:

String sql=” select id,name,email,age from student where id=?”; PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1,1005);

解释:

where id=? 就 是 where id=#{studentId} ps.setInt(1,1005) , 1005 会替换掉 #{studentId}

$ 字符串替换,告诉mybatis 使用$包 含的“字符串”替换所在位置。使用Statement 把sql 语句和${}的内容连接起来。主要用在替换表名,列名,不同列排序等操作。

例 1: 

分别使用 id , email 列查询 Student 

接口方法:

Student findById(int id);

Student findByEmail(String email);

 mapper 文件:

测试方法:

例 2:通用方法,使用不同列作为查询条件

接口方法:

Student findByDiffField(@Param("col") String colunName,@Param("cval"

Object value);

mapper 文件:

测试方法:

最后奉上视频教程👇,视频观看效果更佳!!走过路过别忘素质三连哦~~


MyBatis框架详解—Dao 代理(上篇)的评论 (共 条)

分享到微博请遵守国家法律