开发效率
维护性
* 内置支持主从数据库支持的开源工具
* 支持跨数据库平台,开发者所需工作减少到最小,目前跨数据库支持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配置类
SimpleDataSourceConfig
类里配置的数据源,命名为ds1beetlsql.sqlManager1.ds
配置了关联的数据源ds1SimpleDataSourceConfig定义如下,会配置一个叫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#
-- @ }