持久层框架设计实现及MyBatis源码分析 ---- MyBatis基础回顾及高级应用

news2024/11/26 12:23:47

一、基本应用

基本开发步骤:
① 添加MyBatis的坐标
② 创建xxx数据表
③ 编写Xxx实体类
④ 编写sql映射⽂件XxxMapper.xml
⑤ 编写核⼼配置⽂件SqlMapConfig.xml
⑥ 编写测试类

二、配置文件介绍

1. sql映射配置文件 XxxMapper.xml

(1) 基础使用

在这里插入图片描述

(2) 动态SQL

where + if 标签
在这里插入图片描述
where标签 mybatis会 自动添加where语句if标签 根据if条件,如果成立,会为后面多个判断语句 添加and(第一个除外)

foreach 标签
在这里插入图片描述
foreach标签的属性含义如下:
• collection:代表要遍历的集合元素。作为入参,对象为list、array时,collection属性值分别默认用"list"、"array"代替,Map对象没有默认的属性值。但是,在作为入参时可以使@Param(“name”)注解来设置自定义collection属性值,设置name后,list、array会失效
• open:代表语句的开始部分
• close:代表结束部分
• item:代表遍历集合的每个元素,⽣成的变量名
• sperator:代表分隔符

抽取Sql片段
在这里插入图片描述

2. 核心配置文件 SqlMapConfig.xml

在这里插入图片描述

(1) properties标签

实际开发中,习惯将数据源的配置信息单独抽取成⼀个properties⽂件,该标签可以加载额外配置的
properties⽂件
在这里插入图片描述

(2) typeAliases标签

类型别名是为Java 类型设置⼀个短的名字。原来的类型名称配置如下
在这里插入图片描述
在这里插入图片描述
上⾯我们是⾃定义的别名,mybatis框架已经为我们设置好的⼀些常⽤的类型的别名
在这里插入图片描述

(3) environments标签

在这里插入图片描述
数据库环境的配置,⽀持多环境配置

其中,事务管理器(transactionManager)类型有两种:
•JDBC:这个配置就是直接使⽤了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作⽤域。
•MANAGED:这个配置⼏乎没做什么。它从来不提交或回滚⼀个连接,⽽是让容器来管理事务的整个⽣
命周期(⽐如 JEE 应⽤服务器的上下⽂)。 默认情况下它会关闭连接,然⽽⼀些容器并不希望这样,因
此需要将 closeConnection 属性设置为 false 来阻⽌它默认的关闭⾏为。

其中,数据源(dataSource)类型有三种:
•UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
•POOLED:这种数据源的实现利⽤“池”的概念将 JDBC 连接对象组织起来。
•JNDI:这个数据源的实现是为了能在如 EJB 或应⽤服务器这类容器中使⽤,容器可以集中或在外部配
置数据源,然后放置⼀个 JNDI 上下⽂的引⽤。

(4) mapper标签

该标签的作⽤是加载映射的,加载⽅式有如下⼏种:

	•使⽤相对于类路径的资源引⽤,例如:
	<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
	•使⽤完全限定资源定位符(URL),例如:
	<mapper url="file:///var/mappers/AuthorMapper.xml"/>
	•使⽤映射器接⼝实现类的完全限定类名,例如:
	<mapper class="org.mybatis.builder.AuthorMapper"/>
	•将包内的映射器接⼝实现全部注册为映射器,例如:
	<package name="org.mybatis.builder"/>

三、Mybatis相应API介绍

	String resource = "org/mybatis/builder/mybatis-config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
	SqlSessionFactory factory = builder.build(inputStream);

Resources ⼯具类
这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、⽂
件系统或⼀个 web URL 中加载资源⽂件。

SqlSession⼯⼚构建器SqlSessionFactoryBuilder
常⽤API:SqlSessionFactory build(InputStream inputStream)
通过加载mybatis的核⼼⽂件的输⼊流的形式构建⼀个SqlSessionFactory对象

SqlSession⼯⼚对象SqlSessionFactory
SqlSessionFactory 有多个⽅法创建SqlSession 实例。常⽤的有如下两个:
在这里插入图片描述

SqlSession会话对象
SqlSession 实例在 MyBatis 中是⾮常强⼤的⼀个类。在这⾥你会看到所有执⾏语句、提交或回滚事务
和获取映射器实例的⽅法。
执⾏语句的⽅法主要有:

	<T> T selectOne(String statement, Object parameter)
	<E> List<E> selectList(String statement, Object parameter)
	int insert(String statement, Object parameter)
	int update(String statement, Object parameter)
	int delete(String statement, Object parameter)

操作事务的⽅法主要有:

	void commit() 
	void rollback()

四、Mybatis复杂映射开发

1. 一对一查询

给定要求:因为一个订单对应着一个用户,所以要求查询出订单的同时将其所属用户也查询出来
sql语句查询结果:
在这里插入图片描述

因为程序当中没有一个指定的实现类能够与查询结果对应,所以我们需要自定义查询结果集类型
使用resultMap来进行封装
在这里插入图片描述
Order.java

public class Order {
    private int id;
    private Date ordertime;
    private double total;
    //代表当前订单从属于哪⼀个客户
    private User user;
}

User.java

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
}

2. 一对多查询

给定要求:因为一个用户可能对应着多个用户,所以要求查询出用户及其所属的订单
sql语句查询结果:
在这里插入图片描述
使用collection标签来配置多的一方的属性,封装为一个集合
在这里插入图片描述
Order.java

public class Order {
    private int id;
    private Date ordertime;
    private double total;
    //代表当前订单从属于哪⼀个客户
    private User user;
}

User.java

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
    // 代表当前⽤户具备哪些订单
    private List<Order> orderList;
}

3. 多对多查询

给定要求:⽤户表和⻆⾊表的关系为,⼀个⽤户有多个⻆⾊,⼀个⻆⾊被多个⽤户使⽤;查询⽤户同时查询出该⽤户的所有⻆⾊
sql语句查询结果:
在这里插入图片描述
同样使用collection标签
在这里插入图片描述
User.java

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
    // 代表当前⽤户具备哪些订单
    private List<Order> orderList;
    // 代表当前⽤户具备哪些⻆⾊
    private List<Role> roleList;
}

Role.java

public class Role {
    private int id;
    private String roleName;
    private String roleDesc;
}

总结

MyBatis多表配置⽅式:
⼀对⼀配置:使⽤做配置
⼀对多配置:使⽤ + 做配置
多对多配置:使⽤ + 做配置

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

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

相关文章

卡尔曼滤波:The Scaler Kalman Filter常量卡尔曼滤波器

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 估计一个常数的通常做法是&#xff0c;做多次测量&#xff08;measurement)&#xff0c;然后使用测量的平均值作为估计值。从统计学的思想上来说&#xff0c;这种做法可以尽量减小估计的误差。这种方…

SpringBoot+Vue实现前后端分离的宠物医院管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Fiddler抓包工具是最强大最好用的 Web 调试工具之一

Fiddler是最强大最好用的Web调试工具之一&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。 目录 Fiddler的基本介绍 …

【C++11重点语法上】lambda表达式,初始化列表

目录 引子&#xff1a;C11为什么的源来 语法1&#xff1a;初始化列表 1.2.2 多个对象的列表初始化 语法3&#xff1a;默认成员函数控制&#xff08;delete&#xff0c;default&#xff09; 语法4&#xff1a;lambda表达式 引子&#xff1a;C11为什么的源来 在2003年C标准…

22年11月-外包-面试题

目录背景题目Spring怎么解决循环依赖&#xff1f;什么是循环依赖第一种&#xff1a;互相依赖第二种&#xff1a;三者间依赖第三种&#xff1a;自我依赖三级缓存补充&#xff1a;那第三级缓存的作用是什么&#xff1f;补充&#xff1a;Spring 中哪些情况下&#xff0c;不能解决循…

【Hadoop】在云服务器上部署Hadoop2.7.1伪分布式集群

文章目录一、准备Hadoop压缩包并安装1、安装Hadoop&#xff08;1&#xff09;准备好hadoop压缩包&#xff08;2&#xff09;安装hadoop&#xff08;3&#xff09;查看是否安装成功2、将hadoop添加到环境变量&#xff08;1&#xff09;在文件末尾添加以下内容&#xff08;2&…

怎样图片转文字?两分钟让你实现快速转文字

在日常的办公中&#xff0c;我们经常会遇到需要将纸质文件里的文字提取出来&#xff0c;再转换为电子档的情况&#xff0c;如果我们采用手动输入的话&#xff0c;不仅速度太慢&#xff0c;而且还可能因此耽误到后边的工作&#xff0c;是不是已经有小伙伴遇到这种现象&#xff0…

[附源码]Python计算机毕业设计Django房产中介管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]计算机毕业设计springboot路政管理信息系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RFC(Remote function call)

文章目录1 Definition2 Call process3. Communication4 Communication module5 RFC version .6 RFC and Web service7 Remote object maintain8 Call RFC1 Definition 2 Call process 3. Communication 4 Communication module 5 RFC version . 6 RFC and Web service 7 Remote…

mysql的主从复制

文章目录前言主备原理binlog的三种格式循环复制问题主备的搭建总结前言 mysql在日常中的使用是比较多的&#xff0c;大部分可能也都搭建过主从复制&#xff0c;或者集群模式。但是其中的原理不知道大家是否清楚。今天我们主要介绍的就是mysql主从复制的原理。 主备原理 主备…

Transformer对接公司需求的调研报告

1. 结构 从宏观的视角开始 首先将这个模型看成是一个黑箱操作。在机器翻译中&#xff0c;就是输入一种语言&#xff0c;输出另一种语言。 那么拆开这个黑箱&#xff0c;我们可以看到它是由编码组件、解码组件和它们之间的连接组成。 编码组件部分由一堆编码器&#xff08;enc…

Open vSwitch系列之数据结构解析深入分析ofpbuf

上一篇我们分析了hmap&#xff0c;hamp可以说是Open vSwitch中基石结构&#xff0c;很多Open vSwitch中数据结构都依赖hmap。本篇我们来分析一下ofpbuf&#xff0c;这个结构&#xff0c;我们从名字上就可得知&#xff0c;此数据结构用于存储数据的&#xff0c;比如收发OpenFlow…

1543_AURIX_TC275_CPU子系统_CPU内核实现特性

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这个章节看的信息应该是针对内核设计实现上TC275的具体实现特点&#xff0c;应该是覆盖了很多内核中的实施相关的特性的。 1. 在上下文功能支持上&#xff0c;P和更灵活一些。E核只支持DSP…

[附源码]Python计算机毕业设计SSM辽宁科技大学二手车交易平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

非常强,批处理框架 Spring Batch 就该这么用!(场景实战)

前言 概念词就不多说了&#xff0c;我简单地介绍下 &#xff0c; spring batch 是一个 方便使用的 较健全的 批处理 框架。 为什么说是方便使用的&#xff0c;因为这是 基于spring的一个框架&#xff0c;接入简单、易理解、流程分明。 为什么说是较健全的&#xff0c; 因为它…

NVIDIA 7th SkyHackathon(八)使用 Flask 与 Vue 开发 Web

1.页面效果 Web 采用 flaskvue 开发&#xff0c;效果图如下 2.后端 import sys import subprocess import os from PIL import Image from datetime import datetime from ASR_metrics import utils as metricsfrom werkzeug.wrappers import Request, Response from …

卡尔曼滤波:过滤随机游走

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 我们知道&#xff0c;随机游走序列是到当前时间为止白噪声实现(white noise realization)的简单求和。换句话说&#xff0c;随机游走序列中的对下一个时间点值的估计&#xff08;预测&#xff09;是通…

为什么程序员买不起房子?

很多人都说程序员的收入那么高&#xff0c;为什么程序员还是买不起房呢&#xff1f;其实不是程序员不想买&#xff0c;是真的买不起…… 拿北京为例。北京的房价可谓是越来越奇葩&#xff0c;不仅仅是因为银行政策导致贷款越来越难审批下来&#xff0c;更重要的是进入地产市场…

音频3A算法详解

一、音频3A技术背景 手机电脑等智能设备的普及,AI智能、5G等技术的不断发展,语音通信成为了最方便快捷的远程交流方式,会议全向麦克风、会议一体化终端等会议系统逐渐成为企业经营中的重要工具。语音质量决定了企业远程沟通协作效果,其中噪音和回声能够严重影响到语音预处理…