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();

保存java

// 例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);

更新mysql

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

刪除sql

// 要刪除的記錄
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;
  }
});

事務app

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

// 回滾事務
DB.rollback();

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

// 支持事務傳播(使用java8的語法)
DB.tran(() -> {
  ...
});

推薦使用模板(複用代碼)ide

定義模板
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 提供數據庫操做的方法
相關文章
相關標籤/搜索