解决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 提供数据库操做的方法