QuickDAOJava ORM 框架
QuickDAO
QuickDAO 是一款簡單,易用,輕量級(jí)的java ORM框架.目前支持 Mysql, SQlite 以及 H2 數(shù)據(jù)庫.
SpringBoot環(huán)境下由于類加載器問題請(qǐng)慎用,可能會(huì)導(dǎo)致未知問題出現(xiàn)!
QuickDAO目前沒有在高并發(fā)環(huán)境下實(shí)踐過,因此對(duì)于高并發(fā)項(xiàng)目請(qǐng)慎用.本項(xiàng)目適合于中小項(xiàng)目使用,提供封裝良好的API與數(shù)據(jù)庫進(jìn)行交互,減少樣板代碼,盡可能提高開發(fā)效率!
目前QuickDAO使用Logback日志框架,DEBUG級(jí)別下會(huì)輸入執(zhí)行的SQL語句!
快速入門
1 建立實(shí)體類
//用戶類
public class User {
private long id;
private String username;
private String password;
//用戶設(shè)置表
public class UserSetting {
private long id;
private long userId;
private String setting;
private User user;
//用戶關(guān)注表
public class UserFollow {
private long id;
private long userId;
private long followerId;
private User user;
private User followUser;
2 導(dǎo)入QuickDAO
QuickDAO基于JDBC,為提高效率,默認(rèn)只支持?jǐn)?shù)據(jù)庫連接池.
- 導(dǎo)入commons-dbcp(或者其他的DataSource實(shí)現(xiàn))
<dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
2.1 使用maven
<dependency>
<groupId>cn.schoolwow</groupId>
<artifactId>QuickDAO</artifactId>
<version>2.4</version>
</dependency>
3 使用QuickDAO
QuickDAO支持自動(dòng)建表,自動(dòng)新增字段功能.當(dāng)您在Java代碼中配置好QuickDAO后無需再對(duì)數(shù)據(jù)庫做任何操作.
BasicDataSource mysqlDataSource = new BasicDataSource();
mysqlDataSource.setDriverClassName("com.mysql.jdbc.Driver");
mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/quickdao");
mysqlDataSource.setUsername("root");
mysqlDataSource.setPassword("123456");
//指定???體所在包名
cn.schoolwow.quickdao.dao.DAO dao = QuickDAO.newInstance()
.dataSource(mysqlDataSource)
.packageName("cn.schoolwow.quickdao.entity")
.build();
//之后所有的操作使用dao對(duì)象完成
3.1 簡單查詢與更新操作
//根據(jù)id查詢
User user = dao.fetch(User.class,1);
//根據(jù)屬性查詢
User user = dao.fetch(User.class,"username","quickdao");
List<User> user = dao.fetchList(User.class,"password","123456");
//保存用戶
dao.save(user);
dao.save(userList);
//刪除用戶
dao.delete(User.class,1);
dao.delete(User.class,"username","quickdao");
3.2 復(fù)雜查詢
List<User> userList = dao.query(User.class)
.addNotEmptyQuery("username")
.getList();
關(guān)于復(fù)雜查詢?cè)敿?xì)信息請(qǐng)點(diǎn)此查看
3.3 外鍵查詢
List<User> userList = dao.query(User.class)
.join(UserSetting.class,"id","userId")
.addNotEmptyQuery("setting")
.done()
.getList();
關(guān)于外鍵查詢?cè)敿?xì)信息請(qǐng)點(diǎn)此查看
3.3 分頁排序查詢
List<User> userList = dao.query(User.class)
.pageNumber(1,10)
.orderByDesc("id")
.getList();
關(guān)于分頁排序詳細(xì)信息請(qǐng)點(diǎn)此查看
3.4 建表刪表
//刪除User表
dao.drop(User.class);
//建立User表
dao.create(User.class);
詳細(xì)手冊(cè)
-
實(shí)體注解 QuickDAO有自動(dòng)建表功能,用戶可使用注解為實(shí)體類信息添加相關(guān)字段信息.同時(shí)QuickDAO能夠自動(dòng)匹配實(shí)體類和數(shù)據(jù)庫表,自動(dòng)添加新增的實(shí)體類字段信息.
-
配置信息 QuickDAO可配置是否自動(dòng)新建表,是否建立外鍵約束,忽略表和包等等.
-
事務(wù)功能 QuickDAO基于JDBC封裝了簡單的事務(wù)功能.若需使用事務(wù),請(qǐng)查詢此手冊(cè)
請(qǐng)注意: 開啟事務(wù)時(shí)只作用于調(diào)用方法的dao對(duì)象,若配置有多個(gè)dao對(duì)象,對(duì)其他dao對(duì)象無影響(也即其他dao對(duì)象不會(huì)跟著開啟事務(wù)功能)!
QuickDAO本身提供了一套較完整的JUnit測(cè)試用例,可查看ConditionTest和DAOTest.
反饋
目前QuickDAO還不成熟,還在不斷完善中.若有問題請(qǐng)?zhí)峤籌ssue,作者將第一時(shí)間跟進(jìn)并努力解決.同時(shí)歡迎熱心認(rèn)識(shí)提交PR,共同完善QuickDAO項(xiàng)目!
