Java-Mybatis-MybatisPlus

news2024/12/23 6:16:27

文章目录

  • Mybatis
    • 基础
      • 概念
      • 持久层框架比较
      • 环境搭建及工程创建
      • 核心配置文件
      • xxxMapper.xml文件
      • mybatis实现过程
      • junit测试mybatis及优化
      • 查询sql语句
  • Mybatis-plus
    • 基础
      • 概述
      • 组成及实现过程
      • Springboot+MybatisPlus使用过程
    • 实战
      • 插入操作默认id

Mybatis

基础

概念

历史:
	MyBatis前身是iBatis,源自于Apache公司,现属于Google Code;
定义:
	MyBatis是支持定制化、存储过程以及高级映射的持久层框架;
		定制化--》指的是sql语句需要用户自己编写;
		高级映射 --》 低级映射是数据库表字段与java对象属性名一一对应才行,高级映射可以通过某种手段实现不对应也可以操作;
	避免所有的JDBC代码和手动设置参数以及获取结果集;
		是对JDBC的封装;结果通过映射成对应的对象实现获取;
	可以使用简单XML或者注解用于配置和构建映射,将接口和java的POJO映射成数据库中的记录;
	是一个半自动的ORMObject Relation Mapping)框架;
		纯手动=jdbc,半自动=大部分jdbc都已经封装了,但有sql语句需要自己编写,全自动=Hibernate 只需要配置就可生成sql语句以及数据库表
		ORM--》对象关系映射,对象=java的实例类对象 关系=数据库中的关系型数据 将两者建立一个映射,操作数据通过操作对应的对象来实现。
下载及安装:
	https://blog.csdn.net/weixin_44719263/article/details/126111884

持久层框架比较

主要含有:JDBC、Hibernate、JPA、MyBatis

JDBC
	sql语句写在java代码中,导致硬编码内伤;
	频繁修改,不宜维护
	代码冗长,效率低
HibernateJPA
	不需要写sql语句,操作简单,开发效率高
	sql如果复杂,则需要绕过框架
	内部生成sql,不容易优化
	基于全映射的自动框架,大量字段的POJO进行部分映射时比较困难;当某个表的字段超级多,且某次查询只需要某几个字段时,会较为困难;
	反射操作太多,导致数据库性能下降
MyBatis
	轻量级、性能出色
	sql与java编码分开,涉及到配置文件、sql文件,功能边界清晰;
	开发效率稍逊于Hibernate

环境搭建及工程创建

运行以及编辑环境:idea 
	需要配置jdk:一般采用1.8版本
配置maven:
	在setting中设置;
	idea中有默认maven,版本是3.6.1
	maven的配置文件setting.xml
	依赖库是repository文件夹;
	打包方式:pom中写成jar包
创建工程:导入依赖junit、mysql-connector-java、mybatis
mysql:
mybatis:
	配置文件:核心配置文件和映射文件;
	核心配置文件:默认名字是mybatis-config.xml 在项目/src/resourse

核心配置文件

<?xml version="1.0"encoding="UTF-8"?>
<!-- xml配置文件的声明 -->
<!--  -->
<!DOCTYPE configuration
	PUBLIC"-//mybatis.org//DTD config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
	# mybatis配置文件的约束,其中doctype后面的是根标签
# 根标签	
<configuration>
# 配置连接数据库的环境
	<environments default="development">
		<environment id="development">
		# 事务管理方式,类型type设置
			<transactionManager type="JDBC"/>
			# 数据源
			<datasource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password"value="${password}"/>
			</datasource>
		</environment>
	</environments>
	# 引入映射文件
	<mappers>
		<mapper resource="org/mybatis/example/BlogMapper.xml"/>
	</mappers>
</configuration>

xxxMapper.xml文件

<?xml version="1.0"encoding="UTF-8”?>
# xml文件的声明
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	# mybatis配置文件的约束,其中doctype后面的是根标签
<mapper namespace="org.mybatis.example.BlogMapper">
	# 命名空间 namespace与mapper接口的全限定类名保持一致;
	<select id="selectBlog" resultType="Blog">
	# 其中id的值与mapper接口中调用的方法名一致;
		select *from Blog where id = #{id}
	</select>
</mapper>

mybatis实现过程

1. mybatis-config.xml核心配置文件;
2. 数据库表 t_user;
3. 实体类,字段与表t_user属性名相同;如果不想一致,则需要采用tableFile注解;(该内容是mybatis-plus中的)
4. mapper接口;
	mbatis有面向接口编程,当调用接口中的方法,会自动匹配一个sql语句执行;
	创建mapper接口,不需要具体实现类;
5. mybatis映射文件,xxx.xml文件;
	java与数据库之间的对应关系:类-表,属性-字段,对象-记录;
	文件命名:实体类+Mapper.xml 与mapper接口名字相同,只有后缀不同;
	映射文件的namespace要和mapper接口的全类名一致;
	映射文件中sql语句的id要和mapper接口中方法名一致;
6. 将xxx.xml文件配置到mybatis-config.xml文件的mappers中	

junit测试mybatis及优化

代码位于:项目/src/test中;

执行过程:
//加载核心配置文件:
	InputStream is = Resources.getResourceAsStream("mybatis-config.xml")// Resources 是 org.apache.ibatis.io
	// getResourceAsStream 获取当前文件的字节输入流;
//获取SqlSessionFactoryBuilder对象:
	SqlSessionFactoryBuilder sqlSessionFactoryBuiler = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象:
	SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession对象:
	SqlSession sqlSession = sqlSessionFactory.openSession();
	// SqlSession是java程序与数据库之间的会话;
//获取mapper接口对象:
	xxxMapper xxxmapper = sqlSession.getMapper(xxxMappper.class);
	// getMapper底层使用的是代理模式获取mapper接口对象;
//测试功能:
	int result = xxxmapper.function();		
// 提交事务
	// 保证操作的实现,因为mybatis-config.xml配置文件中,操作都采用JDBC方式;
	sqlSession.commit();

优化:

1. 是否可以将提交改成自动提交;
//获取SqlSession对象:
	SqlSession sqlSession = sqlSessionFactory.openSession();
// 该方法openSession中的参数,autoCommit参数,默认是false 不进行自动提交;
// 设置为true,则自动提交;

2. 通过日志功能检测当前sql执行情况
通过log4j实现;
依赖导入,pom文件中引入log4j依赖;
创建log4j.xml
	级别:fatal致命》error错误》warn警告》info信息》debug调试
	级别越低,记录信息越多;

log4j.xml文件

<xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE 1og4j:configuration SYSTEM "1og4j.dtd">

<log4j:configuration xmlns:1og4j="http://jakarta.apache.org/1og4j/">
	<appender name="sTDouT" class="org.apache.1og4j.consoleAppender">
		<param name="Encoding" value="UTF-8"/>
		<layout class="org.apache.1og4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,sss} %m(%F:%L)\n"/>
		</layout>
	</appender>
<logger name="java.sql">
	<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
	<level value="info" />
</logger>	
<root>
	<level valuee= "debug"/>
	<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

查询sql语句

查询结果类型:    一行数据;多行数据;单行单列数据;
对应的java类型为:java对象、集合类型、普通变量类型

当查询结果是一行数据、多行数据时,必须xml中添加resultType或resultMap;
	添加的返回值,都设置为对象的类的全限定类名;
	resultType:设置的默认的映射关系;
	resultMap:设置自定义的映射关系;
需要xxxMapper.xml文件中加一些内容:
<?xml version="1.0"encoding="UTF-8”?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
	<select id="selectBlog" resultType="Blog">
		select *from Blog where id = #{id}
	</select>
</mapper>	

Mybatis-plus

基础

概述

定义:
	是mybatis的增强工具,只做增强不做改变,为简化开发、提高效率而生;
	并提供了通用的mapper和service;
	官网:https://baomidou.com/
	说明文档:https://baomidou.com/introduce/
特点:
	润物无声(只增强不做改变)、效率至上、丰富功能(代码生成、自动分页、逻辑删除、自动填充);	

特性:
在这里插入图片描述

组成及实现过程

MybatisPlus组成:
	启动器:mybatis-plus-boot-start
	注解部分annotation、扩展部分extension、核心部分core、代码生成部分generator;
实现工程:
	扫描实体 Scan Entity;
		不需要书写sql命令,都是框架写好的;
		访问的表由访问的实体类对象决定;
	反射技术:
		实现实体类中属性的抽取,分析表与实体类之间的关系,以及当前字段与属性的关系;
	调用方法:
		根据调用的方法,生成sql语句;
	容器:
		将生成的sql语句,注入到mybatis容器中,实现对应的功能;	

Springboot+MybatisPlus使用过程

  1. pom依赖
<!--springboot默认依赖-->
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
</dependency>
<!--mybatisPlus启动器-->
<dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.0.5</version>
</dependency>
<!-- lombok 简化实体类开发,需要在idea下载插件 -->
<dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
</dependency>
<!-- mysql驱动-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependncy>

整体过程:

1. 依赖包导入:

2. 创建数据对象:
public class object{}

3. 项目启动类添加扫描包
在springboot的启动类上添加注解;
@MapperScan("具体包的位置")

4. 配置文件添加语句,了解mapper具体执行过程,在console打出
在mybatis-config.xml文件中,配置:
<setting name="logImpl" value="STDOUT_LOGGING" />
日志实现方式为输出到控制台(STDOUT_LOGGING// stdout_logging

5. 创建xxxMapper接口
//在对应Mapper上面继承基本接口BaseMapper
@Repository //代表持久层
public interface xxxMapper extends BaseMapper<User> {
	//继承之后就是所有东西已经把连接mybatis,配置mapper.xml文件,service-controller层都搞定
}

6. 创建xxxMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.dao.mapper.MsRiskInfoMapper">
	<select id="selectBlog" resultType="Blog">
	# 其中id的值与mapper接口中调用的方法名一致;
		select *from Blog where id = #{id}
		# 具体的sql语句
	</select>
</mapper>

7. 创建service服务类文件
@Autowired
private xxxMapper xxxmapper;
# 自动装载xxxMapper接口,调用其中的方法,实现sql语句执行

实战

插入操作默认id

如果采用Mybatisplus实现数据插入,对应自增长id而言,会默认采用雪花算法生成,它的长度较长,所以id字段的类型一般采用bigint(20)实现。

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

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

相关文章

学分绩点预警系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

【图像去噪】论文精读:Toward Convolutional Blind Denoising of Real Photographs(CBDNet)

文章目录 前言Abstract1. Introduction2. Related Work2.1. Deep CNN Denoisers2.2. Image Noise Modeling2.3. Blind Denoising of Real Images 3. Proposed Method3.1. Realistic Noise Model3.2. Network Architecture3.3. Asymmetric Loss and Model Objective3.4. Trainin…

分享世界上最好的5个滑雪小镇

滑雪爱好者和冬季旅行者们&#xff0c;听好了。随着北半球变成冰雪仙境&#xff0c;是时候计划下一个冰雪覆盖的冒险了。 无论你是一个经验丰富的专业人士还是一个滑雪新手&#xff0c;我们整理了世界上五个最好的滑雪小镇&#xff0c;帮助你找到你完美的白雪覆盖的天堂。 这些…

CPMF复现笔记(2):训练MVTecAD-3D数据集, 精度SOTA

文章来自曹云康的最新论文《Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection》,在MVTecAD-3D取得了最佳分数。代码地址GitHub - caoyunkang/CPMF: [PR] Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection 复现效果 …

【ARM Hypervisor And SMMU 系列 5 -- SMMU 和 IOMMU技术】

文章目录 SMMU 和 IOMMU技术ARM 的 SMMUTranslation process overviewTBU 和 TCU 的关系TBUTCUTLBSMMU 和 IOMMU技术 文章 讲到了为支持I/O透传机制中的DMA设备传输而引入的IOMMU/SMMU技术,同时留了一个问题:IOMMU/SMMU是否可以同时支持GVA->GPA和GPA->HPA的转换? 答案…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(二)

目录 6 无线层1的问题及相关解决方案 6.1 IoT NTN参考参数 6.2 链路预算分析 6.2.1 链路预算参数 6.2.2.1.1 Set-1 6.2.2.1.2 Set-2 6.2.2.1.3 Set-3 6.2.2.1.4 Set-4 6.2.2.1.5 Set-5 6.3 时间和频率同步增强 6.3.1 GNSS位置固定对UE功耗的影响 6.3.1…

Java使用Graphics绘制图片文字边缘出现粗糙的锯齿问题解决

为什么会出现锯齿问题 文字出现锯齿的现象通常是由于显示设备的分辨率有限&#xff0c;无法完美地表现出字符的曲线和斜线的原因。 怎么解决 可以通过Graphics2D设置抗锯齿效果 // 打开抗锯齿效果g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VAL…

linux服务 学习

服务&#xff08;Service&#xff09; 在Linux操作系统中&#xff0c;服务&#xff08;Service&#xff09;是一个基本概念&#xff0c;它通常指的是运行在后台的、持续提供特定功能或资源给系统内部组件或者网络上的客户端程序。 这些服务是系统正常运行和提供各种功能的关键…

目标检测 | yolov7 原理和介绍

相关系列&#xff1a; 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…

Maven-05.依赖管理-依赖配置

一.依赖管理-配置 例如&#xff1a;我们要在maven项目中导入logback日志依赖&#xff0c;那么我们编辑pom.xml文件。 <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</versio…

2023华为od机试C卷【转盘寿司】C 实现 单调栈

#include <stdio.h> #include <stdlib.h>/*单调栈 旋转寿司3 15 6 14 3 21 9 17*/ int main() {int i 0;int len 0;int data 0;int nums[501];char c ;while(scanf("%d",&nums[i]) 1){i;len;c getchar();if(c \n)break;}int *out NULL;int *s…

【顺序栈的实现1】--------含栈顶,栈底指针;栈顶指针指向栈顶元素的下一个位置

1. 栈的抽象数据类型定义&#xff1a; 2.顺序栈的存储方式 同一般线性表的顺序存储结构完全相同&#xff1a; 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。栈底一般在低地址端。 附设top指针&#xff0c;指示栈顶元素在顺序栈中的位置另设base指针&#xff0…

<数据集>斯坦福狗狗识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;20580张 标注数量(xml文件个数)&#xff1a;20580 标注数量(txt文件个数)&#xff1a;20580 标注类别数&#xff1a;120 标注类别名称&#xff1a;[Chihuahua, Japanese_spaniel, Maltese_dog, Pekinese, Shih-Tzu…

快速排序(Java实现)

目录 快速排序的思想 代码实现 思路 代码 快速排序的特点 快速排序的思想 快速排序和冒泡排序一样&#xff0c;是一种交换排序。快速排序的核心思想也是分治&#xff0c;分而治之。给定一个数组&#xff0c;先选定一个元素作为枢轴&#xff0c;然后将大于枢轴的放在右边&a…

Javaweb学习之Vue项目的创建(二)

学习资料 Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) 准备工作都做完了&#xff0c;接下来开始Vue的正式学习。 第一步&#xff0c;打开VS Code 在VS Code里&#xff0c;我们也需要使用到终端&#xff0c;如果不是以管理员身份打开&#xff0c;在新建Vue项目的时候…

围棋棋盘的图像(识别)240801

识别: import tensorflow as tf import numpy as np from tensorflow.keras import layers, models from tensorflow.keras.utils import to_categorical from tensorflow.keras.preprocessing.image import load_img, img_to_array# 加载并预处理图像 def load_and_preproces…

Linux升级lib64中的libc.so.6导致所有命令失效

ls: relocation error: libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference 升级Glibc后出现所有shell命令都不可用 # systemctl status systemctl: relocation error: /lib64/libpthread.so.0: sy…

为视觉语言多模态模型进行偏好优化

训练模型使得它能够理解并预测人类偏好是一项比较复杂的任务。诸如 SFT (Supervised finetuning) 的传统的方法一般都需要耗费较大成本&#xff0c;因为这些算法需要对数据打上特定的标签。而偏好优化 (Preference Optimization) 作为一种替代选项&#xff0c;通常可以简化这一…

【10-21】设计原则

目录 一.开闭原则 二.里氏代换原则 三.依赖倒转原则 四.接口隔离原则 五.迪米特法则 六.合成复用原则 前言&#xff1a; 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可拓展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发…

关于WebSocket必知必会的知识点

什么是WebSocket WebSocket是一种网络传输协议&#xff0c;可以在单个TCP连接上进行全双工通信&#xff0c;位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;服务器可以主动向客户端发送消息。在WebSocket API中&#xff0c;浏览器和…