本文参考BeetlSql官方网站,官网网站请点击这里~
BeetSql是一个全功能DAO工具,同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。
在开发效率上,无需注解,自动使用大量内置SQL,轻易完成增删改查功能。数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型。SQL 模板基于Beetl实现,更容易写和调试,以及扩展。可以针对单个表(或者视图)代码生成pojo类和sql模版,甚至是整个数据库。能减少代码编写工作量。在维护性上,SQL 以更简洁的方式,Markdown方式集中管理,同时方便程序开发和数据库SQL调试。可以自动将sql文件映射为dao接口类。灵活直观的支持支持一对一,一对多,多对多关系映射而不引入复杂的OR Mapping概念和技术。具备Interceptor功能,可以调试,性能诊断SQL,以及扩展其他功能。下面是一个简单的例子~
一、首先配置maven
<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>2.12.12.RELEASE</version> </dependency> <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl</artifactId> <version>3.0.11.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency>
二、在数据库中建立相应的测试表,这里使用MySQL数据库
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(64) DEFAULT NULL, `age` int(4) DEFAULT NULL, `create_date` datetime NULL DEFAULT NULL, PRIMARY KEY (`id`) )
三、编写实体类,与数据库字段对应
四、写一个main方法进行测试
package com.xzw.main; import com.xzw.vo.User; import org.beetl.sql.core.*; import org.beetl.sql.core.db.DBStyle; import org.beetl.sql.core.db.MySqlStyle; import org.beetl.sql.ext.DebugInterceptor; import javax.management.Query; import java.util.List; /** * @author xzw */ public class UserMain { public static void main(String[] args) throws Exception{ String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/xzw?useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "root"; ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, username, password); DBStyle mysql = new MySqlStyle(); // sql语句放在classpath的/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()}); /*// 使用内置的生成的sql新增用户,如果需要获取主键,可以传入KeyHolder User user = new User(); user.setAge(19); user.setName("lzq"); sqlManager.insert(user);*/ /*// 使用内置的SQL查询用户 User user = new User(); int id = 1; user = sqlManager.unique(User.class, id); System.out.println("user:" + user + "info:" + user.getName() + ":" + user.getAge());*/ /*// 模板更新,仅仅根据id更新值不为null的列 User newUser = new User(); newUser.setId(1); newUser.setAge(20); sqlManager.updateTemplateById(newUser);*/ /*// 模板查询 User query = new User(); query.setName("xzw"); List<User> list = sqlManager.template(query); System.out.println(list);*/ /*// 使用user.md 文件里的select语句 User query2 = new User(); query2.setName("xzw"); List<User> list2 = sqlManager.select("user.select", User.class, query2); System.out.println(list2);*/ } }
这里需要注意的是使用user.md文件里的SQL语句进行查询,这里的user.md文件需要放在resources文件下,这个测试例子中,需要首先在resources下新建sql目录,之后再在sql目录下新建user.md文件。
关于如何写sql模板,如下是一些简单说明。
1、采用md格式,===上面是sql语句在本文件里的唯一标示,下面则是sql语句。
2、@ 和回车符号是定界符号,可以在里面写beetl语句。
3、"#" 是占位符号,生成sql语句得时候,将输出?,如果你想输出表达式值,需要用text函数,或者任何以db开头的函数,引擎则认为是直接输出文本。
4、isEmpty是beetl的一个函数,用来判断变量是否为空或者是否不存在.
5、文件名约定为类名,首字母小写。
注意:sqlId 到sql文件的映射是通过类SQLIdNameConversion来完成的,默认提供了DefaultSQLIdNameConversion实现,即 以 "." 区分最后一部分是sql片段名字,前面转为为文件相对路径,如sqlId是user.select,则select是sql片段名字,user是文件名,beetlsql会在根目录下寻找user.sql或user.md ,也会找数据库方言目录下寻找,比如如果使用了mysql数据库,则优先寻找/mysql/user.md或/mysql/user.sql 然后在找/user.md或user.sql。如果sql是 test.user.select,则会在/test/user.md(sql) 或者 /mysql/test/user.md(sql) 下寻找“select”片段。
五、代码/SQL的生成
// genPojoCodeToConsole 方法可以根据数据库表生成相应的Pojo代码,输出到控制台 sqlManager.genPojoCodeToConsole("user"); // genSQLTemplateToConsole 方法可以根据数据库表生成相应的sql代码,输出到控制台 sqlManager.genSQLTemplateToConsole("user");
调用上述两个方法会在控制台输出对应的实体类代码或者SQL代码。
参考:https://blog.csdn.net/gdkyxy2013/article/details/100746480