# 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-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 lombok.Getter; @Getter public enum SexEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue private 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
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 写一个枚举工具类,根据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 ; public enum Sex implements IEnum { MAN("1","男"), WOMAN("2","女"); private String code
在 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 ("配件"), TYPE2("车品"); private String value; private ProductType(String value) { 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-
work(Week.SUN); System.out.println("*****************************"); System.out.println("得到Week枚举类型中每个常量的常量值 *************Hongten************************* 运行效果: Have a Rest ***************************** 得到Week枚举类型中每个常量的常量值 0 1 2 3 4 5 6 ***************************** 大家辛苦了,请努力工作!
'student2',2); INSERT INTO card VALUES (1,1111); INSERT INTO card VALUES (2,2222); 注意: 这里并没有在数据库中设置外键 'student2'); INSERT INTO class VALUES (1,'Java课',1); INSERT INTO class VALUES (2,'Java课',2); 其中 class VALUES(2,1); INSERT INTO student_select_course VALUES(2,2); 根据要求我们来设计一下 SQL 语言: SELECT s.student_id 二级缓存示例 我们在同一个 SessionFactory 下查询 id = 1 的数据,只有第一次需要执行 SQL 语句,从后都是从缓存中取出来的: 参考资料:how2j.cn-MyBatis教程、Java3y-Mybatis 【缓存、代理、逆向工程】 参考资料: 《Java EE 互联网轻量级框架整合开发》 《Spring MVC + MyBatis开发从入门到项目实战》 How2j-MyBatis 系列教程 全能的百度和万能的大脑
; /* 子流程1: SQL查询参数的设置 */ stmt = prepareStatement(handler, ms.getStatementLog()); /* 子流程2: Cause: " + e, e); } } } } } 复制代码 子流程2 SQL查询结果集的封装: 复制代码 // SimpleExecutor类 public List query 最后贴一张调用栈到达Java类的set方法中的快照: MyBatis缓存 MyBatis提供查询缓存,用于减轻数据库压力,提高性能。MyBatis提供了一级缓存和二级缓存。 同一个SqlSession对象对象执行2遍相同的SQL查询,在第一次查询执行完毕后将结果缓存起来,这样第二遍查询就不用向数据库查询了,直接返回缓存结果即可。MyBatis默认是开启一级缓存的。 MyBatis的二级缓存对细粒度的数据级别的缓存实现不友好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息
一、Mybatis的Dao层实现 1.1 代理开发方式介绍 Mapper 接口开发需要遵循以下规范: 1、 Mapper.xml文件中的namespace与mapper接口的全限定名相同 2、 Mapper select>查询 <insert>:插入 <update>:修改 <delete>:删除 <where>:where条件 <if>:if判断 <foreach>:循环 <sql>:sql片段抽取 四、Mybatis 个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时 mysql的字符串类型转换成 java的Type类型的方法 ③在MyBatis 核心配置文件中进行注册 ④测试转换是否正确 1.2 plugins标签 MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据 groupId> <artifactId>jsqlparser</artifactId> <version>1.0</version> </dependency> ②在mybatis
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 EmployeeMapper.class); //第一个参数为当前页码,第二个参数是每页的记录数 Page<Object> page = PageHelper.startPage(1,2) 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
然后我们预处理前缀和,以及进行枚举。 后面枚举pq的复杂度是O(N^2^)。对于确定的pq,判断三段和是不是满足条件是O(1)。所以整体复杂度是O(N^2)。 至此,题目中70%的分数应该能拿到了,还有30%需要优化 优化 优化的方法当然还是从枚举入手,我们假设只枚举q,也就是最后一段的断点。 看上图,假设A数组是[3, 2, 1, 0, 2],然后我们枚举q=N-1,也就是第三段只包含A[N]=2这一个数。在q已经确定的情况下,可以知道S3的值。比如上面的例子中S3=2。 所以q=N-1这种情况下,只有一种切分方案:3|2 1 0|2 上面是q=N-1的情况,我们再枚举q=N-2的情况,如下图: S3还是等于2。
A2第8节枚举类型第二章第8节 1、有一些数据是开放性范围的,比如int、float、String。 2、枚举是一种定义确定取值范围的特殊类型语法: enum Dir { East,West,North,South; } 3、使用Dir d = Dir.East; A2第9节基本运算符(余、自增自减、 i2=6 A2第10节赋值运算符和实现加法计算器 第二章第10节 1、左边只能有一个变量,而且左边必须是变量 2、计算器WinForm 1,拖控件(一个button 、两个label、两个textbox 表达式1:表达式2 真则是表达式1,假则是表达式2 练习:输出i是否为偶数 解:console,writeline((i%2)==0?" efault: //语句; break } 4、表达式可以是byte ,short、int、char、string、枚举类型。
例3.题目链接:hihoCoder1514 先写一个暴力枚举的伪代码: ans = MAX_INT For i = 1...M { For j = 1...N { 第二个数组是1,2,4,5,10,13,第三个数组未知,什么清空都有可能。 首先我们把3个数组都排序,然后依次枚举A数组中的一个数A[i],表示我们从A数组挑选出的数是A[i]。 test(a[i],b[j + 1],c[k + 1]); } cout << ans; return 0; } 例4.题目链接:hihoCoder1607 思路 一般的暴力枚举这题肯定是过不了的 ,数据量太大,那我们就要想办法优化,能不能只枚举Ai,而将符合条件的Aj数量直接算出来,而不是枚举出来。
MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver MySQL 8版本使用jdbc8驱动,驱动类使用:com.mysql.cj.jdbc.Driver 2、 核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息 核心配置文件存放的位置是src/main/resources目录下 创建mapper接口 MyBatis中的mapper 因此一个映射文件对应一个实体类,对应一张表的操作 MyBatis映射文件用于编写SQL,访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers 目录下 2、 MyBatis中可以面向接口操作数据,要保证两个一致: a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致 b>mapper接口中方法的方法名和映射文件中编写 //读取MyBatis的核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder入手, 咱们先看看源码是怎么实现的: SqlSessionFactoryBuilder源码片段: 1 public class SqlSessionFactoryBuilder { 2 3 //Reader读取mybatis配置文件,传入构造方法 4 //除了Reader外,其实还有对应的inputStream作为参数的构造方法, 5 //这也体现了mybatis properties和environments的解析: XMLConfigBuilder: 1 public class XMLConfigBuilder extends BaseBuilder { 2 通过以上源码,我们就能看出,在mybatis的配置文件中: 1. configuration节点为根节点。 2. DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis
; Mapper.xml <select id="getUserByList" parameterType="map" resultMap="user"> select * from mybatis.user Integer> map = new HashMap<String, Integer>; map.put("startIndex",1); map.put("pageSize",2)
result column = "password" property = "user.password"></result> </resultMap> <resultMap id = "orderMap<em>2</em>"
Mybatis学习笔记2 本章目录描述: 1、Dao开发方法 1.1需求 1.2SqlSession的使用范围 1.3原始Dao开发方式 1.4 Mapper动态代理方式 2、SqlMapConfig.xml null; try { //通过sqlsession调用selectOne方法获取一条结果集 //参数1:指定定义的statement的id,参数2: 2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType void insertUser(User user)throws Exception; } 接口定义有如下特点: 1、 Mapper接口方法名和Mapper.xml中定义的statement的id相同 2、 2 SqlMapConfig.xml配置文件 2.1配置内容 SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases