解決JDBC用起來不方便的問題,除此以外避免過分設計,從而保持代碼簡單易拓展。 備註,提供的功能是JDBC的子集(只提供了認爲經常使用的方法)。
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 提供數據庫操做的方法