本文參考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
<!-- https://mvnrepository.com/artifact/com.ibeetl/beetlsql -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetlsql</artifactId>
<version>2.12.12.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.ibeetl/beetl -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<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代碼。