SpringBoot-整合Beetlsql
·
beetlsql 优点
-
开发效率
- 无需注解,自动使用大量内置SQL,轻易完成增删改查功能,节省50%的开发工作量
- 数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型
- SQL 模板基于Beetl实现,更容易写和调试,以及扩展
-
维护性
- SQL 以更简洁的方式,Markdown方式集中管理,同时方便程序开发和数据库SQL调试。
- 可以自动将sql文件映射为dao接口类
- 灵活直观的支持支持一对一,一对多,多对多关系映射而不引入复杂的OR Mapping概念和技术。
- 具备Interceptor功能,可以调试,性能诊断SQL,以及扩展其他功能
- 其他
* 内置支持主从数据库支持的开源工具* 支持跨数据库平台,开发者所需工作减少到最小,目前跨数据库支持mysql,postgres,oracle,sqlserver,h2,sqllite,DB2.
引用依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>provided</scope>
</dependency>
配置
beetlsql:
# 数据源名称
ds: ds1
# 要扫描 Mapper 的包名
basePackage: com.xxx.mapper
# 指明 mapper 类的结尾 扫描到以 Mapper 结尾的类会为其自动生成代理类 注册为 Spring 的 Bean
# 默认扫描 Mapper 结尾 可不配置。如果你不是 xxxMapper 这样以 Mapper 结尾的 则需要配置
daoSuffix: Mapper
# POJO 和数据表列的名称转换 如驼峰 userName 转换为下划线的 user_name
nameConversion: org.beetl.sql.core.UnderlinedNameConversion
# 数据库方言(这里我用的sqlserver)
dbStyle: org.beetl.sql.core.db.SqlServerStyle
# 是否是开发模式
dev: true
# 存放 sql 文件的根目录 默认就是 resources/sql/下 所以可以不配置
sqlPath: /sql
# sql 文件编码
sqlFileCharset: utf-8
datasource:
druid:
username: xxx
password: xxx
url:jdbc:sqlserver:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
Spring配置类
- datasource,这个是在
SimpleDataSourceConfig类里配置的数据源,命名为ds1 - beetlsql 配置一个名为sqlManager1的SQLManager实例,其后的配置
beetlsql.sqlManager1.ds配置了关联的数据源ds1
SimpleDataSourceConfig定义如下,会配置一个叫ds1的数据源
package com.walmart.test.Configuration;
import com.zaxxer.hikari.HikariDataSource;
import org.beetl.sql.core.SQLManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
@Configuration
public class SimpleDataSourceConfig {
@Primary
@Bean(name = "ds1")
public DataSource datasource(Environment env) {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl(env.getProperty("spring.datasource.druid.url"));
ds.setUsername(env.getProperty("spring.datasource.druid.username"));
ds.setPassword(env.getProperty("spring.datasource.druid.password"));
ds.setDriverClassName(env.getProperty("spring.datasource.druid.driver-class-name"));
return ds;
}
@Bean
public SQLManagerCustomize mySQLManagerCustomize(){
return new SQLManagerCustomize(){
@Override
public void customize(String sqlMangerName, SQLManager manager) {
//初始化sql,这里也可以对sqlManager进行修改
// DBInit.executeSqlScript(manager,"db/schema.sql");
}
};
}
}
UserMapper是一个BeetlSQL3的Mapper,我们使用BaseMapper提供的内置insert方法操作
@SqlResource("user")/*寻找sql目录配置的文件夹下的user.md文件,参考spring集成*/
public interface SimpleUserInfoMapper extends BaseMapper<UserEntity> {
List<UserEntity> findByDepartmentId(Integer template);
}
BaseMapper提供了POJO常用的CRUD方法,每个BaseMapper的接口方法都是通过@AutoMapper注解申明一个实现类,实现类调用SQLManager相关得API。 关于此实现类,可以参考BeetlSQL3官方文档
UserInfo定义如下
@Table(name="sys_user")
@Data
public class UserInfo {
@AssignID
private Integer id;
private String name;
private Integer departmentId;
}
注解 说明
AutoID 作用于属性字段或者 getter 方法 告诉 beetlsql 这是自增主键 对应于数据自增长
AssignID 作用于属性字段或者 getter 方法 告诉 beetlsql 这是程序指定主键
SeqID 作用于 getter 方法 告诉 beetlsql 这是序列主键
UserService是一个Spring的Service,简单的调用userMapper.insert
@Service
public class UserService {
@Resource
SimpleUserInfoMapper userInfoMapper;
@Autowired
SQLManager sqlManager;
public void test(){
// UserEntity single2 = sqlManager.unique(UserEntity.class,1);
UserEntity template = new UserEntity();
template.setDepartmentId(1);
List<UserEntity> list = userInfoMapper.findByDepartmentId(1);
System.out.println("list=="+list);
UserEntity single = userInfoMapper.single(1);
System.out.println("single =="+single);
}
}
user.md文件(放在src/main/resources/sql/ 目录下)
findByDepartmentId /*这里的名称对应mapper的接口*/
===
select * from sys_user where
@if(!isEmpty(template)){
department_id = #template#
-- @ }
更多推荐


所有评论(0)