UserProfile增删改查方法

Pojo建好,那我们弄个模块吧, 新建一个类UserProfileModule, 包为net.wendal.nutzbook.module

  1. package net.wendal.nutzbook.module;
  2. import java.util.Date;
  3. import net.wendal.nutzbook.bean.UserProfile;
  4. import org.nutz.dao.FieldFilter;
  5. import org.nutz.dao.util.Daos;
  6. import org.nutz.ioc.loader.annotation.IocBean;
  7. import org.nutz.mvc.Scope;
  8. import org.nutz.mvc.adaptor.JsonAdaptor;
  9. import org.nutz.mvc.annotation.AdaptBy;
  10. import org.nutz.mvc.annotation.At;
  11. import org.nutz.mvc.annotation.Attr;
  12. import org.nutz.mvc.annotation.By;
  13. import org.nutz.mvc.annotation.Filters;
  14. import org.nutz.mvc.annotation.Ok;
  15. import org.nutz.mvc.annotation.Param;
  16. import org.nutz.mvc.filter.CheckSession;
  17. @IocBean
  18. @At("/user/profile")
  19. @Filters(@By(type=CheckSession.class, args={"me", "/"})) // 检查当前Session是否带me这个属性
  20. public class UserProfileModule extends BaseModule {
  21. @At
  22. public UserProfile get(@Attr(scope=Scope.SESSION, value="me")int userId) {
  23. UserProfile profile = Daos.ext(dao, FieldFilter.locked(UserProfile.class, "avatar")).fetch(UserProfile.class, userId);
  24. if (profile == null) {
  25. profile = new UserProfile();
  26. profile.setUserId(userId);
  27. profile.setCreateTime(new Date());
  28. profile.setUpdateTime(new Date());
  29. dao.insert(profile);
  30. }
  31. return profile;
  32. }
  33. @At
  34. @AdaptBy(type=JsonAdaptor.class)
  35. @Ok("void")
  36. public void update(@Param("..")UserProfile profile, @Attr(scope=Scope.SESSION, value="me")int userId) {
  37. if (profile == null)
  38. return;
  39. profile.setUserId(userId);//修正userId,防止恶意修改其他用户的信息
  40. profile.setUpdateTime(new Date());
  41. profile.setAvatar(null); // 不准通过这个方法更新
  42. UserProfile old = get(userId);
  43. // 检查email相关的更新
  44. if (old.getEmail() == null) {
  45. // 老的邮箱为null,所以新的肯定是未check的状态
  46. profile.setEmailChecked(false);
  47. } else {
  48. if (profile.getEmail() == null) {
  49. profile.setEmail(old.getEmail());
  50. profile.setEmailChecked(old.isEmailChecked());
  51. } else if (!profile.getEmail().equals(old.getEmail())) {
  52. // 设置新邮箱,果断设置为未检查状态
  53. profile.setEmailChecked(false);
  54. } else {
  55. profile.setEmailChecked(old.isEmailChecked());
  56. }
  57. }
  58. Daos.ext(dao, FieldFilter.create(UserProfile.class, null, "avatar", true)).update(profile);
  59. }
  60. }

可以看到,事实上只有取和更新的操作, 删除和新建(主动新建)是不实现的. 同时,这里用到了JsonAdaptor,所以前端发送过来的内容需要是个json了

删除User的时候也删除UserProfile. 打开UserModule类,修改delete方法

  1. @At
  2. @Aop(TransAop.READ_COMMITTED)
  3. public Object delete(@Param("id")int id, @Attr("me")int me) {
  4. if (me == id) {
  5. return new NutMap().setv("ok", false).setv("msg", "不能删除当前用户!!");
  6. }
  7. dao.delete(User.class, id); // 再严谨一些的话,需要判断是否为>0
  8. dao.clear(UserProfile.class, Cnd.where("userId", "=", me));
  9. return new NutMap().setv("ok", true);
  10. }

留意一下,因为有多个数据库操作,这里加上了事务,这不是必须的.

这里的

  1. @Aop(TransAop.READ_COMMITTED)

之所以可用,是因为MainModule中的

  1. @IocBy(args={....., "*tx", .....}) // *tx所加载的事务aop