Nutz框架學習相關整理
1.簡要介紹
nutz框架源碼開放可以下載它的jar包也可以下載它的源碼改成自己的,這是不同於其它框架的一點點區別,其它區別就自己去發現了這裏不解釋屬於初學也不瞭解,下面是就自己學習自我整理的一點東西,建議看nutz社區或者官方文檔。
2.官網文檔入眼相關
https://nutzam.com/ 熟悉nutz核心包 nutzwx(微信公衆號操作封裝庫)
https://nutz.cn/yvr/t/tdb5l3e7pajv1ptl1f0nveg1bk
RK_CMS 一套CMS系統
NutzWK2.0 基於Nutz的開源企業級開發框架
wzflow -- Nutzwk1.0+工作流
nutz入門簡書https://www.jianshu.com/p/8fe4132aca2c?from=groupmessage
3.代碼中的部分東西做的筆記部分:
1)主模塊 任何一個類都可以作爲主模塊,需要配置web.xml
@Modules 聲明應用的所有子模塊
@Modules({ UserModule.class, PetModule.class})
public class MainModule {}
@IocBy 設置應用所採用的Ioc容器
@SetupBy 應用啓動以及關閉時的額外處理
@Views 自定義的擴展視圖
@Localization 應用的本地化字符串設定
@Ok 成功返回路徑 和structs的成功失敗返回的那個配置類似
@Fail 失敗返回路徑
@IocBy 配置加載器,包括js配置(如數據庫配置)json加載器,註解加載器
2)數據庫表操作
dao.create(Person.class,false)//false表示該表存在不刪除(類似hibernate的 create和update配置)
dao.drop(Person.class)//刪除表
插入一條記錄返回id值
dao.insert(person)
插入記錄不返回id
dao.fastInsert(person)
插入一對多
dao.insertWith(t, "student");一方對象t多方Student的list
查一條數據
person p=dao.fetch(Person.class,"張三") @Name註解
person p=dao.fetch(Person.class,1)@Id註解
dao.update(p) 更新
dao.update(list)更新集合
//查詢全部
dao.query(Person.class, null);
//按照條件查詢
dao.query(Person.class, Cnd.where("age", ">", "18"));
//分頁查詢
Pager page = dao.createPager(2, 10);
dao.query(Person.class, Cnd.where("age", ">", "18"), page);
//刪除一條數據(一般項目中都是邏輯刪除不物理刪除,作爲學習瞭解)
dao.delete(person);//按照對象刪除
dao.delete(Person.class, 1);//按照id刪除
dao.delete(Person.class, "張三");//按照名字刪除
dao.delete(list);//刪除集合
//刪除表中所有數據
dao.clear(Person.class);
//按照條件刪除數據
dao.clear(Person.class, Cnd.where("age", ">", "18"));
3)SetUp接口 來實現其項目的初始化 比如做自動根據實體bean創建數據庫表 可從初始化中拿到ioc容器
MainMoudle 作爲 配置文件的加載點(類 註解的方式)@Modules註解
AnnotationIocLoader類 註解的加載器和 @IocBy註解結合使用的
表結構自動遷移
(之前已經創建了User表,後在User實體裏新增了屬性,新增屬性需要在數據庫中建字段則可用這波操作)
// 單個遷移
Daos.migration(dao, User.class, true, false, false); // 新增字段true,刪除字段false,檢查索引false
// 批量遷移
Daos.migration(dao, "net.wendal.nutzbook.bean", true, false, false);
攔截類註解 - @PrevInsert/@PrevUpdate@PrevDelete
與@Prev/@Next不同, 這幾個註解不涉及SQL操作,這是最大的區別!
因爲不涉及到sql操作, 所以不影響批量操作,尤其是批量插入.
先舉個例子,生成uuid,說一下兩者的區別:
@Name
@Prev(els={@EL("uuid()")} // 使用dao.fastInsert(list)會出現name爲null,因爲@Prev不執行
@PrevInsert(@EL("uuid()"} // 使用dao.fastInsert(list)依然正常,@PrevInsert會執行
private String name; // 一個字段上不要同時寫@Prev和@PrevInsert,上述示例只是爲了說明功能
@PrevUpdate(now=true) // 執行update時,自動設置爲當前時間
private Date updateTime;
上述例子中,@PrevInsert可完美替代@Prev, 實現批量插入,而且可以簡寫爲@PrevInsert(uu32=true)
4)關於配置文件properties
如何定義一個別名
一個ioc bean,通常只有一個名字, 然而,在某些場景下,需要兩個名稱均指向同一個bean.
例如nutzmore中的插件,均以conf這個名稱取PropertiesProxy的實例,而你的項目中已經定義爲config,而且改起來麻煩, 那這個時候,你就需要按下面的方式,定義一個影子bean了, 間接達到了別名的效果
var ioc = {
// 原有配置
config : {
type : "org.nutz.ioc.impl.PropertiesProxy",
fields : {
paths : ["custom/"]
}
},
// 創建別名
conf : {
type : "org.nutz.ioc.impl.PropertiesProxy"
fatcoty : "org.nutz.ioc.Iocs#self",
args : [{refer:"config"}]
}
};