具体拓展体现在数据自动填充(类似JPA中的审计)、关联查询(类似sql中的join)、自动建表(仅支持mysql)、冗余数据自动更新、动态条件等功能做了补充完善。...当@Bind*系列注解用在对象上即表达一对一,当注解在List上时便表达一对多的意思,当外部对象本身就是查询集合的情况下便是多对多的场景了。...,多数情况下会使用sql的join语法,另一种方案是做数据冗余,讲其他表的字段作为当前表的字段,但是牵扯一个数据修改后同步的问题,本框架可以解决。...新增注解,同步@Table中的primary属性,在多个Entity映射一张表的情况下,确定主Entity是哪个,数据表生成的时候根据主表来生成。...> 是 中间表Entity,需要对应创建其Mapper selfField String 是 "Id" 关联Entity所需的自身字段 selfMidField String 是 关联Entity所需的自身字段
一、ActiveRecord: Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。...调用deleteAll方法时,会删除tb_user表的所有数据,employeeDao调用deleteAll方法时,会删除tb_employee表的所有数据。...说明deleteAll方法是有效的。不过在运行这两个测试时,由于是全表删除操作,所有要先把执行分析插件关了。 (二)、逻辑删除: 其实数据并不会轻易的删除掉,毕竟数据收集不易,所以就有了逻辑删除。...,就是把逻辑删除字段的值设置为-1;当逻辑删除字段的值是-1时再执行查询操作,sql是SELECT ... FROM tb_user WHERE id=?...AND logic_flag=1,所以查询结果是null。 五、公共字段自动填充: 我们知道,当我们进行插入或者更新操作时,没有设置值的属性,那么在数据表中要么是为null,要么是保留原来的值。
优势 拥有SQLite的所有操作功能。 使用简单,通过注解的方式实现相关功能,编译时自动生成实现类impl。 与LiveData、LifeCycle及Paging天然支持。...Entity:表示数据库中的表。 DAO:包含用于访问数据库的方法。 应用使用 Room 数据库来获取与该数据库关联的数据访问对象 (DAO)。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。 最后,应用使用实体来获取和设置与数据库中的表列相对应的值。Room架构图如图所示。...//exportSchema = true 生成数据库创建表或升级等操作及字段描述的json文件 //修改数据库版本直接通过version修改 //SkipQueryVerification注解是编译时候是否验证...每个Entity至少有一个字段作为主键,如果想让数据库为字段自动分配ID,可以使用autoGenerate,如果Entity想有符合主键,可以使用@Entity注解里的primaryKeys,设置复合主键
当主键名为id时(表中列名为id,实体类中字段名为id),无需使用该注解显式指定主键,mp会自动关联。若类的字段名和表的列名不一致,可用value属性指定表的列名。...字段填充策略 通过fill属性指定,字段为空时会进行自动填充 @Version 乐观锁注解 @EnumValue 注解在枚举字段上 @TableLogic 逻辑删除 KeySequence 序列主键策略...oracle的序列主键需要使用这种方式 ASSIGN_ID 当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法 ASSIGN_UUID 当实体类的主键属性为空时,才会自动填充,使用...自动填充 表中常常会有“新增时间”,“修改时间”,“操作人” 等字段。比较原始的方式,是每次插入或更新时,手动进行设置。...注意,自动填充仅在该字段为空时会生效,若该字段不为空,则直接使用已有的值。
特性 支持数据库 架构 快速开始 创建user表 DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT...GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。 最高位是符号位,始终为0,不可用。 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。...创建时间、修改时间、这些操作是自动化完成的,我们不希望手动更新 阿里巴巴手册:所有数据表:gmt_create、gmt_modified几乎所有的表都要配置上!...在数据库中增加一个delete字段 默认值为0 实体类同步 配置逻辑删除 测试删除 可以看到,测试的是删除操作,实际上走的是更新操作,并不是删除操作 测试查询 会跟上where...使用 导入插件 配置项目为测试环境 条件构造器 Wrapper十分重要 复杂的sql就靠它 使用 判断空 //查询name不为空,并且邮箱不为空的用户,年龄大于18的用户
当主键名为id时(表中列名为id,实体类中字段名为id),无需使用该注解显式指定主键,mp会自动关联。若类的字段名和表的列名不一致,可用 value 属性指定表的列名。...oracle的序列主键需要使用这种方式 ASSIGN_ID 当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法 ASSIGN_UUID 当实体类的主键属性为空时,...当有字段是字符串类型时,只组装非空字符串;对其他类型的字段,等同于NOT_NULL NEVER :不加入SQL。...自动填充 表中常常会有“新增时间”,“修改时间”,“操作人” 等字段。比较原始的方式,是每次插入或更新时,手动进行设置。...注意,自动填充仅在该字段为空时会生效,若该字段不为空,则直接使用已有的值。
(1)简介 添加、修改数据时,每次都会使用相同的方式进行填充。...(2)未使用自动填充时 未使用 自动填充时,每次添加、修改数据都可以手动对其进行添加。...Step1: 使用 @TableField 注解,标注需要进行填充的字段。...悲观锁:总是假设最坏的情况,每次读取数据时认为数据会被修改(即加锁),当进行更新操作时,直接更新数据,结束操作后释放锁(此处才可以被其他线程读取)。 (3)乐观锁、悲观锁使用场景? ...在数据表中增加一个 version 字段。
14、默认将实体类的类名查找数据库中的表,使用@TableName(value="table1")注解指定表名,@TableId指定表主键,若字段与表中字段名保持一致可不加注解。...(1)简介 添加、修改数据时,每次都会使用相同的方式进行填充。...(2)未使用自动填充时 未使用 自动填充时,每次添加、修改数据都可以手动对其进行添加。...Step1: 使用 @TableField 注解,标注需要进行填充的字段。...在数据表中增加一个 version 字段。
一、Room 预填充数据简介 在 Android 中使用 Room 框架 , 创建 SQLite 数据库时 , 有时需要预填充一些数据 , 这些数据一般都是来自 assets 资源目录 ; 如果用户首次打开应用...将创建的第一个字段 , 名称设置为 id , 类型仍为 INTEGER 不变 , 将该字段设置为 非空 / 自增 / 主键 ; 生成的 SQL 语句如下 : CREATE TABLE "" ( "id...age 字段的 非空属性不同 , 这里 在 DB Browser for SQLite 工具中设置 age 字段为非空字段 ; 右键点击数据库表 , 在弹出的右键菜单中 , 选择 " 修改表 " 选项..., 将 age 属性设置为非空 ; 六、完整代码示例 ---- 本博客中的代码是在上一篇博客 【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表...| 临时数据库表重命名 ) 的基础上 , 添加了 由 DB Browser for SQLite 工具制作的 预填充数据 文件 ; 1、Entity 实体类代码 该实体类中 , 暂时只保留 id ,
一、空属性 两个值:null(默认的) 和 not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算,任何数与 null 相加都为 null...gender 字段就不能为空了: 此时我们插入数据,给 gender 字段给空,是会报错的: 但是我们不给值,让它使用默认值就可以插入: 所以当 not null 和 default 同时出现时,它们并不冲突...的值由原来的 1 变成 00001,这就是 zerofill 属性的作用,如果宽度小于设定的宽度(这里设置的是 5),自动填充 0;要注意的是,这只是最后显示的结果,在 MySQL 中实际存储的还是1...在创建表的时候,在所有字段之后,使用 primary key (主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。...六、自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1 操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
;注意 1.当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。...一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。..., name varchar(20) not null, address varchar(20) not null );唯一性约束(unique) 唯一约束(Unique Key)是指所有记录中字段的值不能够重复出现...column default null;零填充约束(zerofill) 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0。...当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。
e.printStackTrace(); } } return result; } 上面巧妙地利用反射机制读取Class信息和Annotation信息,将数据库表中的列和类中的字段进行关联映射并赋值...: /** * 删除一条记录 * @param entity entity中的ID不能为空,如果ID为空,其他条件不能为空,都为空不予执行 * @return */ boolean delete...Exception; (4)规定修改方法的接口模型为: /** * 修改一条记录 * @param entity entity中的ID不能为空,如果ID为空,其他条件不能为空,都为空不予执行...entity中的ID不能为空,如果ID为空,其他条件不能为空,都为空则不予执行 * @return */ boolean delete(T entity) throws Exception...entity中的ID不能为空,如果ID为空,其他条件不能为空,都为空则不予执行 * @return * @throws Exception */ boolean
字符串:varcahr,char char表示固定的字符串比如char(2)需要2位,不足填充空格 varchar表示可变长字符串 text:储存大文本,一般大于4000时使用。...约束 主键primary key:物理上储存的数据 非空not null:不允许为空 唯一unique:唯一键,不允许重复 默认default:设置默认,不输入会自动填充默认值 外键foreign key...你show databases; 就会看到 我们刚刚创建的数据库python_data。 但是还记得我们用图形化工具时创建数据库指定了编码utf8吗?...进入数据库:user 数据库名; 查看当前所在数据库:select database(); 查看当前数据库中所有的表:show tables; 创建表:create table 表名(字段1 类型,字段...查询中的where: 取出id小于60的所有数据。
,和Entity配合使用,指定实体类对应的数据库中的表的信息 name :可选,指定表的名称,默认的是和类名一样,只有在不一致的情况下才会指定表名 catalog : 可选,表示Catalog名称,...01 TemporalType.TIMESTAMP 两者兼备,这个是默认的 @Column - 可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中 该字段的详细定义...,但是我们也可以使用这个注解改变这个名称 这个注解是用来设置自动生成的外键的属性,比如外键的名称,非空…… name 指定外键的名称 nullable 指定外键是否为空,默认的是true...unique 生成唯一的约束,就是这个字段的值唯一,默认的false @JoinTabl 当涉及到多对多的映射关系的时候,用来定义第三表的表名,和字段的名称。...name 设置第三张表的名称 joinColumns 设置的是当前实体类对应的表在第三张表的外键的字段名称 inverseJoinColumns 设置的是另外一个实体类对应的表在第三张表的外键的字段名称
这里演示一个查询所有的方法,所以使用了 selectList ,其参数是一个条件,这里先置为空。...神奇的发现,我们不需要在 sql 中进行设置了,所有的配置都被自动做好了,更新的内容和 id 都被自动填充好了 (3) 自动填充 自动填充是填充什么内容呢?...首先我们需要知道,一般来说表中的创建时间,修改时间,我们总是希望能够给根据插入或者修改的时间自动填充,而不需要我们手动的去更新 可能以前的项目不是特别综合或需要等原因,有时候也不会去设置创建时间等字段,...下面还有一些注意事项: 注意事项: 填充原理是直接给entity的属性设置值!!!...悲观锁下,员工 B 只能在 员工 A 操作完以后才能操作,这样能保证数据只有一个人在操作 C:MP 中的乐观锁插件 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时
, entitys.size()); } } 三、常用注解 名称 作用范围 含义 注释 @Table 实体类 建立实体类与数据库表之间的对应关系 默认类名首字母小写 @Column 实体类属性...自增的主键 属性:strategy = GenerationType.IDENTITY @Transient 实体类属性 标识实体类与数据库不对应的字段 非数据库表中字段 四、CRUD 4.1 select...* 补充 ⇨ insertSelective(Entity entity)属性为空的使用默认值 4.3 updateByPrimaryKey(Entity entity) * 根据主键修改 * mapper...* 补充 ⇨ updateByPrimaryKeySelective(Entity entity)属性为空的不更新【推荐】 4.4 delete(Entity entity) * 根据实体类删除 * mapper...自动生成SQL ⇩ entity 为空则删除所有 delete from user where username = ?
,这里我们先设置条件为空,查询所有。...配置日志 我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所有我们要配置日志的输出 application.yml文件添加日志配置 #配置日志 mybatis-plus: configuration...图片 自动填充 创建时间、修改时间!这两个字段操作都是自动化完成的,我们不希望手动更新!阿里巴巴开发手册:所有的数据库表都要配置上gmt_create、gmt_modified!而且需要自动化!...乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion...1、在数据表中增加一个 deleted 字段2、实体类中增加属性 @TableLogic //逻辑删除 private Integer deleted; 3、配置 // 逻辑删除组件!
,这里我们先设置条件为空,查询所有。...配置日志 我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所有我们要配置日志的输出 application.yml文件添加日志配置 #配置日志 mybatis-plus: configuration...这两个字段操作都是自动化完成的,我们不希望手动更新!阿里巴巴开发手册:所有的数据库表都要配置上gmt_create、gmt_modified!而且需要自动化!...乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion...1、在数据表中增加一个 deleted 字段2、实体类中增加属性 @TableLogic //逻辑删除 private Integer deleted; 3、配置 // 逻辑删除组件!
,这里我们先设置条件为空,查询所有。...配置日志 我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所有我们要配置日志的输出 application.yml文件添加日志配置 #配置日志 mybatis-plus: configuration...图片 自动填充 创建时间、修改时间!这两个字段操作都是自动化完成的,我们不希望手动更新!阿里巴巴开发手册:所有的数据库表都要配置上gmt_create、gmt_modified!...乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion...1、在数据表中增加一个 deleted 字段2、实体类中增加属性 @TableLogic //逻辑删除 private Integer deleted; 3、配置 // 逻辑删除组件!
前言 官网: https://baomidou.com/ 创建数据库 数据库名为mybatis_plus 创建表 创建user表 DROP TABLE IF EXISTS user; CREATE TABLE...,这里我们先设置条件为空,查询所有。 ...配置日志 我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所有我们要配置日志的输出 application.yml文件添加日志配置 #配置日志 mybatis-plus: configuration...这两个字段操作都是自动化完成的,我们不希望手动更新!阿里巴巴开发手册:所有的数据库表都要配置上gmt_create、gmt_modified!而且需要自动化!...1、在数据表中增加一个 deleted 字段2、实体类中增加属性 @TableLogic //逻辑删除 private Integer deleted; 3、配置 // 逻辑删除组件!
领取专属 10元无门槛券
手把手带您无忧上云