BeetlSql簡介及舉例

       本文參考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代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章