豆芽网站建设 优帮云,网站建成后应该如何推广,天津注册公司优惠政策,秦皇岛网站制作哪个好MybatisPlus------常用注解以及设置统一前缀以及主键生成策略#xff08;六#xff09;
在使用MybatisPlus的过程中时#xff0c;实力类的Mapper继承BaseMapper#xff0c;此时不要添加TableName注解也能够对表数据实现增删改查。
// mybatispuls 提供了接口实现单表的增…MybatisPlus------常用注解以及设置统一前缀以及主键生成策略六
在使用MybatisPlus的过程中时实力类的Mapper继承BaseMapper此时不要添加TableName注解也能够对表数据实现增删改查。
// mybatispuls 提供了接口实现单表的增删改查
// 使用
Mapper
public interface BaseProcedureMapper extends BaseMapperBaseProcedure {MapString,BaseProcedure selcetMapById(String id);
}为什么不加TableName注解也能够对表进行增删改查 如果没写TableNameMybatisPlus会通过BaseMapper中传入的实体类对象根据驼峰转下划线的规则来匹配数据表。 比如BaseProcedure类会转义成base_procedure表 如果该表名或表面和实体类的关系不匹配就会报找不到这个表的异常 如果修改表名或者不符合驼峰转下划线的规则需要指定表名也建议最好指定表名
在实体类上加上TableName“表名”即可为实体类指定对应表。
Data
TableName(base_procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型TableId(value id, type IdType.ASSIGN_UUID)private String id;private String procedureCode;
有时公司会统一设置表名为t_作为起始或者base_作为起始。
此时可以MybatisPlus可在配置文件中设置全局的统一的前缀这样TableName上就不用写统一的前缀 在application.yml文件中配置
mybatis-plus:## 设置log打印执行的SQL语句configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl## 设置mybatisplus的全局配置global-config:db-config:## 设置实体类所对应的表的统一前缀table-prefix: base_实体类进行修改
Data
TableName(procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型TableId(value id, type IdType.ASSIGN_UUID)private String id;private String procedureCode;TableId
当主键不为id为uid时
在不写TableId时当主键为id时myabtisPlus也能够对表操作进行解析一旦不为id比如改为uid则会解析失败。 此时需要在uid属性上加上TableId注解指定该字段作为主键。
Data
TableName(procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键TableId(type IdType.ASSIGN_UUID)private String uid;当属性为id但主键为uid时value
TableId中有value属性能够指定当前属性对应数据库表中的哪个字段。
Data
TableName(procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键TableId(value uid, type IdType.ASSIGN_UUID)private String id;TableId的type属性
type默认时雪花算法。 type IdType.AUTO 自动递增数据库必须设置id自增否则无效 type IdType.NONE 雪花算法生成ID type IdType.INPUT 用户输入ID type IdType.ASSIGN_ID 雪花算法适用于Number和String与数据库是否设置无关 type IdType.ASSIGN_UUID 生成UUID随机ID /*** 生成ID类型枚举类** author hubin* since 2015-11-10*/
Getter
public enum IdType {/*** 数据库ID自增* p该类型请确保数据库设置了 ID自增 否则无效/p*/AUTO(0),/*** 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)*/NONE(1),/*** 用户输入ID* p该类型可以通过自己注册自动填充插件进行填充/p*/INPUT(2),/* 以下2种类型、只有当插入对象ID 为空才自动填充。 *//*** 分配ID (主键类型为number或string,* 默认实现类 {link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)** since 3.3.0*/ASSIGN_ID(3),/*** 分配UUID (主键类型为 string)* 默认实现类 {link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace(-,))*/ASSIGN_UUID(4);private final int key;IdType(int key) {this.key key;}
}如果自己在传参时传入ID那么配置的idtype就不会生效 通过全局配置主键生成策略
通过操作id-type属性。
mybatis-plus:## 设置log打印执行的SQL语句configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl## 设置mybatisplus的全局配置global-config:db-config:## 设置实体类所对应的表的统一前缀table-prefix: base_## 设置全局主键生成策略## id-type: assign_id## id-type: assign_uuid## id-type: auto## id-type: inputid-type: noneTableField
主键不一致时可以通过TableId注解。 mybatisplus会默认的将驼峰转换为下划线不需要额外配置。 TableField指定属性对应的字段名
Accessors(chain true)
TableName(base_procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键TableId(value id, type IdType.ASSIGN_UUID)private String id;TableField(procedure_code)private String procedureCode;TableLogic逻辑删除
用于逻辑删除。 在是否生效字段上加上TableLogic这个字段就会用于逻辑删除。
Accessors(chain true)
TableName(base_procedure)
public class BaseProcedure {// 默认使用雪花算法,对象ID需要使用 Long类型// 将属性所对应的字段指定为主键TableId(value id, type IdType.ASSIGN_UUID)private String id;TableField(procedure_code)private String procedureCode;private String procedureName;//表示逻辑删除字段//是否生效标志TableLogicprivate Integer active;当执行delete语句时本质上并不会执行delete语句而是执行update语句 Testpublic void testDeleteByID(){//根据对象的id进行删除BaseProcedure baseProcedure new BaseProcedure();baseProcedure.setId(ef5397a26b7a469c6fe1de0e);int result baseProcedureMapper.deleteById(baseProcedure);System.out.println(result:{}result);}执行SQL看控制台打印 Preparing: UPDATE base_procedure SET active1 WHERE id? AND active0Parameters: ef5397a26b7a469c6fe1de0e(String)Updates: 0TableLogic 如不特殊注明默认生效为0失效为1.如果定义的相反需要特殊注明 TableLogic(value原值,delval改值)value 未删除的值默认值为0delval 删除后的值默认值为1修改注解 //表示逻辑删除字段//是否生效标志TableLogic(value 1,delval 0)private Integer active;执行删除语句查看执行SQL Preparing: UPDATE base_procedure SET active0 WHERE id? AND active1Parameters: ef5397a26b7a469c6fe1de0e(String)Updates: 1并且在执行maybatispuls框架所提供的数据库操作时会自动带上这个生效条件 Testpublic void testSelectList(){//会自带active 1ListBaseProcedure baseProceduress baseProcedureMapper.selectList(null);baseProceduress.forEach(System.out::println);//会自带active 1ListBaseProcedure baseProcedures baseProcedureMapper.selectList(new QueryWrapperBaseProcedure().eq(id,ef5397a26b7a469c6fe1de0e));baseProcedures.forEach(System.out::println);//不会自带active 1MapString, BaseProcedure result baseProcedureMapper.selcetMapById(ef5397a26b7a469c6fe1de0e);System.out.println(result);//会自带active 1Long aLong baseProcedureMapper.selectCount(new LambdaQueryWrapperBaseProcedure().eq(BaseProcedure::getId, ef5397a26b7a469c6fe1de0e));System.out.println(aLong);}如果是在mapperl.xml中自定义的SQL需要自己加上active1的生效条件否则不会生效