不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2021-07-27 17:32:38  修改时间:2024-03-27 09:39:33  分类:Java框架/系统  编辑

 本文参考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