MyBatis入门-中
发布日期:2022-02-10 11:36:55 浏览次数:43 分类:技术文章

本文共 4756 字,大约阅读时间需要 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MyBatis入门-上
下一篇:jstl 的<c:if>标签没有else的解决办法

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月31日 13时35分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

iOS UILabel根据字符串长度自动适应宽度和高度 2021-06-29
细说JVM内存模型 2021-06-29
谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别? 2021-06-29
走进Java架构!找工作,去小公司好,还是大公司好- 2021-06-29
趁热打铁!想要轻松搞定MySQL事务?一招解决分布式一致性 2021-06-29
改造RequestMappingHandlerMapping,使spring boot2的controller可以继承夫类的@RequestMapping 并追加路径到当前mapping前 2021-06-29
我的世界Bukkit服务器插件开发---快速开发框架---快速开发自己的服务器插件 2021-06-29
我的世界Bukkit服务器插件开发---用java 10分钟快速开发一个自己的服务器插件 2021-06-29
快速搭建Spring Cloud项目,含Spring Gateway、Config Server、Oauth、Mongodb、MyBatis、Redis、Feigh 2021-06-29
搭建Spring cloud项目---搭建Consul 2021-06-29
SpringBoot-SpringCloud分布式事务-初稿-等项目写完开源后再来改为终版 2021-06-29
搭建docker私有镜像仓库(帐号密码登录) 2021-06-29
java获取文件的mime,java获取文件是不是文本,java获取文件类型(非后缀方式) 2021-06-29
冰蝎V3.0Beta9-fixed客户端JAVA源码与配套服务端 2021-06-29
图片后缀和ContentType大全 2021-06-29
卸载notpad++,改用vscode,将VS Code添加到右键文件菜单 2021-06-29
win10最强DLL注入工具,远程线程注入、消息钩子注入、输入法注入、EIP注入、注册表注入、APC注入(APC好像不能用) 2021-06-29
JAVA反编译工具(界面版本的)-JAR反编译-war反编译-war逆向工程 2021-06-29
快速搭建SDN开发环境:ONOS开发环境 2021-06-29
OpenCV图像处理技术(Python)——几何变换 2021-06-29