beetlSQL超过MyBatis的全功能Java DAO工具。BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。
功能 | 说明 |
---|---|
开发效率高 | 无需注解,自动使用大量内置SQL,轻易完成增删改查功能,节省50%的开发工作量。 数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型。 SQL 模板基于Beetl实现,更容易写和调试,以及扩展。 可以针对单个表(或者视图)代码生成pojo类和sql模版,甚至是整个数据库。能减少代码编写工作量 |
易于维护 | SQL 以更简洁的方式,Markdown方式集中管理,同时方便程序开发和数据库SQL调试。可以自动将sql文件映射为dao接口类。灵活直观的支持支持一对一,一对多,多对多关系映射而不引入复杂的OR Mapping概念和技术。具备Interceptor功能,可以调试,性能诊断SQL,以及扩展其他功能 |
支持主从数据库 | 内置支持主从数据库支持的开源工具 |
支持跨数据库平台 | 开发者所需工作减少到最小,目前跨数据库支持mysql,postgres,oracle,sqlserver,h2,sqllite,DB2. |
由于现在大部分都已经通过maven来管理项目,本篇我们则5分钟搭建一个小项目,来体验一下beetlSQL。
1、maven依赖(beetlSQL以及mysql)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <dependency> <groupid>com.ibeetl</groupid> beetlsql</artifactid> <version>2.10.2</version> </dependency> <dependency> <groupid>com.ibeetl</groupid> beetl</artifactid> <version>2.7.26</version> </dependency> <dependency> <groupid>mysql</groupid> mysql-connector-java</artifactid> <version>5.1.32</version> </dependency> |
2、创建一个Pojo类,与数据库对应
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * @Author:XXX * @Description: * @ Date : Create in 16:01 2018/1/22 */ public class User extends TailBean{ private Integer id ; private Integer age ; /** * 用户角色 */ private Integer roleId ; private String name ; /** * 用户名称 */ private String userName ; private Date createDate ; |
3、代码实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | public static void connectionBeet(String driver, String url, String userName, String password ) { ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, userName, password ); DBStyle mysql = new MySqlStyle(); // sql语句放在classpagth的/sql 目录下 SQLLoader loader = new ClasspathLoader( "/sql" ); // 数据库命名跟java命名一样,所以采用DefaultNameConversion,还有一个是UnderlinedNameConversion,下划线风格的, UnderlinedNameConversion nc = new UnderlinedNameConversion(); //创建一个SQLManager,DebugInterceptor (非必须),但可以通过它查看sql执行情况 SQLManager sqlManager = new SQLManager(mysql, loader, source, nc, new Interceptor[]{new DebugInterceptor()}); //插入一条记录,主键ID自增 /*User user=new User(); user.setAge(19); user.setName("haha"); sqlManager.insertTemplate(user);*/ //根据主键查询唯一记录 /*int id=2; user=sqlManager.unique(User.class,id);*/ //根据主键更新,属性为 null 的不会更新 /*User newUser=new User(); newUser.setId(1); newUser.setAge(18); sqlManager.updateTemplateById(newUser);*/ //根据字段值查询列表 /*User queryUser = new User(); queryUser.setAge(19); List<user> users = sqlManager.template(queryUser); System.out.println(users.size());*/ //使用.md文件实现功能(详情 User .md文件) User queryUser2=new User (); queryUser2.setAge(19); List< user > users=sqlManager. select ( "user.select" , User .class,queryUser2); System. out .println(users. size ()); }</ user ></ user > |
1 2 3 4 5 6 7 | public static void main(String[] args) { String driver = "com.mysql.jdbc.Driver" ; String userName = "root" ; String password = "XXX" ; connectionBeet(driver, url, userName, password ); } |
使用beetlSQL,我们可以简写好多SQL语句,比如上述实例中的实践,除了md文件实践以外,其他的都是自动生成SQL,很好用的api,可以直接查询官方文档使用。
对于.md文件的,如下:
1 2 3 4 5 6 7 8 9 | select === select * from user where 1=1 @if(!isEmpty(age)){ and age=#age# @} @if(!isEmpty( name )){ and name =# name # @} |
需求为:根据年龄和名字查询信息,如果不为空的话。
1. ===上面试sql语句的唯一标示,下边则是sql语句实现;
2. @和回车符都是定界符号;
3. #是占位符,两个#合成,会生成一个?号
4. isEmpty是beetl的一个函数,用来判断变量是否为空或者是否不存在.
5. 文件名约定为类名,但是和普通类名规范不同的是首字母小写。
这里要注意的一点是:主键需要通过注解来说明,如@AutoID,或者@AssignID等,但如果是自增主键,且属性是名字是id,则不需要注解,自动认为是自增主键。如果属性值为ID的话,则可以直接忽略。
4、常用定界符号
事先说明,一些定位符号的使用是可以自定义设计的,本篇,小编则主要说几个常用的符号。
表达式 | 举例 |
---|---|
模糊查询 | select * from user where name like #’%’+name+’%’# |
逻辑表达式 | user.gender==1?’女’:’男’# 支持 逻辑与,或,非,以及三元表达式 |
来源:CSDN
作者:落笔千章,难诉衷肠
链接:https://blog.csdn.net/qq_33203670/article/details/79588425