Coder Social home page Coder Social logo

dew-dbutils's Introduction

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

特性

  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.

dew-dbutils's People

Contributors

gudaoxuri avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.