monalisa-ormORM軟件
monalisa-orm 的主要特點(diǎn):
- 一行代碼使用數(shù)據(jù)庫(kù)
- SQL代碼自動(dòng)生成DTOs
- 支持書(shū)寫(xiě)多行語(yǔ)法
- 支持對(duì)象存儲(chǔ)
- 支持分表分庫(kù)
- 支持HTTP訪問(wèn)數(shù)據(jù)庫(kù)
- 動(dòng)態(tài)加載SQL代碼
更多用法參考:https://github.com/11039850/monalisa-orm/wiki
一行代碼引入數(shù)據(jù)庫(kù):
@DB(url="jdbc:mysql://127.0.0.1:3306/test" ,username="root", password="root")
SQL代碼自動(dòng)生成DTOs:
/**
* 數(shù)據(jù)訪問(wèn)類
*/
public class UserBlogDao {
final static long $VERSION$= 18L; //!!! 版本號(hào), 每次保存為自動(dòng) +1
//@Select 注解指示該方法需自動(dòng)生成結(jié)果類
//默認(rèn)類名: Result + 方法名, 默認(rèn)包名:數(shù)據(jù)訪問(wèn)類的包名+"."+數(shù)據(jù)訪問(wèn)類的名稱(小寫(xiě))
//可選參數(shù):name 指定生成結(jié)果類的名稱
@Select(name="test.result.UserBlogs")
//!!! 保存后會(huì)自動(dòng)修改該函數(shù)的返回值為: List -> List
//第一次編寫(xiě)時(shí),由于結(jié)果類還不存在, 為了保證能夠編譯正常,
//函數(shù)的返回值 和 查詢結(jié)果要用 泛值 替代, 保存后,插件會(huì)自動(dòng)修改.
//函數(shù)的返回值 和 查詢結(jié)果 泛值的對(duì)應(yīng)關(guān)系分三類如下:
//1. List查詢
//public DataTable method_name(...){... return Query.getList(); } 或
//public List method_name(...){... return Query.getList(); }
//
//2. Page查詢
//public Page method_name(...){... return Query.Page(); }
//
//3. 單條記錄
//public Object method_name(...){... return Query.getResult(); }
//
public List selectUserBlogs(int user_id){
Query q=TestDB.DB.createQuery();
q.add(""/**~{
SELECT a.id,a.name,b.title, b.content,b.create_time
FROM user a, blog b
WHERE a.id=b.user_id AND a.id=?
}*/, user_id);
//!!! 保存后會(huì)自動(dòng)修改 查詢結(jié)果為: getList() -> getList
return q.getList();
}
@Select //自動(dòng)產(chǎn)生結(jié)果類: test.dao.userblogdao.ResultSelectUserBlogsOne
public Object selectUserBlogsOne(int user_id){
Query q=TestDB.DB.createQuery();
q.add(""/**~{
SELECT a.id,a.name,b.title, b.content,b.create_time
FROM user a, blog b
WHERE a.id=b.user_id AND a.id=?
}*/, user_id);
return q.getResult();
}
}
一些基本的數(shù)據(jù)庫(kù)操作:
//insert
new User().setName("zzg.zhou").setStatus(1).save();
//parse data from type: Map, json/xml string, JsonObject(Gson)
//, HttpServletRequest, JavaBean
new User().parse("{'name':'oschina','status':0}").save();
new User().parse(" china011 ").save();
//select
User.SELECT().selectByPrimaryKey(1);
//SQL: SELECT * FROM `user` WHERE `name` = 'zzg.zhou'
User.SELECT().selectOne("name=?", "zzg.zhou");
//SQL: SELECT `name`, `status` FROM `user`
User.SELECT().include("name","status").select();
Page page=User.WHERE().name.like("zzg%").status.in(1,2,3)
.SELECT().selectPage(10,0);
System.out.println(page.getTotalRow());
//SQL: SELECT * FROM `user` WHERE `name` like 'zzg%' AND `status` IN(0, 1)
for(User x:User.WHERE().name.like("zzg%").status.in(0, 1).SELECT().select()){
System.out.println(x);
}
//SQL: SELECT * FROM `user` WHERE (`name` like 'zzg%' AND `status` >= 0)
// OR (`name` = 'zzg' AND `status` > 1)
// ORDER BY `status` ASC
for(User x:User.WHERE()
.name.like("zzg%").status.ge(0)
.OR()
.name.eq("zzg").status.gt(1)
.status.asc()
.SELECT().select()){ //SELECT / delete / update
System.out.println(x);
}
//general query
TestDB.DB.select("SELECT * FROM user WHERE name like ?","zzg%");
TestDB.DB.createQuery().add("SELECT * FROM user WHERE name like ?","zzg%")
.getList(User.class);
Query q=new Query(TestDB.DB);
DataTable rs=q.add("SELECT * FROM user WHERE name like ?","zzg%")
.add(" AND status ").in(1,2,3)
.getList();
for(User x:rs.as(User.class)){
System.out.println(x);
}
//DataTable query
//SQL: SELECT name, count(*) as cnt FROM _THIS_TABLE
// WHERE status>=0 GROUP BY name ORDER BY name ASC
DataTable newTable=
rs.select("name, count(*) as cnt","status>=0","name ASC","GROUP BY name");
//update
User user=User.SELECT().selectOne("name=?", "zzg.zhou");
user.setStatus(3).update();
User updateTo=new User().setName("tsc9526");
User.WHERE().name.like("zzg%").update(updateTo);
//transaction
Tx.execute(new Tx.Atom() {
public int execute() {
new User().setName("name001").setStatus(1).save();
new User().setName("name002").setStatus(2).save();
//... other database operation
return 0;
}
});
//Dynamic model: Record
Record r=new Record("user").use(TestDB.DB);
r.set("name", "jjyy").set("status",1)
.save();
//SQL: SELECT * FROM `user` WHERE (`name` like 'jjyy%' AND `status` >= 0)
// OR (`name` = 'zzg' AND `status` > 1)
// ORDER BY `status` ASC
for(Record x:r.WHERE()
.field("name").like("jjyy%").field("status").ge(0)
.OR()
.field("name").eq("zzg").field("status").gt(1)
.field("status").asc()
.SELECT().select()){
System.out.println(x);
}
//SQL: DELETE FROM `user` WHERE `name` like 'jjyy%' AND `status` >= 0
r.WHERE()
.field("name").like("jjyy%").field("status").ge(0)
.delete();
//delete
user.delete();
//SQL: DELETE FROM `user` WHERE `name`='china01'
User.WHERE().name.eq("china01").delete();
//User.DELETE().deleteAll();
支持Java多行字符串編輯:(插件下載)
評(píng)論
圖片
表情
