当前位置: 首页 > news >正文

网站开发实训步骤重庆网站快速排名提升

网站开发实训步骤,重庆网站快速排名提升,服装微商城网站建设,深圳珠宝品牌网站设计MyBatis-Plus时Mybatis的Best Partner MyBatis-Plus (opens new window)#xff08;简称 MP#xff09;是一个 MyBatis (opens new window)的增强工具#xff0c;在 MyBatis 的基础上只做增强不做改变#xff0c;为简化开发、提高效率而生。 特性 无侵入损耗小强大的 CR…MyBatis-Plus时Mybatis的Best Partner MyBatis-Plus (opens new window)简称 MP是一个 MyBatis (opens new window)的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。 特性 无侵入损耗小强大的 CRUD 操作支持 Lambda 形式调用支持主键自动生成支持 ActiveRecord 模式支持自定义全局通用操作内置代码生成器内置分页插件分页插件支持多种数据库内置性能分析插件内置全局拦截插件 #支持数据库 框架结构 引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 mybatis-spring-boot-starter和MyBatis-Spring以避免因版本差异导致的问题 注解 TableName 描述表名注解标识实体类对应的表 使用位置实体类 注意: 默认是以对象名为表名可以配置全局配置名字增加前缀 也可以用TableName进行注释表名如下同时配置注解生效 。TableName(sys_user) public class User { private Long id; private String name; private Integer age; private String email; } 属性 类型 必须指定 默认值 描述 value String 否 表名 schema String 否 schema keepGlobalPrefix boolean 否 false 是否保持使用全局的 tablePrefix 的值当全局 tablePrefix 生效时 resultMap String 否 xml 中 resultMap 的 id用于满足特定类型的实体类对象绑定 autoResultMap boolean 否 false 是否自动构建 resultMap 并使用如果设置 resultMap 则不会进行 resultMap 的自动构建与注入 excludeProperty String[] 否 {} 需要排除的属性名 since 3.3.1 关于 autoResultMap 的说明 MP 会自动构建一个 resultMap 并注入到 MyBatis 里一般用不上请注意以下内容 因为 MP 底层是 MyBatis所以 MP 只是帮您注入了常用 CRUD 到 MyBatis 里注入之前是动态的根据您的 Entity 字段以及注解变化而变化但是注入之后是静态的等于 XML 配置中的内容。 而对于 typeHandler 属性MyBatis 只支持写在 2 个地方: 定义在 resultMap 里作用于查询结果的封装定义在 insert  update  #{property}  property #{property,typehandlerxxx.xxx.xxx} 设置值 除了以上两种直接指定 typeHandler 的形式MyBatis 有一个全局扫描自定义 typeHandler 包的配置原理是根据您的 property 类型去找其对应的 typeHandler 并使用。 TableId 描述主键注解 使用位置实体类主键字段 TableName(sys_user) public class User { TableId private Long id; private String name; private Integer age; private String email; } 属性 类型 必须指定 默认值 描述 value String 否 主键字段名 type Enum 否 IdType.NONE 指定主键类型在不写type类型的时候默认为雪花算法 IdType 需要提前设置数据库自增 如果需要自己写主键可以自己配置全局的主键生成策略 值 描述 AUTO 数据库 ID 自增需要设置数据库的递增 NONE 无状态该类型为未设置主键类型注解里等于跟随全局全局里约等于 INPUT INPUT insert 前自行 set 主键值 ASSIGN_ID 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口 IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法) ASSIGN_UUID 分配 UUID,主键类型为 String(since 3.3.0),使用接口 IdentifierGenerator的方法nextUUID (默认 default 方法) ID_WORKER 分布式全局唯一 ID 长整型类型(pleaseuseASSIGN_ID) UUID 32 位 UUID 字符串(please use ASSIGN_UUID ) ID_WORKER_STR 分布式全局唯一 ID 字符串类型(please use ASSIGN_ID ) TableField 描述字段注解非主键 TableName(sys_user) public class User { TableId private Long id; TableField(nickname) private String name; private Integer age; private String email; } 属性 类型 必须指定 默认值 描述 value String 否 数据库字段名 exist boolean 否 true 是否为数据库表字段 condition String 否 字段 where 实体查询比较条件有值设置则按设置的值为准没有则为默认全局的 %s#{%s} 参考 Version 描述乐观锁注解标记version在字段上 EnumValue 描述普通枚举类注解(标注在枚举字段上) TableLogic 描述表字段逻辑处理注解(逻辑删除) 属性 类型 必须指定 默认值 描述 value String 否 逻辑未删除值 delval String 否 逻辑删除值 OrderBy 描述内置Sql默认指定排序优先级低于wrapper条件查询 属性 类型 必须指定 默认值 描述 asc boolean 否 true 是否倒序查询 sort short 否 Short.MAX_VALUE 数字越小越靠前 Mapper 写在Dao类上将类注入Spring容器中 MapperScan() MapperScan(value {com.aqiuo.dao}) 写在启动类上将需要扫描的包写在value中 CRUD接口 Service CRUD 接口 说明: 通用 Service CRUD 封装IService (opens new window) get 查询单行 remove 删除list 查询集合page 分页Mapper 泛型 T 为任意实体对象 建议如果存在自定义通用 Service 方法的可能请创建自己的 IBaseService 基础 Mybatis-Plus 的基类 对象 Wrapper 为 条件构造器 save // 插入一条记录选择字段策略插入 boolean save(T entity); // 插入批量 boolean saveBatch(CollectionT entityList); // 插入批量 boolean saveBatch(CollectionT entityList, int batchSize); 参数说明 类型 参数名 描述 T entity 实体对象 Collection entityList 实体对象集合 int batchSize 插入批次数量 SaveOrUpdate // TableId 注解存在更新记录否插入一条记录 //如果有这个记录则修改记录如果没有就插入记录 //如果没有id就是插入有就是修改 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, WrapperT updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(CollectionT entityList); // 批量修改插入 boolean saveOrUpdateBatch(CollectionT entityList, int batchSize); 参数说明 类型 参数名 描述 T entity 实体对象 Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper Collection entityList 实体对象集合 int batchSize 插入批次数量 Remove // 根据 queryWrapper 设置的条件删除记录 boolean remove(WrapperT queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件删除记录map存的条件 boolean removeByMap(MapString, Object columnMap); // 删除根据ID 批量删除 boolean removeByIds(Collection? extends Serializable idList); 参数说明 类型 参数名 描述 Wrapper queryWrapper 实体包装类 QueryWrapper Serializable id 主键 ID Map columnMap 表字段 map 对象 Collection idList 主键 ID 列表 Update 注意updateById才能根据id修改内容其他的要用wrapper // 根据 UpdateWrapper 条件更新记录 需要设置sqlset boolean update(WrapperT updateWrapper); // 根据 whereWrapper 条件更新记录 boolean update(T updateEntity, WrapperT whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(CollectionT entityList); // 根据ID 批量更新 boolean updateBatchById(CollectionT entityList, int batchSize); 参数说明 类型 参数名 描述 Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper T entity 实体对象 Collection entityList 实体对象集合 int batchSize 更新批次数量 Get // 根据 ID 查询 T getById(Serializable id); // 根据 Wrapper查询一条记录。结果集如果是多个会抛出异常随机取一条加上限制条件 wrapper.last(LIMIT 1) T getOne(WrapperT queryWrapper); // 根据 Wrapper查询一条记录 T getOne(WrapperT queryWrapper, boolean throwEx); // 根据 Wrapper查询一条记录 MapString, Object getMap(WrapperT queryWrapper); // 根据 Wrapper查询一条记录 V V getObj(WrapperT queryWrapper, Function? super Object, V mapper); 参数说明 类型 参数名 描述 Serializable id 主键 ID Wrapper queryWrapper 实体对象封装操作类 QueryWrapper boolean throwEx 有多个 result 是否抛出异常 T entity 实体对象 Function mapper 转换函数 List // 查询所有 ListT list(); // 查询列表 ListT list(WrapperT queryWrapper); // 查询根据ID 批量查询 CollectionT listByIds(Collection? extends Serializable idList); // 查询根据 columnMap 条件 CollectionT listByMap(MapString, Object columnMap); // 查询所有列表 ListMapString, Object listMaps(); // 查询列表 ListMapString, Object listMaps(WrapperT queryWrapper); // 查询全部记录 ListObject listObjs(); // 查询全部记录 V ListV listObjs(Function? super Object, V mapper); // 根据 Wrapper 条件查询全部记录 ListObject listObjs(WrapperT queryWrapper); // 根据 Wrapper 条件查询全部记录 V ListV listObjs(WrapperT queryWrapper, Function? super Object, V mapper); 参数说明 类型 参数名 描述 Wrapper queryWrapper 实体对象封装操作类 QueryWrapper Collection idList 主键 ID 列表 Map columnMap 表字段 map 对象 Function mapper 转换函数 Page // 无条件分页查询 IPageT page(IPageT page); // 条件分页查询 IPageT page(IPageT page, WrapperT queryWrapper); // 无条件分页查询 IPageMapString, Object pageMaps(IPageT page); // 条件分页查询 IPageMapString, Object pageMaps(IPageT page, WrapperT queryWrapper); 参数说明 类型 参数名 描述 IPage page 翻页对象 Wrapper queryWrapper 实体对象封装操作类 QueryWrapper Count // 查询总记录数 int count(); // 根据 Wrapper 条件查询总记录数 int count(WrapperT queryWrapper); 参数说明 类型 参数名 描述 Wrapper queryWrapper 实体对象封装操作类 QueryWrapper Chain query (返回值类型是lanmdateQuery) (存在有一个静态方法引用非静态方法的问题) // 链式查询 普通 QueryChainWrapperT query(); // 链式查询 lambda 式。注意不支持 Kotlin LambdaQueryChainWrapperT lambdaQuery();// 示例 query().eq(column, value).one(); lambdaQuery().eq(Entity::getId, value).list(); update(返回值是LamdaQueryWrapper) // 链式更改 普通 UpdateChainWrapperT update(); // 链式更改 lambda 式。注意不支持 Kotlin LambdaUpdateChainWrapperT lambdaUpdate();// 示例 update().eq(column, value).remove(); lambdaUpdate().eq(Entity::getId, value).update(entity); Mapper CRUD 接口 说明: 通用 CRUD 封装BaseMapper接口为Mybatis-Plus启动时自动解析实体表关系映射转换为Mybatis内部对象注入容器 泛型 T 为任意实体类对象 参数 Serializable为任意类型的主键Mybatis-Plus不推荐使用复合主键约定每一张表都有自己唯一的id主键 对象Wrapper 条件构造器 Insert // 插入一条记录 int insert(T entity); 参数说明 类型 参数名 描述 T entity 实体对象 Delete // 根据 entity 条件删除记录 int delete(Param(Constants.WRAPPER) WrapperT wrapper); // 删除根据ID 批量删除 int deleteBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable idList); // 根据 ID 删除 int deleteById(Serializable id); // 根据 columnMap 条件删除记录 int deleteByMap(Param(Constants.COLUMN_MAP) MapString, Object columnMap); 参数说明 类型 参数名 描述 Wrapper wrapper 实体对象封装操作类可以为 null Collection idList 主键 ID 列表(不能为 null 以及 empty) Serializable id 主键 ID Map columnMap 表字段 map 对象 Update // 根据 whereWrapper 条件更新记录 int update(Param(Constants.ENTITY) T updateEntity, Param(Constants.WRAPPER) WrapperT whereWrapper); // 根据 ID 修改 int updateById(Param(Constants.ENTITY) T entity); 使用提示: 在调用updateById方法前需要在T entity对应的实体类中的主键属性上加上TableId注解。 参数说明 类型 参数名 描述 T entity 实体对象 (set 条件值,可为 null) Wrapper updateWrapper 实体对象封装操作类可以为 null,里面的 entity 用于生成 where 语句 Select // 根据 ID 查询 T selectById(Serializable id); // 根据 entity 条件查询一条记录 T selectOne(Param(Constants.WRAPPER) WrapperT queryWrapper); // 查询根据ID 批量查询 ListT selectBatchIds(Param(Constants.COLLECTION) Collection? extends Serializable idList); // 根据 entity 条件查询全部记录 ListT selectList(Param(Constants.WRAPPER) WrapperT queryWrapper); // 查询根据 columnMap 条件 ListT selectByMap(Param(Constants.COLUMN_MAP) MapString, Object columnMap); // 根据 Wrapper 条件查询全部记录 ListMapString, Object selectMaps(Param(Constants.WRAPPER) WrapperT queryWrapper); // 根据 Wrapper 条件查询全部记录。注意 只返回第一个字段的值 ListObject selectObjs(Param(Constants.WRAPPER) WrapperT queryWrapper); // 根据 entity 条件查询全部记录并翻页 IPageT selectPage(IPageT page, Param(Constants.WRAPPER) WrapperT queryWrapper); // 根据 Wrapper 条件查询全部记录并翻页 IPageMapString, Object selectMapsPage(IPageT page, Param(Constants.WRAPPER) WrapperT queryWrapper); // 根据 Wrapper 条件查询总记录数 Integer selectCount(Param(Constants.WRAPPER) WrapperT queryWrapper); 参数说明 类型 参数名 描述 Serializable id 主键 ID Wrapper queryWrapper 实体对象封装操作类可以为 null Collection idList 主键 ID 列表(不能为 null 以及 empty) Map columnMap 表字段 map 对象 IPage page 分页查询条件可以为 RowBounds.DEFAULT 条件构造器 说明 以下出现的第一个入参 boolean condition 表示该条件是否加入最后生成的sql语句中例如 query.like(StringUtils.isNotBlank(name),Entity::getName,name).eq(age!null age0,Entity::getAge,age)以下代码块内的多个方法均从上往下补全个别 boolean 类别的入参默认为 true以下方法在入参中出现的 R 为泛型在普通wrapper中 是String, 在 LambdaWrapper 中是函数 例如 Entity::getId,Entity 为实体类getId 为字段 id 的getter Method) 以下方法入参中的 R column 均为数据库字段当 R 具体类型为 String 时则为数据库字段名字段名是数据库关键字的自己用转义符包裹!以下举例均为使用普通wrapper ,入参为Map 和List 的均以json形式表现如果入参的Map或者List为空则不会加入最后生成的SQL中 警告 wrapper 很重传输 wrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场)正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作我们拒绝接受任何关于 RPC 传输 Wrapper 报错相关的 issue 甚至 pr AbstractWrapper 说明: QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类 用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件 注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为 allEq allEq(MapR, V params) allEq(MapR, V params, boolean null2IsNull) allEq(boolean condition, MapR, V params, boolean null2IsNull) 全部eq(或个别isNull 个别参数说明 params : key 为数字库字段名 value为 字段值null2IsNull: 为true,则 在 map 的value为null时调用isNull方法为false则忽略value的值为null的 例一allEq({id:1,name:老王,age:null}) ---id 1 and name 老王 and age is null 例二allEq({id:1,name:老王,age:null}, false)--id 1 and name 老王 eq eq(R column, Object val) eq(boolean condition, R column, Object val) 等于 例: eq(name, 老王) - -- name 老王 ne ne(R column, Object val) ne(boolean condition, R column, Object val) 不等于 例 ne(name, 老王) --- name 老王 gt gt(R column, Object val) gt(boolean condition, R column, Object val) 大于 例gt(age,18) - - - age18 ge ge(R column, Object val) ge(boolean condition, R column, Object val) 大于等于 例: ge(age, 18) -- age 18 lt lt(R column, Object val) lt(boolean condition, R column, Object val) 小于例: lt(age, 18)---age 18 #le le(R column, Object val) le(boolean condition, R column, Object val) 小于等于例: le(age, 18)---age #between between(R column, Object val1, Object val2) between(boolean condition, R column, Object val1, Object val2) BETWEEN 值1 AND 值2例: between(age, 18, 30)---age between 18 and 30 #notBetween notBetween(R column, Object val1, Object val2) notBetween(boolean condition, R column, Object val1, Object val2) NOT BETWEEN 值1 AND 值2例: notBetween(age, 18, 30)---age not between 18 and 30 #like like(R column, Object val) like(boolean condition, R column, Object val) LIKE %值%例: like(name, 王)---name like %王% #notLike notLike(R column, Object val) notLike(boolean condition, R column, Object val) NOT LIKE %值%例: notLike(name, 王)---name not like %王% #likeLeft likeLeft(R column, Object val) likeLeft(boolean condition, R column, Object val) LIKE %值例: likeLeft(name, 王)---name like %王 likeRight likeRight(R column, Object val) likeRight(boolean condition, R column, Object val) LIKE 值%例: likeRight(name, 王)---name like 王% notLikeLeft notLikeLeft(R column, Object val) notLikeLeft(boolean condition, R column, Object val) NOT LIKE %值例: notLikeLeft(name, 王)---name not like %王 notLikeRight notLikeRight(R column, Object val) notLikeRight(boolean condition, R column, Object val) NOT LIKE 值%例: notLikeRight(name, 王)---name not like 王% #isNull isNull(R column) isNull(boolean condition, R column) 字段 IS NULL例: isNull(name)---name is null isNotNull isNotNull(R column) isNotNull(boolean condition, R column) 字段 IS NOT NULL例: isNotNull(name)---name is not null in in(R column, Collection? value) in(boolean condition, R column, Collection? value) 字段 IN (value.get(0), value.get(1), ...)例: in(age,{1,2,3})---age in (1,2,3) in(R column, Object... values) in(boolean condition, R column, Object... values) 字段 IN (v0, v1, ...)例: in(age, 1, 2, 3)---age in (1,2,3) notIn notIn(R column, Collection? value) notIn(boolean condition, R column, Collection? value) 字段 NOT IN (value.get(0), value.get(1), ...)例: notIn(age,{1,2,3})--age not in (1,2,3) notIn(R column, Object... values) notIn(boolean condition, R column, Object... values) 字段 NOT IN (v0, v1, ...)例: notIn(age, 1, 2, 3)---age not in (1,2,3) inSql inSql(R column, String inValue) inSql(boolean condition, R column, String inValue) 字段 IN ( sql语句 )例: inSql(age, 1,2,3,4,5,6)---age in (1,2,3,4,5,6)例: inSql(id, select id from table where id 3)---id in (select id from table where id 3) notInSql notInSql(R column, String inValue) notInSql(boolean condition, R column, String inValue) 字段 NOT IN ( sql语句 )例: notInSql(age, 1,2,3,4,5,6)---age not in (1,2,3,4,5,6)例: notInSql(id, select id from table where id 3)---id not in (select id from table where id 3) groupBy groupBy(R... columns) groupBy(boolean condition, R... columns) 分组GROUP BY 字段, ...例: groupBy(id, name)---group by id,name orderByAsc orderByAsc(R... columns) orderByAsc(boolean condition, R... columns) 排序ORDER BY 字段, ... ASC例: orderByAsc(id, name)---order by id ASC,name ASC orderByDesc orderByDesc(R... columns) orderByDesc(boolean condition, R... columns) 排序ORDER BY 字段, ... DESC例: orderByDesc(id, name)---order by id DESC,name DESC orderBy orderBy(boolean condition, boolean isAsc, R... columns) 排序ORDER BY 字段, ...例: orderBy(true, true, id, name)---order by id ASC,name ASC having having(String sqlHaving, Object... params) having(boolean condition, String sqlHaving, Object... params) HAVING ( sql语句 )例: having(sum(age) 10)---having sum(age) 10例: having(sum(age) {0}, 11)---having sum(age) 11 func func(ConsumerChildren consumer) func(boolean condition, ConsumerChildren consumer) func 方法(主要方便在出现if...else下调用不同方法能不断链)例: func(i - if(true) {i.eq(id, 1)} else {i.ne(id, 1)}) or or() or(boolean condition) 拼接 OR 注意事项: 主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接) 例: eq(id,1).or().eq(name,老王) ---id 1 or name 老王 or(ConsumerParam consumer) or(boolean condition, ConsumerParam consumer) OR 嵌套例: or(i - i.eq(name, 李白).ne(status, 活着))---or (name 李白 and status 活着) and and(ConsumerParam consumer) and(boolean condition, ConsumerParam consumer) AND 嵌套例: and(i - i.eq(name, 李白).ne(status, 活着))---and (name 李白 and status 活着) nested nested(ConsumerParam consumer) nested(boolean condition, ConsumerParam consumer) 正常嵌套 不带 AND 或者 OR例: nested(i - i.eq(name, 李白).ne(status, 活着)) ---(name 李白 and status 活着) apply apply(String applySql, Object... params) apply(boolean condition, String applySql, Object... params) 拼接 sql 注意事项: 该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的,反之会有! 例: apply(id 1) id 1例: apply(date_format(dateColumn,%Y-%m-%d) 2008-08-08)---date_format(dateColumn,%Y-%m-%d) 2008-08-08)例: apply(date_format(dateColumn,%Y-%m-%d) {0}, 2008-08-08)---date_format(dateColumn,%Y-%m-%d) 2008-08-08) last last(String lastSql) last(boolean condition, String lastSql) 无视优化规则直接拼接到 sql 的最后 注意事项: 只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用 例: last(limit 1) exists exists(String existsSql) exists(boolean condition, String existsSql) 拼接 EXISTS ( sql语句 )例: exists(select id from table where age 1)---exists (select id from table where age 1) notExists notExists(String notExistsSql) notExists(boolean condition, String notExistsSql) 拼接 NOT EXISTS ( sql语句 )例: notExists(select id from table where age 1)---not exists (select id from table where age 1) QueryWrapper 说明: 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件 及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取 select select(String... sqlSelect) select(PredicateTableFieldInfo predicate) select(ClassT entityClass, PredicateTableFieldInfo predicate) 设置查询字段 说明: 以上方法分为两类. 第二类方法为:过滤查询字段(主键除外),入参不包含 class 的调用前需要wrapper内的entity属性有值! 这两类方法重复调用以最后一次为准 例: select(id, name, age)例: select(i - i.getProperty().startsWith(test)) UpdateWrapper 说明: 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件 及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取! set set(String column, Object val) set(boolean condition, String column, Object val) SQL SET 字段例: set(name, 老李头)例: set(name, )空字符串例: set(name, null) null setSql setSql(String sql) 设置 SET 部分 SQL例: setSql(name 老李头) lambda (这个lambda可以用方法引用其他不行支持链式编程) 获取 LambdaWrapper 在QueryWrapper是LambdaQueryWrapper 在UpdateWrapper是LambdaUpdateWrapper 乐观OptimisticLockerInnerInterceptor 当要更新一条记录的时候希望这条记录没有被别人更新 乐观锁实现方式 取出记录时获取当前 version更新时带上这个 version执行更新时 set version newVersion where version oldVersion如果 version 不对就更新失败 spring boot 注解方式: Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } 2.在实体类的字段上加上Version注解 Version private Integer version; 示例 // Spring Boot 方式 Configuration MapperScan(按需修改) public class MybatisPlusConfig { /** * 旧版 */ Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } /** * 新版 */ Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mybatisPlusInterceptor; } } 代码生成器 引入依赖 dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId version最新版本/version /dependency 快速生成 FastAutoGenerator.create(url, username, password) .globalConfig(builder - { builder.author(baomidou) // 设置作者 .enableSwagger() // 开启 swagger 模式 .fileOverride() // 覆盖已生成文件 .outputDir(D://); // 指定输出目录 }) .dataSourceConfig(builder - builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) - { int typeCode metaInfo.getJdbcType().TYPE_CODE; if (typeCode Types.SMALLINT) { // 自定义类型转换 return DbColumnType.INTEGER; } return typeRegistry.getColumnType(metaInfo); })) .packageConfig(builder - { builder.parent(com.baomidou.mybatisplus.samples.generator) // 设置父包名 .moduleName(system) // 设置父包模块名 .pathInfo(Collections.singletonMap(OutputFile.xml, D://)); // 设置mapperXml生成路径 }) .strategyConfig(builder - { builder.addInclude(t_simple) // 设置需要生成的表名 .addTablePrefix(t_, c_); // 设置过滤表前缀 }) .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板默认的是Velocity引擎模板 .execute();
http://www.sadfv.cn/news/34490/

相关文章:

  • wordpress怎么建立空白文档河南seo优化
  • 鲜花网网站开发的意义网站开发技术服务协议
  • Joomla外贸网站模板wordpress好用么
  • 万润 企业网站建设大岭山网站仿做
  • 免费建站系统有哪些莱芜二手房出售信息最新房源
  • 产品营销型网站建设携程的网站建设项目规划书
  • 南平做网站中山网站建设文化
  • 阿里云 做网站东莞网站建设优化方案
  • 怎么样将网站内容做的漂亮即墨网站建设招聘
  • 关于建设公司网站的建议不会写代码怎么做网站
  • vps建两个网站要两个程序池吗网站美化工具
  • linux 网站备份群晖wordpress 映射
  • 深圳龙霸网站建设物三室内设计培训班哪家好
  • 网站seo服务商h5平台官网
  • 做的网站百度不收录seo系统oem
  • 怎样建设网站啊软文的概念
  • 网站项目需求大疆网站建设
  • 购物网站建设要多少钱重庆企业网站推广方案
  • 镇江网站建设优化排名如何注册网站怎么注册
  • 电子商务网站建设估算湖州十大进出口公司
  • app拉新平台搜索引擎的优化和推广
  • 设计公司网站欣赏wordpress 电商 插件
  • 网站开发分层重庆网站网络推广
  • 傻瓜自助建站软件12380网站开发
  • 做网站计入什么科目名创 网站建设
  • 海口网站建设就q479185700上墙深圳平台网站开发
  • 做网站的应用研发一个app费用
  • seo整站优化的思路及步骤网站网页怎么设计
  • 炫酷的电商网站设计大连网站建设方案维护
  • 自己买个服务器做代挂网站企业信息管理系统官网