java map setv_在往数据库中增删改时,有用到NutMap().setv()方法,它实现的是什么?...

package com.zdwang.nutzbook.module;

import java.util.Date;

import javax.servlet.http.HttpSession;

import com.zdwang.nutzbook.bean.User;

import org.nutz.dao.Cnd;

import org.nutz.dao.Dao;

import org.nutz.dao.QueryResult;

import org.nutz.dao.pager.Pager;

import org.nutz.ioc.loader.annotation.Inject;

import org.nutz.ioc.loader.annotation.IocBean;

import org.nutz.lang.Strings;

import org.nutz.lang.util.NutMap;

import org.nutz.mvc.annotation.At;

import org.nutz.mvc.annotation.Attr;

import org.nutz.mvc.annotation.By;

import org.nutz.mvc.annotation.Fail;

import org.nutz.mvc.annotation.Filters;

import org.nutz.mvc.annotation.Ok;

import org.nutz.mvc.annotation.Param;

import org.nutz.mvc.filter.CheckSession;

@IocBean //与 @IocBy有很大关系 声明为Ioc容器中的一个Bean

@At("/user")// 整个模块的路径前缀

//@Ok("json")

@Ok("json:{locked:'password|salt',ignoreNull:true}")// 忽略password和salt属性,忽略空属性的json输出,使密码和salt不发送到浏览器去

@Fail("http:500")// 抛异常的话,走500页面

@Filters(@By(type=CheckSession.class, args={"me", "/"}))//含义是,如果当前Session没有带me这个attr(属性),就跳转到/页面,即首页.

public class UserModule {

@Inject// 此处的注入,有@IocBean,它才会生效 注入同名的一个ioc对象

protected Dao dao;

//@At//count方法, 测试用

//public int count(){

//return dao.count(User.class);

//}

@At//登录

@Filters()//覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session,所以必须为login方法设置为空的过滤器,不然就没法登陆了

public Object login(@Param("username")String name, @Param("password")String password, HttpSession session){

User user = dao.fetch(User.class, Cnd.where("name", "=", name).and("password", "=", password));

if (user == null) {

return false;

}else {

session.setAttribute("me", user.getId());

return true;

}

}

@At//登出

@Ok(">>:/")// 跟其他方法不同,这个方法完成后就跳转首页了

public void logout(HttpSession session){

session.invalidate();

}

@At//添加user

public Object add(@Param("..")User user){// 两个点号是按对象属性一一设置

NutMap re = new NutMap();

String msg = checkUser(user, true);

if (msg != null) {

return re.setv("ok", false).setv("msg", msg);

}

user.setCreateTime(new Date());

user.setUpdateTime(new Date());

user = dao.insert(user);

return re.setv("ok", true).setv("data", user);

}

@At// 修改

public Object update(@Param("..")User user){

NutMap re = new NutMap();

String msg = checkUser(user, false);

if (msg != null) {

return re.setv("ok", false).setv("msg", msg);

}

user.setName(null);// 不允许更新用户名

user.setCreateTime(null);// 不允许更新创建时间

user.setUpdateTime(new Date());// 设置正确的更新时间

dao.updateIgnoreNull(user);// 真正更新的其实只有password和salt

return re.setv("ok", true);

}

@At// 删除

public Object delete(@Param("id")int id, @Attr("me")int me) {// @Attr是取Session/Request中的me属性

if (me == id) {

return new NutMap().setv("ok", false).setv("msg", "不能删除当前用户!!");

}

dao.delete(User.class, id); // 再严谨一些的话,需要判断是否为>0

return new NutMap().setv("ok", true);

}

@At// 查询

public Object query(@Param("name")String name, @Param("..")Pager pager){

Cnd cnd = Strings.isBlank(name)?null: Cnd.where("name", "like", "%"+name+"%");

QueryResult qr = new QueryResult();

qr.setList(dao.query(User.class, cnd, pager));

pager.setRecordCount(dao.count(User.class, cnd));

qr.setPager(pager);

return qr;// 默认分页是第一页,每页20条

}

@At("/")

@Ok("jsp:jsp.user.list") // 真实路径是 /WEB-INF/jsp/user/list.jsp

public void index() {

}

//校验用户

protected String checkUser(User user, boolean create){

if(user == null){

return "空对象";

}

if (create) {

if (Strings.isBlank(user.getName())|| Strings.isBlank(user.getPassword()))

return "用户名/密码不能为空!!!";

}else {

if (Strings.isBlank(user.getPassword()))

return "密码不能为空!!!";

}

String passwd = user.getPassword().trim();

if (6 > passwd.length() || passwd.length() > 12) {

return "密码长度有误";

}

user.setPassword(passwd);

if (create) {

int count = dao.count(User.class,Cnd.where("name", "=", user.getName()));

if (count != 0) {

return "用户名已存在";

}

}else{

if (user.getId() < 1) {

return "用户ID非法";

}

}

if(user.getName() != null)

user.setName(user.getName().trim());

return null;//即最后返回null的话,是符合校验添加的

}

}

就是这里面的增删改在返回值时,用到了NutMap().setv()的方法,有点看不懂

使用说明: Setv_pnProxy是一款可以自动创建ppoe、v_pn[支持协议p p t p/l2tp/sstp/ikev2]和设置IE代理IP的小工具仅使用cmd命令行、批处理、编程方式运行本程序时添加相关参数即可即时生效带设置返回值并且不弹出连接窗口。 参数说明:参数返回:true表示设置成功[或连接成功],False表示设置失败或者已断开连接 1、代理IP功能: 设置代理IP参数示例:setproxy=127.0.0.1:80 取消代理IP参数:closeproxy 2、自动拨号功能: 设置拨号类型:settype=ppoe/v_pn 设置拨号名称:setname=宽带连接 设置拨号账号:setuser=账号 设置拨号密码:setpwd=密码 设置virtual**拨号服务器:setv_pnserver=127.0.0.1 设置virtual**拨号协议:setv_pntype=p p t p/l2tp/sstp/ikev2 断开拨号连接:closev_pn 使用示例1:如创建一个名为“宽带连接”的ppoe拨号连接并使用账号“huzi”与密码“1234”进行自动拨号 在cmd下运行Setv_pnProxy.exe settype=ppoe setname=宽带连接 setuser=huzi setpwd=1234 使用示例2:如创建一个名为“v_pn连接”的v_pn拨号连接使用p p t p协议、服务器127.0.0.1、账号huzi、密码1234进行自动拨号 在cmd下运行Setv_pnProxy.exe settype=v_pn setname=v_pn连接 setv_pntype=p p t p setv_pnserver=127.0.0.1 setuser=huzi setpwd=1234 使用示例3:如仅使用现有的名为“v_pn连接”、账号huzi、密码1234进行自动拨号 在cmd下运行Setv_pnProxy.exe /d setname=v_pn连接 setuser=huzi setpwd=1234
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值