Myba tis基础2

news2024/11/26 17:42:50

  • 接口代理方式
    • 代理开发方式介绍
    • 编写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>:条件标签。如果有动态条件,则使用该标签代替 where 关键字。
<if>:条件判断标签。
<if test=“条件判断”>
	查询条件拼接
</if>

动态 SQL 之<foreach>

循环执行sql的拼接操作

<foreach>:循环遍历标签。适用于多个参数或者的关系。
    <foreach collection=“”open=“”close=“”item=“”separator=“”>
		获取参数
	</foreach>

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

SQL片段抽取

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

-  <sql>:抽取 SQL 语句标签。 
-  <include>:引入 SQL 片段标签。 
   <sql id=“片段唯一标识”>抽取的 SQL 语句</sql> <include refid=“片段唯一标识”/>

分页插件

介绍

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

分页插件的使用

①导入与PageHelper的jar包

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

<!-- 注意:分页助手的插件  配置在通用mapper之前 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
    <!-- 指定方言 -->
    <property name="dialect" value="mysql"/>
</plugin>

③测试分页数据获取

@Test
public void testPageHelper(){
    //设置分页参数
    PageHelper.startPage(1,2);

    List<User> select = userMapper2.select(null);
    for(User user : select){
        System.out.println(user);
    }
}

分页插件的参数获取

//其他分页的数据
PageInfo<User> pageInfo = new PageInfo<User>(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

  • <plugins>:集成插件标签。

  • 分页助手相关 API

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

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

MyBatis的多表操作

多表模型介绍

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

多表模型一对一操作

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

多表模型一对多操作

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

多表模型多对多操作

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python创意作品说明怎么写,python创意编程作品集

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;Python创意作品说明怎么写&#xff0c;python创意编程作品集&#xff0c;现在让我们一起来看看吧&#xff01; 1、有哪些 Python 经典书籍 书名&#xff1a;深度学习入门 作者&#xff1a;[ 日&#xff3d; 斋藤康毅 …

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

一、RabbitMQ集群的三种模式 RabbitMQ有三种模式&#xff1a;单一模式&#xff0c;普通集群模式&#xff0c;镜像集群模式。 单一模式&#xff1a;即单机情况不做集群&#xff0c;就单独运行一个rabbitmq而已。 普通集群模式&#xff1a;普通集群模式下&#xff0c;不同的节点…

TryHackMe-Carnage

Carnage 花了两天学了下wireshark 顺便看一下现在我的红队进程 由于ad在进攻性渗透测试当中已经早早收入囊中&#xff0c;这让我在红队进度中变快 现在&#xff0c;红队路径剩下的room应该都算是在整个path当中比较有难度的了&#xff0c;我不经意的查看了剩下的部分room&…

基于昇腾计算语言AscendCL开发AI推理应用

01 初始AscendCL AscendCL&#xff08;Ascend Computing Language&#xff0c;昇腾计算语言&#xff09;是昇腾计算开放编程框架&#xff0c;是对底层昇腾计算服务接口的封装&#xff0c;它提供运行时资源&#xff08;例如设备、内存等&#xff09;管理、模型加载与执行、算子…

c函数篇 入门 阶乘 ,素数(2019年)数列求和(2021年),完数,完全平方数,因子求和,x的y次方。

目录 1: 计算s1!2!3!......n! 2:素数问题2019 3:编写程序判断一个数是不是完数 4:编写函数 求x的y次方 完成pow(x,y)的功能 5:输出1到1000内所有完全平方数 6:求因子之和 数列求和 1: 计算s1!2!3!......n! #include<stdio.h> long fac(int n) {int i;long s1;for…

龙智宣布与Incredibuild建立战略合作伙伴关系

近日&#xff0c;龙智宣布与领先的加速编译软件提供商Incredibuild建立战略合作伙伴关系。 Incredibuild是一款加速编译工具。凭借其独特的进程虚拟化技术&#xff08;Vritualized Distributed Processing™&#xff09;&#xff0c;使用户能够轻松地加速代码构建、测试和许多…

Windows10下安装git

文章目录安装环境&#xff1a;Windows10 64bit官网下载&#xff1a;https://git-scm.com/download/win国内下载源&#xff1a;https://npm.taobao.org/mirrors/git-for-windows/ 从官网下载Git安装包&#xff0c;双击下载后的安装包Git-2.32.0-64-bit.exe,开始安装 选择HTTPS…

java面试题(十八)spring MVC

3.1 什么是MVC&#xff1f; 参考答案 MVC是一种设计模式&#xff0c;在这种模式下软件被分为三层&#xff0c;即Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09;。Model代表的是数据&#xff0c;View代表的…

【解决方案】老旧小区升级改造,视频智能化能力如何提升居民安全感?

一、需求背景 随着我国社会经济的快速发展与进步&#xff0c;城市宜居程度成为城市发展的重要指标&#xff0c;城市的发展面临着更新、改造和宜居建设等。一方面&#xff0c;社区居民对生活的环境提出了更高的要求&#xff1b;另一方面&#xff0c;将“智慧城市”的概念引入社…

[MySQL教程①] - MySQL的安装

目录 ❤ Windows下安装MySQL ❤ 下载mysql installer安装 ❤ 下载zip安装包安装 现在作为服务器操作系统的一般有三种&#xff0c;Windows Server&#xff0c;Linux&#xff0c;Unix&#xff0c;在这里我们只介绍在windows下和linux下安装mysql&#xff0c;Unix下安装应该…

03 AC-AC变换器(ACAC Converter)简介

文章目录0、 杂记1、AC-AC变换器概述2、交流调压电路A 相控交流调压3、交流调压电路B 三相相控交流电压4、交流调压电路C 斩控交流电压5、交流调功电路6、交-交变频电路A 周波变换器7、交-交变频电路B 矩阵变换器8、AC-AC变换器总结0、 杂记 在复杂的周期性振荡中&#xff0c;…

百度贴吧发帖软件如何发布?

百度贴吧发帖软件如何发布&#xff1f;贴吧软件发帖顶帖视频教学&#xff0c;防删图技术视频教学#贴吧发帖#贴吧顶帖 大家好&#xff0c;今天给大家讲一下一个贴软件发电机顶帖的视频教学。先给大家讲一下软件一个发帖。今天我们用的一个软件叫做神机。神机我们现在看到的软件…

RESTful API 为何成为顶流 API 架构风格?

作者孙毅&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer 万物互联的世界充满着各式各样的 API &#xff0c;如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一&#xff0c;它可以帮助你实现客户端与服务端关注点分离&#x…

Vue3 企业级优雅实战 - 组件库框架 - 12 发布开源组件库

前面使用了 11 篇文章分享基于 vue3 、Monorepo 的组件库工程完整四件套&#xff08;组件库、文档、example、cli&#xff09;的开发、构建及组件库的发布。本文属于这 11 篇文章的扩展 —— 如何发布到 GitHub 上以及如何快速利用 GitHub 发布组件库文档。这样优雅哥的《组件库…

Springboot862大学生社团管理系统

后台两大功能模块&#xff0c; (1)管理员&#xff1a;个人中心、学校管理、学院管理、年级管理、班级管理、社长管理、学生管理、社团类型管理、社团信息管理、社团成员管理、退团记录管理、社团活动管理、活动报名管理、退出活动管理、社团事务管理、系统管理。 (2)社长&#…

PyTorch学习笔记:nn.SmoothL1Loss——平滑L1损失

PyTorch学习笔记&#xff1a;nn.SmoothL1Loss——平滑L1损失 torch.nn.SmoothL1Loss(size_averageNone, reduceNone, reductionmean, beta1.0)功能&#xff1a;创建一个平滑后的L1L_1L1​损失函数&#xff0c;即Smooth L1&#xff1a; l(x,y)L{l1,…,lN}Tl(x,y)L\{l_1,\dots,l…

【Python爬虫实战案例】采集城市桌游商家数据信息,做可视化演示

前言 这里容我罗嗦几句 &#x1f617; 这个时间&#xff0c;我想大学生应该都回学校了吧&#xff0c;嘿嘿 现在应该蛮忙的&#xff0c;有些的还要准备开学考&#xff0c;临近毕业的朋友&#xff0c;也快要因为工作而烦恼了&#xff0c;但是&#xff01;&#xff01; 咱也是…

新版国家标准GB/T 28181—2022将于2023年7月1日正式实施,与GB/T 28181—2016差别有哪些?

新版国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》已于2022年12月30日发布&#xff0c;将于2023年7月1日正式实施。与GB/T 28181—2016相比&#xff0c;除结构调整和编辑性改动外&#xff0c;主要技术变化如下。——更改了标准范围&#xf…

排序:堆排序

一、树与二叉树 二、二叉树 1.二叉树&#xff1a;度不超过2的树&#xff08;度&#xff1a;树的分支&#xff09;&#xff0c;每个节点最多有两个孩子节点&#xff0c;两个孩子节点被区分为左孩子节点和右孩子节点。 2.满二叉树&#xff1a;一个二叉树&#xff0c;如果每一个层…

minio查询桶中文件,桶目录中文件

文章目录前言一、文件桶中的文件夹是什么&#xff1f;二、文件查询1.桶中文件查询2.桶中文件夹中的文件查询总结前言 文章再续,书接上文 minio进阶分页查询 说到了文件,可以实现分页查询,然后上次查询的是桶中的文件列表,这次遇到了需要数据隔离的文件,也就是需要在桶中再次建…