介绍一下国产框架nutz
除了高大上的明星,spring hibrnate,在javaeye,csdn经常见到许多号称短小精悍(相比spring)简单的框架
Jfinal,我们现在这个bbs是用Jfinal做的,Jfinal号称在oschina上年度最活跃的项目,这次不介绍。
nutz,跟Jfinal有些类似
都号称自己:轻,简单,强大,快速
Jfinal,我们现在这个bbs是用Jfinal做的,Jfinal号称在oschina上年度最活跃的项目,这次不介绍。
nutz,跟Jfinal有些类似
都号称自己:轻,简单,强大,快速
选择nutz的原因是:1、它的文档写的很好,很全面,让人一看就明白
2、它那测试覆盖率的图,让人看着踏实
2、它那测试覆盖率的图,让人看着踏实
开始一个简单的web项目来说认识nutz
1、添加jar
1、添加jar
<dependency><groupId>org.nutz</groupId><artifactId>nutz</artifactId><version>1.b.52</version></dependency>
2、nutz没有像spring那样的xml配置文件,它的配置文件都以json格式保存在js文件中(刚开始是有点不适应)
像所有框架一下,首先在web.xml中配置一个入口,一个过滤器,用来加载nutz
像所有框架一下,首先在web.xml中配置一个入口,一个过滤器,用来加载nutz
<filter><filter-name>nutz</filter-name><filter-class>com.capinfo.zlzy.examapp.mvc.ExamappNutFilter</filter-class><init-param><param-name>modules</param-name><param-value>com.capinfo.zlzy.examapp.MainModule</param-value></init-param></filter>
MainModule就像这样,用来指定配置文件,要扫描的包,事物拦截器,统一的错误页面,入口类,默认视图
其中MainSetup中有个init方法,用来初始化一些数据,比如可以像hibernate那样根据pojo初始化数据库表
其中MainSetup中有个init方法,用来初始化一些数据,比如可以像hibernate那样根据pojo初始化数据库表
Daos.createTablesInPackage(dao, "com.capinfo.zlzy.examapp", false);
根据制定的sql文件初始化数据
FileSqlManager fm = new FileSqlManager("init_system_mysql.sql");
@SetupBy(value=MainSetup.class)@Modules(scanPackage=true)//ComboIocProvider的args参数, 星号开头的是类名或内置缩写,剩余的是各加载器的参数// *js 是JsonIocLoader,负责加载js/json结尾的ioc配置文件// *anno 是AnnotationIocLoader,负责处理注解式Ioc, 例如@IocBean//*tx 是TransIocLoader,负责加载内置的事务拦截器定义, 1.b.52开始自带@IocBy(type=ComboIocProvider.class, args={"*js", "ioc/","*anno", "com.capinfo.zlzy.examapp","*tx"})@ChainBy(args="mvc/examapp-mvc-chain.js")@Ok("json:full")@Fail("jsp:views.error.500")public class MainModule {}
3、初始化工作做好后,现在从DAO开始
为Dao配置数据源,新建一个dao.js放在resource下
为Dao配置数据源,新建一个dao.js放在resource下
var ioc = {dataSource : {type : "com.alibaba.druid.pool.DruidDataSource",events : {create : "init",depose : 'close'},fields : {url : "jdbc:mysql://127.0.0.1:3306/test",username : "root",password : "root",testWhileIdle : true,validationQuery : "select 1" ,maxActive : 100}},dao : {type : "org.nutz.dao.impl.NutDao",args : [{refer:"dataSource"}]}};
建立pojo类,跟hibernate一样,基于注解配置表名,字段名,字段长度
@Table("t_acct_user")public class UserGeneralInfo {/*** 会员标识*/@Id@Column("id")private Integer id;/*** 用户名*/@Column("login_name")private String loginName;/*** 密码*/@Column("password")@ColDefine(width=128)private String password;...................................
OK,这样,在项目启动时就会在数据库创建这个t_acct_user表
4、现在可以写Action了,跟springmvc很像,只是人家叫Module,管它Action,Controller,Module 就是个类名儿
//就像@RequestMapping,制定url前缀@At("/manager")@IocBean // 声明为Ioc容器中的一个Bean 就像 @Controllerpublic class UserModule {//注入service@Injectprotected UserService userService;//就像@RequestMapping,制定url前缀@At({"/user"})//执行GET方式@GET//制定方法返回后,访问的页面,含义是返回jsp视图,路径是views/user.jsp@Ok("jsp:views.user")public void main() {}/*** 修改密码* @param oldpassword* @param password* @param password2* @param me* @return*///就像@RequestMapping,制定url前缀,未指定name,取方法名//方法返回值可以是任意类型,nutz会将返回值放在一个key为obj的map中,就像model.addAttribute("obj",Object);//@Param标识从页面传过来的值,这个注解不写也可以//@Attr("me")UserGeneralInfo me 是去登录用户的session//未指定@Ok,默认是返回json视图(MainModule中指定的)@Atpublic Object updatepwd(@Param("oldpassword")String oldpassword, @Param("password")String password,@Param("password2")String password2,@Attr("me")UserGeneralInfo me) {if (Strings.isBlank(password) || password.length() < 6)return new NutMap().setv("ok", false).setv("msg", "密码不符合要求");if (!password.equals(password2))return new NutMap().setv("ok", false).setv("msg", "两次密码输入不一致");if(!(new Sha256Hash(oldpassword, me.getSalt()).toHex().equals(me.getPassword())))return new NutMap().setv("ok", false).setv("msg", "旧密码输入不正确");userService.updatePassword(me.getId(), password);return new NutMap().setv("ok", true);}}
5、这样配个页面,就可以实现修改密码功能了
用它确认减少了工作量
1、没有复杂的xml配置文件
2、mvc像springmvc一样好用
3、dao有很多便捷的方法:
比如:
1、取PersonInfo一条记录,只查询制定的字段,sql会执行select id,usedTime from person_info where id = ?
用它确认减少了工作量
1、没有复杂的xml配置文件
2、mvc像springmvc一样好用
3、dao有很多便捷的方法:
比如:
1、取PersonInfo一条记录,只查询制定的字段,sql会执行select id,usedTime from person_info where id = ?
PersonInfo personInfo = Daos.ext(dao, FieldFilter.create(PersonInfo.class, "^id|usedTime")).fetch(PersonInfo.class,id);
2、只更新制定的字段,sql会执行update person_info set usedTime = ? where id = ?
Daos.ext(dao, FieldFilter.create(PersonInfo.class, "usedTime")).update(personInfo);
3、按条件查询并排序,sql会执行select * from person_info where person_id = ? order by q_id asc;
PersonInfo personInfoList = dao.query(PersonInfo.class,
Cnd.NEW().where("person_id","=",me.getId())
.orderBy("q_id","asc"));
6、其它,像集成log4j,集成shiro,集成redis,官方都有手把手说明,感兴趣的同学可以去看看
用它的确可以事半功倍的快速建立一个项目并实现功能
用它的确可以事半功倍的快速建立一个项目并实现功能