# 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
创建通用枚举类型 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之枚举 博主 默语带您 Go to New World. 在MyBatis-Plus中,对枚举(Enum)的支持相对比较方便,可以更容易地将枚举类型映射到数据库中的字段。 以下是关于MyBatis-Plus中枚举的一些要点: 枚举映射: MyBatis-Plus允许将Java中的枚举类型映射到数据库中的字段。 通过@EnumValue和@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。 枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。 代码示例: 假设您有一个订单实体类,其中包含一个枚举类型的支付状态。您可以使用MyBatis-Plus来映射这个枚举字段到数据库中。
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.
有时候我们需要将数据库的字段对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-
MyBatis之动态SQL 本文内容来自Mybatis文档,在此整理分享给大家。 MyBatis 的强大特性之一便是它的动态 SQL。 针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。 MyBatis 有一个简单的处理,这在 90% 的情况下都会有用。而在不能使用的地方,你可以自定义处理方式来令其正常工作。 4 bind bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。 > parameterType); } 一旦设定了自定义语言驱动,你就可以在 mybatis-config.xml 文件中将它设置为默认语言: <typeAliases> <typeAlias type
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!
什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力。 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。 动态SQL元素和使用JSTL或其它相似的基于XML的文本处理器相似,在MyBatis之前的版本中,有很多元素需要了解,MyBatis3大大地提升了它们,现在用不到原先一半的元素就能工作了,MyBatis 另外一个解决办法是利用MyBatis中的一个简单处理方式,这在90%情况下都会有用而且。而在不能使用的地方,可以以自定义方式处理。 比如(上面的例子都是我在自己电脑上跑通过的例子,这个例子就直接复制MyBatis官方文档上的内容了): <select id="selectPostIn" resultType="domain.blog.Post
回顾 Spring 整合 Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig SpringBoot 整合 mybatis 创建模块 定义实体类 public class Book { private Integer id; private String 原因是 Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。
MyBatis为批量操作数据提供了非常便利的方案。 当然,也可以在程序中自己拼接sql语句,在dao层传入该sql语句作为参数。要注意的是,采用这种方式时,不能使用 # 而是要使用 $。 mybatis xml中的写法如下: <update id="updateStudentBatch" parameterType="java.util.List"> <foreach collection END, age = CASE id WHEN 1 THEN 20 WHEN 2 THEN 21 END WHERE id IN (1,2) **mybatis