DBTea,对JDBC做了必要的封装

DBTea

该库优点

解决JDBC用起来不方便的问题,除此之外避免过度设计,从而保持代码简单易拓展。
备注,提供的功能是JDBC的子集(只提供了认为常用的方法)。

该插件支持的 java 版本

java1.6+(包括1.6)

编译代码

编译代码
mvn -DskipTests install

执行测试(部分测试用例需要连到数据库)
mvn test
备注:dbtea-mysql.properties数据库连接参数、dbtea-mysql.sql初始数据

示例代码

// 设置数据库参数
DefaultSupport support = new DefaultSupport(driver, url, user, password);
// 设置分页的实现,默认是MySql分页,可以自己实现Dialect
//support.setDialect(new MySqlDialect());
// 设置DB的实现
DB.setSupport(support);

// 数据库操作
...

// 不使用数据库连接后需要手动关闭(DefaultSupport实现是把数据库连接绑定到线程上)
DB.free();

保存

// 例1(不获取自增主键)
// 要保存的记录
Entity entity = new Entity();
entity.setString("name", "小美");
entity.setString("gender", "F");
entity.setInt("age", 9);
// 保存记录
DB.save("user", entity);
// 提交事务
DB.commit();

// 例2(获取自增主键)
// 要保存的记录
Entity entity = new Entity();
entity.setString("name", "小美");
entity.setString("gender", "F");
entity.setInt("age", 9);
// 保存记录
Keys keys = DB.save("user", entity, new String[] { "id" });
// 提交事务
DB.commit();
// 获取自增主键
int id = keys.getInt(1);

更新

// 要更新的列
Entity entity = new Entity();
entity.setInt("age", 11);
// 要更新的记录
Where where = new Where("name = ?");
where.nextString("小美");
// 更新记录
DB.update("user", entity, where);
// 提交事务
DB.commit();

删除

// 要删除的记录
Where where = new Where("name = ?");
where.nextString("小美");
// 删除记录
DB.delete("user", where);
// 提交事务
DB.commit();

查询

Query query = new Query("user");
// 查询的列
query.select(new Selection("name", "gender", "age"));
// 查询条件
Where where = new Where("gender = ?");
where.nextString("F");
query.filter(where);
// 排序
query.asc("age");
// 查询记录
Cursor cursor = DB.query(query);
// 分页查询
//Cursor cursor = DB.query(query, 0, 10);
// 转换
List<User> userList = cursor.list(new Mapper() {
  @Override
  public Object map(Cursor cursor) {
    User user = new User();
    user.setName(cursor.nextString());
    user.setGender(cursor.nextString());
    user.setAge(cursor.nextInt());
    return user;
  }
});

事务

// 提交事务
DB.commit();

// 回滚事务
DB.rollback();

// 支持事务传播
DB.tran(new Tran() {
  @Override
  public void exce() {
    ...
  }
});

// 支持事务传播(使用java8的语法)
DB.tran(() -> {
  ...
});

推荐使用模板(复用代码)

定义模板
public class TUser {
  /** 表名 */
  public static final String tUser = "user";
  /** 姓名列 */
  public static final String pName = "name";
  /** 性别列 */
  public static final String pGender = "gender";
  /** 年龄列 */
  public static final String pAge = "age";

  /**
   * 返回查询的字段
   * 
   * @return 查询的字段
   */
  public static Selection selectUser() {
    Selection selection = new Selection();
    selection.append(pName, pGender, pAge);
    return selection;
  }

  /**
   * 返回根据姓名检索的条件
   * 
   * @param name 姓名
   * @return 条件
   */
  public static Where byName(String name) {
    Where where = new Where();
    where.append("name = ?");
    where.nextString(name);
    return where;
  }

  /**
   * 转换结果集
   * 
   * @param cursor
   * @return 转换后的对象
   */
  public static Object toUser(Cursor cursor) {
    User user = new User();
    user.setName(cursor.nextString());
    user.setGender(cursor.nextString());
    user.setAge(cursor.nextInt());
    return user;
  }
}



使用模板
Query query = new Query(TUser.tUser);
query.select(TUser.selectUser());
query.asc("age");

Cursor cursor = DB.query(query);
List<User> userList = cursor.list(new Mapper() {
  @Override
  public Object map(Cursor cursor) {
    return TUser.toUser(cursor);
  }
});

使用模板(使用java8的语法)
Query query = new Query(TUser.tUser);
query.select(TUser.selectUser());
query.asc("age");

Cursor cursor = DB.query(query);
List<User> userList = cursor.list(TUser::toUser);

说明该插件各个类是干嘛用的

---- dialect
  |---- Dialect 分页接口
  |---- MySqlDialect MySql分页
---- entity
  |---- Entity 保存、更新时用作参数
  |---- Selection 代表查询的字段
  |---- Where 代表where条件
---- exception
  |---- DbException
---- function
  |---- Keys 主键,有自增字段保存的返回值
  |---- Tran 事务,DB.tran的参数
---- query
  |---- Mapper 转换器,Cursor.one、Cursor.list的参数
  |---- Cursor 游标
  |---- Order 排序
  |---- Query 查询对象
---- support
  |---- Support DB的实现接口
  |---- AbstractSupport 封装Support的基本实现(核心代码)
  |---- DefaultSupport Support的默认实现
---- DB 提供数据库操作的方法

转载于:https://my.oschina.net/u/3485333/blog/3036440

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值