Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

轻量级多实例数据库操作工具

特性

  1. 支持多数据源及动态数据源增删

  2. 轻量级无过多过重依赖

  3. 统一不同类型数据库的常规操作(比如分页、表创建等)

使用

引入Maven依赖

<dependency>
    <groupId>com.ecfront.dew</groupId>
    <artifactId>dbutils</artifactId>
    <version>3.0.0-beta</version>
</dependency>

添加配置

配置文件要求为yml格式,可在 ds 节点下添加静态的数据源配置,也可以在 dynamicDS 节点下添加动态数据源配置。

动态数据源需要指定在从哪个静态数据源下的哪条sql获取动态数据。

配置格式
ds:                         # * 静态数据源列表
  - code:                   # * 数据源编码
    url:                    # * 数据源URL
    username:               # * 数据源用户名
    password:               # * 数据源密码
    monitor:                #   是否启用连接监控,默认为false
    pool:                   #   是否自定义连接池配置
      initialSize:          #   初始连接数
      maxActive:            #   最大连接数
dynamicDS:                  #   动态配置
  enabled:                  #   是否启用动态配置,默认为false
  dsCode:                   #   动态配置关联的数据源编码
  fetchSql:                 #   获取动态配置的SQL,默认为:select code,url,username,password,monitor,pool_initialSize,pool_maxActive from multi_ds
基础配置示例
ds:
  - code: defalut
    url: jdbc:h2:mem:db
    username: sa
    password:
    monitor: true
    pool:
      initialSize: 0
      maxActive: 8
dynamicDS:
  enabled: true
  dsCode: default
  fetchSql: select code,url,username,password,monitor,pool_initialSize,pool_maxActive from multi_ds

动态数据源使用需要先创建对应的配置表,创建脚本参考如下:

create table MULTI_DS
(
    CODE VARCHAR(255) not null
    primary key,
    URL VARCHAR(255),
    USERNAME VARCHAR(255),
    PASSWORD VARCHAR(255),
    POOL_INITIALSIZE INT,
    POOL_MAXACTIVE INT,
    MONITOR INT
);

初始化

// 选择配置文件路径完成初始化
DewDBUtils.init("<配置文件路径>");

// 选择需要操作的数据库
DewDB db = DewDBUtils.use("default");

// 添加数据源(可选)
DewDBUtils.addDS(...);

// 删除数据源(可选)
DewDBUtils.removeDS(...);

使用

可用的方法
/**
 * 创建表.
 *
 * @param tableName    表名
 * @param tableDesc    表说明
 * @param fields       表字段(字段名 - 类型)
 * @param fieldsDesc   字段说明
 * @param indexFields  索引字段
 * @param uniqueFields 唯一值字段
 * @param pkField      主键字段
 */
void createTableIfNotExist(String tableName, String tableDesc,
                                      Map<String, String> fields,
                                      Map<String, String> fieldsDesc,
                                      List<String> indexFields,
                                      List<String> uniqueFields,
                                      String pkField)

/**
 * DDL操作.
 *
 * @param ddl DDL语句
 */
void ddl(String ddl)

/**
 * 获取单条记录.
 *
 * @param tableName 表名
 * @param pkField   主键字段
 * @param pkValue   主键值
 * @param clazz     对象类
 * @param <E>       对象
 * @return java对象
 */
<E> E get(String tableName, String pkField, Object pkValue, Class<E> clazz)

/**
 * 获取单个对象.
 *
 * @param sql    SQL
 * @param params 参数
 * @param clazz  对象类
 * @param <E>    对象
 * @return java对象
 */
<E> E get(String sql, Class<E> clazz, Object... params)

/**
 * 获取多个对象.
 *
 * @param sql    SQL
 * @param params 参数
 * @param clazz  对象类
 * @param <E>    对象
 * @return java对象
 */
<E> List<E> find(String sql, Class<E> clazz, Object... params)


/**
 * 获取多个对象(带分页).
 *
 * @param sql        SQL
 * @param params     参数
 * @param pageNumber 页码(从1开始)
 * @param pageSize   每页条数
 * @param clazz      对象类
 * @param <E>        对象
 * @return 多个对象(带分页)
 */
<E> Page<E> page(String sql, long pageNumber, long pageSize, Class<E> clazz, Object... params)

/**
 * 判断记录是否存在.
 *
 * @param tableName 表名
 * @param pkField   主键字段
 * @param pkValue   主键值
 * @return 是否存在
 */
boolean exits(String tableName, String pkField, Object pkValue)

/**
 * 判断记录是否存在.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 是否存在
 */
boolean exits(String sql, Object... params)

/**
 * 获取单条记录.
 *
 * @param tableName 表名
 * @param pkField   主键字段
 * @param pkValue   主键值
 * @return 单条记录
 */
Map<String, Object> get(String tableName, String pkField, Object pkValue)

/**
 * 获取单条记录.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 单条记录
 */
Map<String, Object> get(String sql, Object... params)

/**
 * 获取多条记录.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 多条记录(带分页)
 */
List<Map<String, Object>> find(String sql, Object... params)

/**
 * 获取多条记录(带分页).
 *
 * @param sql        SQL
 * @param params     参数
 * @param pageNumber 页码(从1开始)
 * @param pageSize   每页条数
 * @return 多条记录(带分页)
 */
Page<Map<String, Object>> page(String sql, int pageNumber, int pageSize, Object... params)

/**
 * 获取记录数.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 记录数
 */
long count(String sql, Object... params)

/**
 * 添加记录.
 *
 * @param tableName 表名
 * @param values    值列表
 * @return 影响行数
 */
int insert(String tableName, Map<String, Object> values)

/**
 * 修改记录.
 *
 * @param tableName 表名
 * @param pkField   主键字段
 * @param pkValue   主键值
 * @param values    值列表
 * @return 影响行数
 */
int modify(String tableName, String pkField, Object pkValue, Map<String, Object> values)

/**
 * 更新记录.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 影响行数
 */
int update(String sql, Object... params)

/**
 * 批量更新记录.
 *
 * @param sql    SQL
 * @param params 参数
 * @return 影响行数
 */
int[] batch(String sql, Object[][] params)

/**
 * 批量更新记录.
 *
 * @param sqls SQL
 */
void batch(Map<String, Object[]> sqls)

/**
 * 删除单条记录.
 *
 * @param tableName 表名
 * @param pkField   主键字段
 * @param pkValue   主键值
 * @return 影响行数
 */
Integer delete(String tableName, String pkField, Object pkValue)

/**
 * 删除所有记录.
 *
 * @param tableName 表名
 * @return 单条记录
 */
Integer deleteAll(String tableName)

/**
 * 获取Meta信息.
 *
 * @param tableName 表名
 * @return Meta信息
 */
List<Meta> getMetaData(String tableName)

/**
 * 获取Meta信息.
 *
 * @param tableName 表名
 * @param fieldName 指定的字段名
 * @return Meta信息
 */
Meta getMetaData(String tableName, String fieldName)

/**
 * 打开事务.
 */
void open()

/**
 * 提交事务.
 */
void commit()

/**
 * 显式回滚事务.
 * <p>
 * 发生SQL错误时会自动回滚,但业务错误需要调用此方法手工回滚.
 */
void rollback()
使用示例
DewDBUtils.init(this.getClass().getResource("/").getPath() + File.separator + "config.yml");
db = DewDBUtils.use("default");
db.ddl("create table tuser(" +
                "id int not null," +
                "name varchar(255)," +
                "password varchar(255)," +
                "age int," +
                "asset decimal," +
                "enable boolean," +
                "primary key(id)" +
                ")");
db.update("insert into tuser (id,name,password,age,asset,enable) values ( ? , ? , ? , ? , ? , ? )", 1, "张三", "123", 22, 2333.22, true);
// get
Assert.assertEquals(1, db.get("select * from tuser where id = ?", 1).get("id"));
// count
Assert.assertEquals(5, db.count("select * from tuser"));
// find
Assert.assertEquals(4, db.find("select * from tuser where age = ?", 22).size());
// page
Page<Map<String, Object>> pageResult = db.page("select * from tuser", 1, 2);
Assert.assertEquals(5, pageResult.getRecordTotal());
Assert.assertEquals(3, pageResult.getPageTotal());
// get
User user = db.get("select * from tuser where id = ? ", User.class, 1);
Assert.assertEquals(1, user.getId());
// find
List<User> users = db.find("select * from tuser where age = ?", User.class, 22);
Assert.assertEquals(4, users.size());

License

Under version 2.0 of the Apache License.

About

Encapsulate dbutils, Provides dynamic multi-data source , multi-type of database , transaction , paging .

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages