2018年11月29日星期四

邮件发博客不能发图片吗

邮件发博客不能发图片吗

独自带闺女的一个周末

不想发朋友圈,是因为不是想别人看到,只是记录一下,所以写在这里


还有一个是2014去韩国的照片
我还能抱着她,没找到

现在已经抱不动了
也羞于让我抱她

她会跟你讲条件
她会问这问那
她会说一路平安,早点回来
她会跟你一样把刚说的话忘光

还没能晓得 就快要老了

这货也很快抱不动了

她长大了
他也很快

无知的索求,羞耻于求救
上一次谁给过拥抱,在什么时候

她突然问,某某同学的爸爸是卖茶叶的吗?
我说,不是,实在茶叶公司上班吧!
她说,挺好啊,不像你,啥用没有
我一时语塞

回忆这些
更不适合听李宗盛

越过山丘,却发现无人等候
太扎心

想得却不可得,你乃人生何
太扎心

一首新写的旧歌,他不等你,已来不及,他等过你,已来不及



2018年5月3日星期四

宝贝长得真快

就要二年级毕业了

我:
昨天你闺女主动写了10页口算
我:
是什么动力呢?
:
无聊?
:
口算简单?
我:
越逼越不写
我:
好深奥
:
我闺女将来肯定是个出色的人
我:
难易 都一样啊
我:
我想想明白,然后改变方式方法

2017年3月15日星期三

2016年5月6日星期五

2016-05-06

下周一小学开始报名了
真快 ,我还记得我上小学呢

2016年4月6日星期三

2016-04-06

好几个人说我肺痨了,咳嗽的厉害,赶紧给我弄块血馒头

天儿一天天热了,都短袖了,继续混吃等死的日子

昨晚闺女舔下来一颗牙,彻底变成豁子牙了,说话漏风~~~~~

2016年3月30日星期三

2016-03-30

暖和了
但还穿着秋裤
那叫自爱

感觉到又要进入救火节奏
刚灭了一把火 总结一下就是,迭代开发修改,就是在埋地雷啊,然后在上线后的日子里,冷不丁爆一个,断胳膊断腿啊

2016年3月27日星期日

2016-03-26

又是一个无聊的周末,11点吃早餐,16点午餐,17点午觉,23点吃晚餐,到现在还没睡

第二颗牙掉了,还给妈妈弄失落了

等我们满嘴漏风时,这就是轮回

2016年3月24日星期四

2016-03-24

生猴宝宝的可真多啊,周围有4个怀孕的了,两男两女 呵呵

今天闺女掉了第一颗牙,都开始换牙了

继续混吃等死

2016年3月16日星期三

2016了都

2014初立志记录日志,结果现在都2016了

天天立,年年立,立完倒,再立

2016
头等大事--闺女要上小学了
头发快白了一半了
还在呆了快10年的公司混吃等死

哄孩子睡觉去

2015年8月24日星期一

简单介绍一下国产框架nutz

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