BeetlSql 官网: http://ibeetl.com/guide/#beetlsql

7. BeetlSQL Annotation

对于自动生成的sql,默认不需要任何annotaton,类名对应于表名(通过NameConverstion类),getter方法的属性名对应于列明(也是通过NameConverstion类),但有些情况还是需要anntation。

7.1. @AutoID 和 @AssignID ,@SeqID

  • @AutoID,作用于属性字段或者getter方法,告诉beetlsql,这是自增主键,对应于数据自增长
  • @AssignID,作用于属性字段或者getter方法,告诉beetlsql,这是程序设定
@AssignID()
public Long getId() {return id;
}

代码设定主键允许像@AssignID 传入id的生成策略以自动生成序列,beetl默认提供了一个snowflake算法,一个用于分布式环境的id生成器(https://github.com/twitter/snowflake)

@AssignID("simple")
public Long getId() {return id;
}

simple 是beetlsql提供的一个默认的snowflake实现,你可以通过sqlManager自己注册id生成器

sqlManager.addIdAutonGen("uuid2", new IDAutoGen(){@Overridepublic Object nextID(String params) {return "hi"+new Random().nextInt(10000);}
});
@AssignID("uuid2")
public Long getId() {return id;
}
  • @SeqID(name="xx_seq",作用于getter方法,告诉beetlsql,这是序列主键。

对于属性名为id的自增主键,不需要加annotation,beetlsql默认就是@AutoID

备注

  • 对于支持多种数据库的,这些annotation可以叠加在一起

7.2. @Tail

@Tail作用于类上,表示该对象是混合模型,参考下一章混合模型,sql查询无法在pojo映射的列或者结果集将使用Tail指定的方法

7.3. 忽略属性

BeetlSql提供InsertIgnore,UpdateIgnore俩个注解,作用于属性字段或者getter方法,前者用于内置插入的时候忽略,后者用于内置更新的时候忽略。

@UpdateIgnore
public Date getBir(){return  bir;
}

在beetlsql较早版本提供了ColumnIgnore, 提供insert或者update属性用来忽略

@ColumnIgnore(insert=true,update=false)
public Date getBir(){return  bir;
}

如上例子,插入的时候忽略bir属性(往往是因为数据库指定了默认值为当前时间),更新的时候不能忽略 @ColumnIgnore的insert默认是true,update是false,因此也可以直接用 @ColumnIgnore()

7.4. @EnumMapping

对于Entity使用了枚举作为属性值,可以再枚举类上定义EnumMapping,指出如何将枚举与数据库值互相转化,有四种方法

  • 如果没有使用@EnumMapping,则使用枚举的名称作为属性
  • @EnumMapping(EnumMapping.EnumType.STRING) 同上,使用枚举名称作为属性,数据库对应列应该是字符列
  • @EnumMapping(EnumMapping.EnumType.ORDINAL) 使用枚举的顺序作为属性,数据库对应列应该是int类型,用此作为映射需要防止重构枚举的时候导致数据库也重构,应该慎用
  • @EnumMapping(“xxx”),如果不是上面的的定义,则beetlsql会查找枚举类的xxx属性,用这个值作为属性,比如
@EnumMapping("value")
public enum Color {RED("RED",1),BLUE ("BLUE",2);private String name;private int value;private Color(String name, int value) {this.name = name;this.value = value;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}}

beetlsq 会获取枚举的value属性(调用getValue)来获取枚举属性值

7.5. @Table

标签 @Table(name="xxxx") 告诉beetlsql,此类对应xxxx表。比如数据库有User表,User类对应于User表,也可以创建一个UserQuery对象,也对应于User表

@Table(name="user")
public class QueryUser ..

注:可以为对象指定一个数据库shcema,如name="cms.user",此时将访问cms库(或者cms用户,对不同的数据库,称谓不一样)下的user数据表

7.6. @TableTemplate

  • @TableTemplate() 用于模板查询,如果没有任何值,将按照主键降序排,也就是order by 主键名称 desc
  • @DateTemplate(),作用于日期字段的属性字段或者getter方法,有俩个属性accept 和 compare 方法,分别表示 模板查询中,日期字段如果不为空,所在的日期范围,如
@DateTemplate(accept="minDate,maxDate",compare=">=,<")public Date getDate() {
}

在模板查询的时候,将会翻译成

@if(!isEmpty(minDate)){and date>=#minDate#
@}
@if(!isEmpty(maxDate)){and date<#maxDate#
@}

注意

minDate,maxDate 是俩个额外的变量,需要定义到pojo类里,DateTemplate也可以有默认值,如果@DateTemplate(),相当于@DateTemplate(accept="min日期字段,max日期字段",compare=">=,<")

7.7. Mapper相关注解

Mapper 是将sql模板文件映射成一个具体的Dao方法类,这样方位代码开发和维护

Mapper中的注解,包括常用的 SqlStatement ,SqlStatementType ,Sql,Param 还有不常用的 RowSize ,RowStart,具体参考Mapper

7.8. ORMQuery

beetlsql 支持在实体类上增加ORMQuery注解,这样对于实体的查询,会触发懒加载,从而实现ORM 查询功能,具体参考ORM 查询一章

7.9. @Version

注解@Version作用在类型为int,long的属性或者getter方法上,用于乐观锁实现。

public class Credit   implements Serializable{private Integer id ;private Integer balance ;@Versionprivate Integer version ;

当调用内置的updateById,或者updateTemlateById的时候,被@Version注解的字段将作为where条件的一部分

┏━━━━━ Debug [credit._gen_updateTemplateById] ━━━
┣ SQL:     update `credit` set `balance`=?, `version`=`version`+1 where `id` = ? and `version` = ?
┣ 参数:     [15, 1, 5]
┣ 位置:     org.beetl.sql.test.QuickTest.main(QuickTest.java:38)
┣ 时间:     4ms
┣ 更新:     [1]
┗━━━━━ Debug [credit._gen_updateTemplateById] ━━━

BeetlSQL 也支持悲观锁实现,即采用select for update 方式,只要调用SQLManager.lock(Class cls,Object key)就可以对cls对应的的表的主键为key的记录使用行锁。只有事务结束后才,才释放此锁

BeetlSQL 注解相关推荐

  1. Spring Boot + BeetlSQL + H2数据库项目整合

    Spring Boot + BeetlSQL + H2数据库项目整合 这个项目是一个大佬给的,目的是看我的自学能力和基础知识的牢固程度,要求如下: 底层架构采用springboot 前端技术使用lay ...

  2. beetlsql报错“请指定Sql类型“的解决方案

    解决 beetlsql使用dao自定义SQL语句时,有些情况下会报错"请指定Sql类型",这时需要在dao方法上加上@SqlStatement注解. 例如: @SqlResourc ...

  3. (六)关于beetlsql版本(分支)的说明

    2019独角兽企业重金招聘Python工程师标准>>> beetlsql也是一个功能强大的dao工具,很久之前看到了,就想替换一下mybatis,试试想要的功能. 基本上,mybat ...

  4. BeetlSQL框架学习(一)——初识BeetlSQL,特点,内置sql的使用,Pojo代码生成等...

    学习BeetlSQL总结(1) 一.BeetlSQL特点: 1.开发效率: (1)无需注解,能自动使用大量的内置sql,快速完成增,删,改,查的功能 (2)数据模型支持Pojo,也支持Map/List ...

  5. BeetlSql简介及举例

    本文参考BeetlSql官方网站,官网网站请点击这里~ BeetSql是一个全功能DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求 ...

  6. BeetlSQL简单使用

    官网地址: BeetlSQL3 官方使用手册 · 看云 项目演示使用maven工程,新建一个Maven工程,直接引用如下库 <dependency><groupId>com.i ...

  7. SpringBoot-整合Beetlsql

    beetlsql 优点 开发效率 无需注解,自动使用大量内置SQL,轻易完成增删改查功能,节省50%的开发工作量 数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型 SQL 模板 ...

  8. beetlsql使用总结

    beetlsql使用总结 一.使用 第一次听说这个框架,是学长介绍的,也是学长说在另一个项目中他所使用的ORM框架,他说这个是国人写的,了解下,后面可以选择下使用这个框架. 然后开发项目的时候,因为开 ...

  9. springboot集成beetlsql支持多数据源源码

    之前写过beetlsql的使用,有人留言要源码,本篇把springboot集成beetlsql的多数据源码列出.前文如下: springboot集成beetlsql以及支持多数据源_wuyang199 ...

  10. Beetlsql的笔记

    转载自 Beetlsql自学笔记_我"爱"java的博客-CSDN博客_beetlsql 自用为主,beetlsql是现在实习公司里用的,官网的文档有点乱..然后找到了个比较好的文 ...

最新文章

  1. 数据库的设计经验(经典)
  2. 六周第四次课(1月18日)
  3. 使用Spinner和setDropDownViewResource
  4. oracle日记账单据编号未生成_商管财务数据平台Oracle与共享未付池差异如何核对、解决?...
  5. kcbzps oracle_Oracle 11g DRCP配置与使用(上)
  6. Elasticsearch 7.x 最详细安装及配置
  7. C语言学习笔记-1(资料:郝斌老师C语言视频)
  8. 有时更贵的ADC是最划算的
  9. BT5 autoscan genlist ADMsnmp snmpcheck使用
  10. 三维模型重建(1):关于三维模型重建的一些简介
  11. 抖音知识付费有哪些玩法;怎么快速引流变现;丨国仁网络资讯
  12. marked is not a function问题解决
  13. Python道路之——画自己名字
  14. 数据可视化?不如用最经典的工具画最酷炫的图(EXCEL/PPT)
  15. 一些好用的APP推荐给你
  16. 数字经济绿色创新匹配:全国3169公司数字金融企业绿色专利匹配数据 2011-2019年
  17. Missing instance name in instantiation of '*'.
  18. linux下查看opencv安装路径以及版本号;多个opencv管理
  19. Hyper-v复制容灾配置的四只拦路虎
  20. 汽车租赁系统(对象+集合)

热门文章

  1. (五)可重入锁ReentrantLock的底层原理实现?
  2. 前端cookie 放到请求头_ajax请求头cookie问题
  3. 怎样自学unity是效率最高的
  4. Java实现文本加密
  5. 基于Renascence架构的SQL查询引擎设计
  6. 8芯网线中哪几根是有用的?
  7. ERP和SAP是什么意思
  8. JavaScript函数创建表格
  9. 笔记本输字母p出现仅计算机,电脑打不了字只有字母怎么办?最简单的解决方法...
  10. 最简单开启三星a6sUSB调试模式的方法