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"}]
}
};