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 #配置mybatis日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #设置mybatis-plus的全局配置 global-config: db-config: # 配置MyBatis-Plus操作表的默认前缀 table-prefix : t_ # 配置MyBatis-Plus的主键策略 id-type: auto # 配置类型别名所对应的包 type-aliases-package: com.frx01
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中优雅的使用枚举
在和前端开发对接接口过程中经常发现需要一些枚举类的字典参数,虽然可以通过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 值了。
有时候我们需要将数据库的字段对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 3_mybatis源码分析,希望能够帮助大家进步!!! 最近在网上看了mybatis的源码直播,记录、复习一下当时的内容!! 阅读源码需要从三个方向来剖析: 1.宏观:分析这个框架具备哪些功能 2.微观:阅读源码 3.图解:根据源码画出UML图 阅读源码的方式: 1.跟着代码debug进入源码 2.带着问题来看源码 前期准备 1.引入包 2.准备配置文件 3.配置解析demo 4.业务查询demo ============================================================ ========= 1.mybatis解析配置是怎样的流程 ===================================================================== 假如前期准备完成 ,现在执行mybatis的demo,第二步是为了拿到文件流,我们直接看第三步并进入mybatis源码 其中new XMLConfigBuilder(reader, environment, properties
好,我们今天认真的讲一下枚举类型,大家肯定都用过,比如这样的 1//定义枚举类型 2enum Day { 3 MONDAY, TUESDAY, WEDNESDAY, 4 THURSDAY, FRIDAY 他是不提示我的,可是我如果用枚举,他就可以提示我数据重复,如下图: ? 还有就是不用枚举类型,代码不够简洁,冗余代码太多。 如果我们定义一个枚举类型,其实Java替我们做了定义常量这件事情,也就是上图1的区域。区域3,4是由编译器插入的,下面的图借的人家的。 ? 3.阅读源码 我们找到Enum类,看一下他里面有哪些方法,以及各方法的作用。 ? compareTo:比较我的序数与你的序数之间的差别。 equals:比较枚举类型是否相等。 getDeclaring:与该枚举类型值相对应的类。 ordinal:返回枚举常量的序数。 valueOf:返回带指定名称的指定枚举类型的枚举常量,如果不存在,会直接报错,如下图中标红区域。
MyBatis分页有以下方式实现:
一、内存分页,使用RowBounds类,但这种方式不推荐,基本不用,所以此方式集成省略。
二、自定义实现,代码量比较少,简单,比较灵活。 IUserOperation.java中加入Mapping对应的方法
public List
1.枚举类型 枚举类型不仅可以提高程序的可读性,而且可以减少因底层值发生改变而导致的程序改动。 如果没有为enum符号赋之,系统会自动对其分别赋值为0,1,2,3,等等。 怎样使程序更加清晰易读: enum Week : int { Monday = 1; Tuesday = 2; Wednesday = 3; Parse方法选取同样的参数,并创建枚举类型的一个实例。 在使用Parse方法之前,一定要确保该枚举成员已经存在,否则系统会抛出一个异常。 myColor.ToString("D") = 3 myColor.ToString("f") = Yellow myColor.ToString("F")
<result column="roleDesc" property="roleDesc"></result> </collection> </resultMap> 小结 MyBatis 多表配置方式: 一对一配置:使用 做配置 一对多配置:使用 + 做配置 多对多配置:使用 + 做配置 二、MyBatis注解开发 2.1 常用注解 注解 目标 对应的XML标签
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 //第一个参数为传入的数据,第二个参数为连续显示多少页 PageInfo<Employee> pageInfo = new PageInfo<>(emps,3) 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
//两重循环枚举,时间复杂度O(N^2) #include <bits/stdc++.h> using namespace std; int n,k,a[100000]; set<pair<int,int myset.insert(make_pair(a[i],a[j])); cout<<myset.size()<<endl; return 0; } 思考:优化,减少枚举变量 ,只枚举a[i] 如果我们只枚举a[i],比如a[i] = 3,那么如果存在数对(a[i],a[j] + k),假设我枚举数对里较小的值是3,那么根据差是2,较大的肯定就是5,所以,问题就变成“查找a
这里对mybatis的入门介绍以官方最新MyBatis3.4.1为准,具体文档及jar包请访问:https://github.com/mybatis/mybatis-3/releases。 DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd 3 name=root 4 password=XDP 注:此篇MyBatis3入门不讲详细原理及各参数是什么意思,主要是对mybatis的一个demo入门程序。 1 package day_8_mybatis.mapper; 2 3 import day_8_mybatis.pojo.User; 4 5 /** 6 * mapper数据库访问接口 DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis
这里就可以使用枚举了 一. 枚举类型的定义 枚举类型的定义与结构体类似,不同在于结构体每个成员之间是用";"隔开的,而枚举成员之间却是用“,”分隔,如下: enum Day//星期 { Mon, Tues, Wed, Thur ; 要注意的是只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。 三.枚举的优点、 为什么使用枚举? 我们可以使用 #define 定义常量,为什么非要使用枚举? 枚举的优点: 1. 增加代码的可读性和可维护性 2. 和 #define 定义的标识符比较枚举有类型检查,更加严谨。 3. 防止了命名污染(封装) 4. 便于调试 5. 使用方便,一次可以定义多个常量
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd dept.setLoc("郑州"); mapper.insertDept(dept); session.commit();//实现增加 修改 删除 //3. 更新操作; // Dept dept=new Dept(); // dept.setDeptno(3); // dept.setDname("张沅湲"); // mapper.updateDept(dept); // session.commit(); //4.删除操作; // int i=mapper.deleteDept(3) class Test3 { public static void main(String[] args) { SqlSession session=SqlSessionFactoryUtil.getSqlSession
mybatis梳理 官方入门 数据库表 mybatis配置 demo 源码 SqlSessionFactoryBuilder-官方提示: SqlSessionFactory-官方提示: SqlSession -3 抛弃日常工作中依赖spring的自动装配,按照mybatis的官方文档的提示快速开发一个demo; 数据库表 CREATE TABLE `user` ( `id` bigint(20) NOT DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org /dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment )); databaseIdProviderElement(root.evalNode("databaseIdProvider")); //这里是类型转化; 可以自定义,比如枚举就适合写一个
-- mybatis-config.xml --> <typeAliases> <typeAlias alias="user" type="com.freecloud.plug.<em>mybatis</em>.entity.User <typeAlias alias="department" type="com.freecloud.plug.<em>mybatis</em>.entity.Department" /> <typeAlias alias="userAndDepartment" type="com.freecloud.plug.<em>mybatis</em>.entity.UserAndDepartment" ></typeAlias> < 如果我们想自定义一些类型转换规则,或者对一些特殊类型做处理,比如要支持mysql 5.7 之后的json类型、使用一个字段存储多个外键ID用“,”分隔、或者支持字段枚举类型,自动转换等等。 " /> </resultMap> 准备数据 ## mybatis测试typeHander增加json转换 CREATE TABLE `mybatis_json` ( `id` int(5) NOT
https://mybatis.org/mybatis-3/zh/index.html 说简单点,MyBatis是一个持久化框架,用于Java程序高效访问数据库,不用我们去访问原生相对繁琐的JDBC等Api /dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="lazyLoadingEnabled <em>3</em>、配置数据源 可以在上面的主文件中配,以下为例: <?xml version="1.0" encoding="UTF-8"?> <! /dtd/mybatis-3-config.dtd"> <configuration> <environments default="dev" > <environment id="dev"> DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-