Java-Mybatis-MybatisPlus

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容器中,实现对应的功能;	

配置文件properties yml

spring:
	# 配置数据源
	datasource:
	# 配置数据源类型
		type: com.zaxxer.hikari.HikariDataSource
	# 配置连接数据库的各个信息
	driver-class-name: com.mysql.cj.jdbc.Driver
	# 数据库驱动信息,jdbc不同的版本需要不同的驱动类信息;jdbc5 和 jdbc8 不同
	url: xxx
	# 数据库url也根据mysql版本的不同而不同,mysql5.7 和 mysql8.0 不同
	username: xxx
	password: xxx

在这里插入图片描述在这里插入图片描述

Lombok介绍

用于简化实体类的开发;
通常情况下,构建与数据库表对应的实体类,是需要手动添加get、set、构造方法等内容;
但是Lombok是可以通过注解实现自动创建的;

@NoArgsConstructor 无参构造
@AllArgsConstructor 有参构造
@Getter get方法
@Setter set方法
@EqualsAndHashCode 重写equal和hashcode方法
@Data 将上述所有内容都自动写出;

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>

整体过程:

2. 依赖包导入:

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

4. 创建实体类:
public class object{}

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

6. 项目启动类添加扫描包
在springboot的启动类上添加注解;
@MapperScan("具体包的位置") // 用于扫描指定包下的mapper接口
// 具体包的位置 = 在mapper文件夹右键,选择copy reference 复制路径/引用

7. 创建xxxMapper.xml文件 (可有可无)
// 没有则使用baseMapper中的方法,如有则使用其中的方法;
<?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>

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

实战

插入操作默认id

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

直接创建xxxMapper对象爆红

描述:
	直接在测试类或者服务中编写如下内容
	@Autowired
	private xxxMapper xxxmapper;
	xxxmapper会报红;
分析:
	

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mybatis-flex是一个用于整合MyBatisMyBatisPlus的工具,它提供了一种简单的方式来使用MyBatis-Plus的功能,同时保留了MyBatis的灵活性。 首先,让我们了解一下MyBatisMyBatis-Plus的概念。MyBatis是一个持久层框架,它提供了一种将SQL语句与Java代码进行映射的方式,使得开发者可以通过编写简单的XML配置文件或者注解来实现数据库操作。而MyBatis-Plus是在MyBatis的基础上进行扩展的一个框架,它提供了更多的便利功能,如通用CRUD操作、分页查询、条件构造器等。 接下来是介绍mybatis-flex的整合方式。mybatis-flex通过提供一个基于注解的方式来整合MyBatisMyBatis-Plus。你只需要在Mapper接口上添加@Mapper注解,并继承BaseMapper接口,就可以直接使用MyBatis-Plus提供的通用CRUD方法。同时,你还可以使用@SelectProvider注解来编写动态SQL查询语句。 下面是一个示例代码,展示了如何使用mybatis-flex整合MyBatisMyBatis-Plus: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @SelectProvider(type = UserSqlProvider.class, method = "getUserByName") User getUserByName(String name); } @Mapper public interface UserSqlProvider { default String getUserByName(String name) { return new SQL() .SELECT("*") .FROM("user") .WHERE("name = #{name}") .toString(); } } ``` 在上面的示例中,UserMapper继承了BaseMapper接口,并添加了@Mapper注解。UserSqlProvider类使用@SelectProvider注解来提供动态SQL查询语句。 通过使用mybatis-flex,你可以享受到MyBatis-Plus提供的便利功能,同时保留了MyBatis的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值