Myba tis基础2
创始人
2024-05-24 20:05:02
0

  • 接口代理方式
    • 代理开发方式介绍
    • 编写StudentMapper接口
    • 测试代理方式
    • 小结
  • 动态sql语句
    • 动态 SQL 之<**if>**
    • 动态 SQL 之<**foreach>**
    • SQL片段抽取
  • 分页插件
    • 介绍
    • 分页插件的使用
    • 分页插件的参数获取
    • 小结
  • MyBatis的多表操作
    • 多表模型介绍
    • 多表模型一对一操作
    • 多表模型一对多操作
    • 多表模型多对多操作
    • 总结

接口代理方式

代理开发方式介绍

采用 Mybatis 的代理开发方式实现 DAO 层的开发
Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper 接口开发需要遵循以下规范:
1) Mapper.xml文件中的namespace与mapper接口的全限定名相同

2) Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

1.程序员负责定义接口
2.在操作数据库,mybatis框架根据接口,通过动态代理的方式生成代理对象,负责数据库的crud操作

编写StudentMapper接口

在这里插入图片描述

测试代理方式

 public Student selectById(Integer id) {Student stu = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); // StudentMapper mapper = new StudentMapperImpl();//5.通过实现类对象调用方法,接收结果stu = mapper.selectById(id);} catch (Exception e) {} finally {//6.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//7.返回结果return stu;}

小结

  1. 映射配置文件中的名称空间必须和 Dao 层接口的全类名相同。
  2. 映射配置文件中的增删改查标签的 id 属性必须和 Dao 层接口的方法名相同。
  3. 映射配置文件中的增删改查标签的 parameterType 属性必须和 Dao 层接口方法的参数相同。
  4. 映射配置文件中的增删改查标签的 resultType 属性必须和 Dao 层接口方法的返回值相同。
  5. 获取动态代理对象 SqlSession 功能类中的 getMapper() 方法。

动态sql语句

动态 SQL 之<if>

根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不为空时还要加入用户名作为条件

:条件标签。如果有动态条件,则使用该标签代替 where 关键字。
:条件判断标签。
查询条件拼接

动态 SQL 之<foreach>

循环执行sql的拼接操作

:循环遍历标签。适用于多个参数或者的关系。获取参数

属性
collection:参数容器类型, (list-集合, array-数组)。
open:开始的 SQL 语句。
close:结束的 SQL 语句。
item:参数变量名。
separator:分隔符。

SQL片段抽取

将重复的 sql 提取出来,使用时用 include 引用即可

-  :抽取 SQL 语句标签。 
-  :引入 SQL 片段标签。 抽取的 SQL 语句 

分页插件

介绍

1.目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。
2.PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单

分页插件的使用

①导入与PageHelper的jar包

②在mybatis核心配置文件中配置PageHelper插件




③测试分页数据获取

@Test
public void testPageHelper(){//设置分页参数PageHelper.startPage(1,2);List select = userMapper2.select(null);for(User user : select){System.out.println(user);}
}

分页插件的参数获取

//其他分页的数据
PageInfo pageInfo = new PageInfo(select);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页:"+pageInfo.getPageNum());
System.out.println("每页显示长度:"+pageInfo.getPageSize());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());

小结

​ 分页:可以将很多条结果进行分页显示。

  • 分页插件 jar 包: pagehelper-5.1.10.jar jsqlparser-3.1.jar

  • :集成插件标签。

  • 分页助手相关 API

    ​ 1.PageHelper:分页助手功能类。

    1. startPage():设置分页参数
    2. PageInfo:分页相关参数功能类。
    3. getTotal():获取总条数
    4. getPages():获取总页数
    5. getPageNum():获取当前页
    6. getPageSize():获取每页显示条数
    7. getPrePage():获取上一页
    8. getNextPage():获取下一页
    9. isIsFirstPage():获取是否是第一页
    10. isIsLastPage():获取是否是最后一页

MyBatis的多表操作

多表模型介绍

  • 多表模型分类 一对一:在任意一方建立外键,关联对方的主键。
  • 一对多:在多的一方建立外键,关联一的一方的主键。
  • 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键。

多表模型一对一操作

:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含对象的映射关系标签。property 属性:被包含对象的变量名javaType 属性:被包含对象的数据类型

多表模型一对多操作

:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型

多表模型多对多操作

:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型:配置主键映射关系标签。:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型

总结

 :配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含对象的映射关系标签。property 属性:被包含对象的变量名javaType 属性:被包含对象的数据类型
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...