MyBatis-Plus之枚举 博主 默语带您 Go to New World. 在MyBatis-Plus中,对枚举(Enum)的支持相对比较方便,可以更容易地将枚举类型映射到数据库中的字段。 以下是关于MyBatis-Plus中枚举的一些要点: 枚举映射: MyBatis-Plus允许将Java中的枚举类型映射到数据库中的字段。 通过@EnumValue和@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。 枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。 代码示例: 假设您有一个订单实体类,其中包含一个枚举类型的支付状态。您可以使用MyBatis-Plus来映射这个枚举字段到数据库中。
创建通用枚举类型 package com.atguigu.mp.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import SexEnum(Integer sex, String sexName) { this.sex = sex; this.sexName = sexName; } } 配置扫描通用枚举 mybatis-plus: configuration: # 配置MyBatis日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix: t_ # 配置MyBatis-Plus void testSexEnum(){ User user = new User(); user.setName("Enum"); user.setAge(20); //设置性别信息为枚举项
# MyBatis-Plus 通用枚举 数据库添加字段sex 创建通用枚举类型 配置扫描通用枚举 测试 结果 表中的有些字段值是固定的,例如性别(男或女),此时我们可以使用MyBatis-Plus的通用枚举来实现 # 数据库添加字段sex ALTER TABLE t_user ADD sex INT(11) # 创建通用枚举类型 /** * @author frx * @version 1.0 * @date 2022/4/20 14:08 */ @Getter public enum SexEnum { MALE(1,"男"), FEMALE(2,"女"); @EnumValue #配置mybatis日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #设置mybatis-plus的全局配置 global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix
MyBatis自带的EnumTypeHandler转换为文字保存在数据库,EnumOrdinalTypeHandler使用的是序号,它们的一致性都可能被轻易地破坏,所以最好的办法是自定义一个int类型 " /> </bean> 自定义枚举 package com.tenmao.utils.model; import com.tenmao.utils.mybatis.CodedEnum; public enum Weekday implements CodedEnum { MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4) getCode() { return code; } } ps: 参考资料写得特别好,我之所以重新写了一下,是资料写得有点啰嗦,比如子类的注册,其实都是自动的,不需要再额外配置 自定义枚举系列 自定义枚举 --- Gson转换 自定义枚举 --- Swagger文档展示 参考 如何在MyBatis中优雅的使用枚举
UE4在C++中和标准的枚举是一样的,支持两种写法,enum和enum class /** Parameter enum for CastChecked() function, defines when ,只在枚举作用域内有效,使用时需要在之前加枚举类型名和两个冒号。 UE4为了解决enum class在做位运算时不方便的问题,提供了一个宏和一些模板函数 // Defines all bitwise operators for enum classes so it 如果枚举不想只在C++中使用,还想暴露给蓝图使用,那么可以通过在枚举定义之前使用UENUM宏,在枚举定义内部使用UMETA来声明,这样UHT会在编译时自动生成辅助代码,运行时会创建一个UEnum的UObject 对象,将枚举自动注册到了虚拟机中。
在和前端开发对接接口过程中经常发现需要一些枚举类的字典参数,虽然可以通过swagger在线文档给前端开发,不过可以直接返回枚举的编码和字典值就可以更直观,所以在项目里怎么实现? 可以通过Mybatis的一些接口,自定义枚举类的处理器实现 环境准备 开发环境 JDK 1.8 SpringBoot2.2.1 Maven 3.2+ 开发工具 IntelliJ IDEA smartGit shape = JsonFormat.Shape.OBJECT) public interface IEnum { String getCode(); String getName(); } 枚举工具类 写一个枚举工具类,根据code和name返回对应枚举类,根据反射获取getEnumConstants,循环匹配 package com.example.springboot.mybatis.common.enumhandler : true 项目中使用 需要的枚举类就继承IEnum接口 package com.example.springboot.mybatis.bean; import com.example.springboot.mybatis.common.enumhandler.IEnum
在 Mybatis-Plus 中我们可以使用枚举类型来完成这一操作,他能自动将数据库里的字段映射成我们需要的字段,例如性别,新建枚举类如下: @Getter public enum GenderType EnumValue:标注哪一个字段是数据库里的字段; @JsonValue:标注要开启自定义序列化返回值; toString:具体的返回值; 同时我们需要在与数据库关联的实体类中修改类型,将性别字段改为枚举类型 private String name; /** * 性别 */ private GenderType gender; } 在配置文件中配置扫描注解类型: #mybatis-plus 配置 mybatis-plus: type-enums-package: com.demo.test.enums 这个时候再去查询,返回的结果就直接是我们在枚举类型中定义的 name 值了。
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd 那就是别名,mybatis可以让我们起一个别名给它,别名定义是在mybatis.xml主配置文件中。 ,主要是配置了log日志相关的信息: log4j.prpp log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppende log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = debug log4j.logger.java.sql.ResultSet =debug 主配置文件mybatis.xml,这个是mybatis的入口配置文件: <?
枚举基本使用 表述一组值 枚举相当于创建了一种新的数据类型,而类型的取值由里面的case值进行表征 enum CompassPoint { // 大写开头 case north,west,east it is not an 'a'") } 灵活使用 enum Barcode { case UPCA(Int,Int,Int,Int) case QRCode(String) //将枚举变量 QRCode关联为String类型 } let productCodeA = Barcode.UPCA(4, 102, 306, 8) let productCodeB = Barcode.QRCode //"UPC-A with value of 4, 102, 306,8.
MyBatis之动态SQL 本文内容来自Mybatis文档,在此整理分享给大家。 MyBatis 的强大特性之一便是它的动态 SQL。 针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。 MyBatis 有一个简单的处理,这在 90% 的情况下都会有用。而在不能使用的地方,你可以自定义处理方式来令其正常工作。 4 bind bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。 > parameterType); } 一旦设定了自定义语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言: <typeAliases> <typeAlias type
有时候我们需要将数据库的字段对Java的枚举类型进行映射,比如说我们有一个汽车配件类型的枚举 public enum ProductType implements Localisable { TYPE1 this.value = value; } @Override public String getValue() { return this.value; } } 该枚举类型实现了一个接口 public interface Localisable { String getValue(); } 有一个配件分类的实体类,包含了该枚举字段(此处只包含部分字段属性) /** * 配件分类 DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd 那就是别名,mybatis可以让我们起一个别名给它,别名定义是在mybatis.xml主配置文件中。 ,主要是配置了log日志相关的信息: log4j.prpp log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = debug log4j.logger.java.sql.ResultSet =debug 主配置文件mybatis.xml,这个是mybatis的入口配置文件: <?
插件是MyBatis对外开放了四个接口,可以用于自定义扩展。 prepare (BaseSatementHandler)SQL预编译 parameterize 设置参数 batch 批量处理 update 增删改操作 query 查询操作 以上4个接口在 MyBatis中的工作流程如下图: ? MyBatis实现自定义插件 创建自定义插件主要步骤: 编写插件代码实现Interceptor接口,设置要代理的方法 在mybatis-config.xml中注册插件 下边来简单做一个分表的插件,根据主键 简单抽出MyBatis代理链核心代码地址 核心类说明: ?
#include <stdio.h> int main() { int X[4] = {}, i, count = 0; int n = 4; for(X[4]=0;X[4]<2;X[4]++)
EmpStatus empStatus=EmpStatus.LOGOUT; private Department dept; EmpStatus.java package com.gong.mybatis.bean ; import com.gong.mybatis.bean.Employee; import com.gong.mybatis.dao.EmployeeMapper; import com.gong.mybatis.mapper.EmployeeMapperDynamicSql BaseJdbcLogger.java:145) DEBUG 01-23 15:27:43,472 <== Updates: 1 (BaseJdbcLogger.java:145) 保存成功:9 数据库中: 插入的是枚举类型的值 我们也可以在mybatis全局配置文件中处理枚举类型的Handler: <typeHandlers> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler " javaType="com.gong.<em>mybatis</em>.bean.EmpStatus"/> </typeHandlers> 再进行测试,输出结果为: DEBUG 01-23
例3.四平方和 思路1:枚举abcd,判断a^2^+b^2^+c^2^+d^2^是否等于N 分析规模 a:0 ~ sqrt(500000 / 4) b:0 ~ sqrt(500000 / 3 =10^8^ 思路2:枚举abc,判断N-a^2^-b^2^-c^2^是不是完全平方数 分析规模 a:0 ~ sqrt(500000 / 4) b:0 ~ sqrt(500000 / 3) c:0 ~ sqrt(500000 / 2) 总枚举量10^9^,依然超时 问题:只枚举ab,那么余下R=N-a^2^-b^2^,能否快速求出c^2^+d^2^=R的解? (或者快速判断无解) 例如:N=5,当前枚举量a=b=0,能不能快速求出解c=1,d=2。 然后只枚举i和j,也就是给小Hi的两袋金币,通过查哈希表得到小Ho的两袋金币一共有多少种选法。
动态SQL语句 MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。 在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。 MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 1. if语句 动态 SQL 通常要做的事情是根据条件包含 where 子句的一部分。 4.set语句 set主要也是用来解决更新问题的。 <update id="updateBookById"> update t_book <set> <if test="author!
通常使用依赖注入框架(Spring)来使用MyBatis,就不需要SqlSessionFactoryBuilder 或者 SqlSessionFactory了,需要参考MyBatis-Spring了解使用方法 MyBatis 为事务隔离级别调用使用了一个 Java 枚举包装器,称为 TransactionIsolationLevel,若不使用它,将使用 JDBC 所支持五个隔离级(NONE、READ_UNCOMMITTED 这个枚举类型定义了三个值: ExecutorType.SIMPLE:这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。 注意 MyBatis-Spring 和 MyBatis-Guice 提供了声明事务处理,所以如果你在使用 Mybatis 的同时使用了Spring 或者 Guice,那么请参考它们的手册以获取更多的内容 因此,不要对 MyBatis 所返回的对象作出更改,以防后患。
接下来,可乐讲给大家介绍 Mybatis 中另一个重量级嘉宾——SqlSession,有了这个对象,我们就能对数据进行一顿操作了。大家伙小板凳搬起来,请看可乐为大家一一道来。 关于 mybatis 缓存后面可乐会专门写一篇文章来仔细介绍,这里我们先梳理主线,看上面第 156 行代码,缓存查不到,从数据库里面查。 Mybatis 提供给了很多内置的参数转换,基本上不需要我们自己去定义。 当然,聪明的你可能会问了,假如这些都不满足呢?假如我要自定义一些类型呢? 这里可乐就不做详细描述了,官网写的也很清楚: https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers 3.4 ResultSetHandler 4、总结 这样,可乐就给大家完整的讲解了如何通过 SqlSession 进行一次数据库查询操作,但是正如文章开头所言,可乐给大家介绍了两种查询方式,一种是需要自己拼接 namespace+method
什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力。 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。 动态SQL元素和使用JSTL或其它相似的基于XML的文本处理器相似,在MyBatis之前的版本中,有很多元素需要了解,MyBatis3大大地提升了它们,现在用不到原先一半的元素就能工作了,MyBatis 另外一个解决办法是利用MyBatis中的一个简单处理方式,这在90%情况下都会有用而且。而在不能使用的地方,可以以自定义方式处理。 比如(上面的例子都是我在自己电脑上跑通过的例子,这个例子就直接复制MyBatis官方文档上的内容了): <select id="selectPostIn" resultType="domain.blog.Post