
MyBatis入门-中
发布日期:2022-02-10 11:36:55
浏览次数:24
分类:技术文章
本文共 4755 字,大约阅读时间需要 15 分钟。
MyBatis接口代理方式实现Dao层
-
接口代理方式-实现规则
- 传统方式实现 Dao 层,我们既要写接口,还要写实现类。而 MyBatis 框架可以帮助我们省略编写 Dao 层接口实现类的步骤。我们只需要编写接口,由 MyBatis 框架根据接口的定义来创建该接口的动态代理对象。
- 实现规则
- 映射配置文件中的名称空间必须和 Dao 层接口的全类名相同。
- 映射配置文件中的增删改查标签的 id 属性必须和 Dao 层接口的方法名相同。
- 映射配置文件中的增删改查标签的 parameterType 属性必须和 Dao 层接口方法的参数相同。
- 映射配置文件中的增删改查标签的 resultType 属性必须和 Dao 层接口方法的返回值相同。
- 接口代理方式-代码实现
- 删除 mapper 层接口的实现类。
- 修改映射配置文件
- 修改 service 层接口的实现类,采用接口代理方式实现功能。
-
核心配置文件(MyBatisConfig.xml)
-
映射配置文件(StudentMapper.xml)
SELECT * FROM student -
mapper层(StudentMapper)
package com.xxxxxxx.mapper;/* 持久层接口 */public interface StudentMapper { //查询全部 public abstract List
selectAll(); //省略其他方法,} 小结
- 接口代理方式可以让我们只编写接口即可,而实现类对象由 MyBatis 生成
- 实现规则(如上 实现规则)
- 获取动态代理对象
- SqlSession 功能类中的 getMapper() 方法
MyBatis 映射配置文件 – 动态 SQL
动态 SQL 介绍
-
MyBatis 映射配置文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL 就是 动态变化的,此时简单的 SQL 就不能满足要求了。
-
多条件查询
-
动态SQL标签
- :条件判断标签
- :循环遍历标签
-
标签
- :条件标签。如果有动态条件,则使用该标签代替 where 关键字。
- :条件判断标签。 *
-
:循环遍历标签
- :循环遍历标签。适用于多个参数或者的关系。
- 属性
- collection:参数容器类型,(list-集合,array-数组)。
- open:开始的 SQL 语句。
- close:结束的 SQL 语句。
- item:参数变量名。
- separator:分隔符。
- :循环遍历标签。适用于多个参数或者的关系。
-
SQL片段抽取
- :条件标签。如果有动态条件,则使用该标签代替 where 关键字。
- :条件判断标签。 *
-
举例
SELECT * FROM student
MyBatis 核心配置文件 – 分页插件
-
分页插件介绍
- 在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的。这个时候就可以借助分页插件来帮助我们实现分页功能。
- PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。
-
分页插件实现步骤
-
导入jar包
-
在核心配置文件中集成分页助手插件
-
-
分页插件相关
- 分页:可以将很多条结果进行分页显示。
- 分页插件 jar 包:pagehelper-5.1.10.jar jsqlparser-3.1.jar
- :集成插件标签。
- 分页助手相关 API
- PageHelper:分页助手功能类。
- startPage():设置分页参数
- PageInfo:分页相关参数功能类。
- getTotal():获取总条数
- getPages():获取总页数
- getPageNum():获取当前页
- getPageSize():获取每页显示条数
- getPrePage():获取上一页
- getNextPage():获取下一页
- isIsFirstPage():获取是否是第一页
- isIsLastPage():获取是否是最后一页
MyBatis 多表操作
多表模型
-
在实际开发中,随着业务难度的加深,肯定是需要多表操作的
-
多表模型分类
- 一对一:在任意一方建立外键,关联对方的主键。
- 一对多:在多的一方建立外键,关联一的一方的主键。
- 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键。
-
一对一
- 一对一模型:例如人和身份证,一个人只有一个身份证。
- :配置字段和对象属性的映射关系标签。
- id 属性:唯一标识
- type 属性:实体对象类型
- :配置主键映射关系标签。
- :配置非主键映射关系标签。
- column 属性:表中字段名称
- property 属性: 实体对象变量名称
- :配置被包含对象的映射关系标签。
- property 属性:被包含对象的变量名
- javaType 属性:被包含对象的数据类型
-
一对多
- 一对多模型:班级和学生,一个班级可以有多个学生
- :配置字段和对象属性的映射关系标签。
- id 属性:唯一标识
- type 属性:实体对象类型
- :配置主键映射关系标签。
- :配置非主键映射关系标签
- column 属性:表中字段名称
- property 属性: 实体对象变量名称
- :配置被包含集合对象的映射关系标签。
- property 属性:被包含集合对象的变量名
- ofType 属性:集合中保存的对象数据类型
-
多对多
- 多对多模型:学生和课程,一个学生可以选择多门课程、一个课程也可以被多个学生所选择。
-
:配置字段和对象属性的映射关系标签。
- id 属性:唯一标识
- type 属性:实体对象类型
-
:配置主键映射关系标签
-
:配置非主键映射关系标签。
- column 属性:表中字段名
- property 属性: 实体对象变量名称
-
:配置被包含集合对象的映射关系标签。
-
property 属性:被包含集合对象的变量名
-
ofType 属性:集合中保存的对象数据类型
-
sc
WHERE sc.sid=s.id AND sc.cid=c.id*:配置字段和对象属性的映射关系标签。 * id 属性:唯一标识 * type 属性:实体对象类型* :配置主键映射关系标签* :配置非主键映射关系标签。 * column 属性:表中字段名 * property 属性: 实体对象变量名称 * :配置被包含集合对象的映射关系标签。 * property 属性:被包含集合对象的变量名 * ofType 属性:集合中保存的对象数据类型
转载地址:https://blog.csdn.net/drug1910951117/article/details/106887634 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2023年06月04日 13时32分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
sql的ExecuteScalar(),ExecuteNonQuery()
2019-09-06 22:50:53
消息 245,级别 16,状态 1,第 1 行 在将 varchar 值 '2,8' 转换成数据类型 int 时失败。...
2019-09-06 22:50:52
HTML5 中的新特性:
2019-09-06 22:50:52
C#log4net的使用
2019-09-06 22:50:51
C#虚方法和抽象方法的区别
2019-09-06 22:50:51
MVC:页面提交JQ动态生成的输入框的值得解决方案:
2019-09-06 22:50:50
版本号的作用和使用逻辑
2019-09-06 22:50:50
tftp环境搭建
2019-09-06 22:50:49
开发板与PC的SSH环境搭建
2019-09-06 22:50:48
Eclipse颜色设置
2019-09-06 22:50:48
linux下设置coredump文件的开关和路径
2019-09-06 22:50:47
gdb学习笔记
2019-09-06 22:50:47
git命令学习笔记
2019-09-06 22:50:46
VMware共享文件夹编译出现“Value too large for defined data type”错误的解决办法
2019-09-06 22:50:46
「译」通过Fragment处理配置变化
2019-09-06 22:50:45
Android M Dialer完全总结
2019-09-06 22:50:45
「译」Fragment事务与Activity状态丢失
2019-09-06 22:50:44
「深入Java」Generics泛型
2019-09-06 22:50:44
「译」Android文本测量
2019-09-06 22:50:43
「深入Java」Annotation注解
2019-09-06 22:50:43