首页 > 代码库 > 2014年工作中遇到的20个问题:201-220

2014年工作中遇到的20个问题:201-220

201.Mybatis查询不到结果时,返回的是为空不为null的List。
   @Select("select * from p2p_role_privilege where privilege_acl = #{acl}")
List<Map<String, Object>> listByPrivilege(Integer acl);

202.日期的12小时表示与24小时表示。
yyyy-MM-dd HH:mm:ss 大写的HH,表示是24小时制,下午2点,就是14:00:00.
yyyy-MM-dd hh:mm:ss 小写的hh,表示是12小时制,下午2点,就是2:00:00.


格式化,一般发生在number_to_strdate,和date_to_strdate.
如果数据库直接用datetime存储,默认用的是24进制,不用转换。


另外,还会存在情况。
前端js,有的人会使用第三方的date扩展,这个时候“HH”是否表示是24进制,不一定的。


203.Eclipse新建动态web项目时,要选择web版本,有2.5和3.0等,2.5貌似不支持Tomcat7。
项目的Java版本等都是可以修改的,项目-属性-Project Facets,可以修改。


204.ftl中用html注释没用,ftl表达式仍然会执行
<!-- 上次登录时间:${date_to_ymdhms(currentUser.lastLoginTime)} -->
有了注释之后,前端看不到这段代码输出了,但是Freemarker表达式仍然会执行,如果表达式有错误,Freemarker仍然会打印错误信息。


205.Eclipse有个功能,非常坑爹。
打开若干窗口,多个窗口的源代码属于多个项目,如果一个源代码窗口被关闭了,Eclipse会切换到另外一个窗口,如果这个窗口所属的项目,
与上一个不一样,左边的导航栏会切换到新的项目。


但是,我很多时候,希望以左边导航条为“主视口”,不要随意滚动。


206.别名找不到。
<typeAliases>
<package name="com.p2p.user.dal.model" />
</typeAliases>


Base项目,定义了公共的代码。
user项目用到了base项目的model,正好用的是别名。


<package name="com.p2p.base.model"/>  
user项目mybatis-config.xml也要扫描base项目的model才行。


最初以为是Maven打包不对,么有更新。
Maven重新clean,然后install了很多次,还是不行,所以不再怀疑是maven的问题。
认真看控制台的错误提示,发现是mybatis的问题。


为什么不会去怀疑mybatis的问题呢?我想是由于:项目的结构已经稳定了,找不到包一般是maven的问题。


207.资金相关的系统,金额字段可以存储为double类型,比如12.523元。
也可以存储bigint类型,比如12523,就是12元52分3粒。


208.不能把SpringMVC的Errors放到Model中。
@RequestMapping(value = http://www.mamicode.com/"/test")
public String test(@Valid WithdrawForm form,ModelMap model,Errors error){
error.rejectValue("card", "no_exist","无哦呜提示");
error.rejectValue("fee", "no_exist_fee","fee无哦呜提示");
model.addAttribute("name", "name");


model.addAttribute("error2", error.getAllErrors());
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("C:/a.txt"));
os.writeObject(error);
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}

访问test.json,结果返回的json中不会有error里的信息。
最终分析发现,转化成json,需要序列化。
而error继承了Exception,没有实现序列化,而且Exception是个大对象,堆栈信息会比较多。

验证是否实现序列化,写了个“对象输出流”,报异常,提示“没有实现序列化”。

另外,需要注意的是,使用Errors的前提是,使用了@Valid注解。

209.Maven项目经常出现各种各样的问题,刚刚又尝试了一种比较“无敌”的方法。
手动在Eclipse中修改Build Path,可能无法成功。
然后,就找到.classpath文件,手动修改。
如果还是不行,删除.project和.classpath,重新作为Maven工程导入,然后就可以了。


210.Eclipse重构实现类的时候,会提示该实现类实现了某个接口,也会重构接口的方法。


211.PageVo接收分页参数,第几页前端用户系统使用pageSize,后端管理系统使用的是rows。
为了同时兼容前后端,修改setter方法,实际分页的时候,只使用pageSize。
public void setRows(Integer rows) {
this.pageSize = rows;
this.rows = rows;
}

212.Mybatis增加时,获得自增autoincrement的值。
<insert id="add" keyProperty="id" useGeneratedKeys="true">
<selectKey resultType="int" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into
raikou_answer(ask_id,ask_user_id,user_id,summary,content,status,create_time)
values(#{ask_id},#{ask_user_id},#{user_id},#{summary},#{content},#{status},now())
</insert>
这是原来的写法,都是从网上copy的,不过发现这种“selectKey”没有必要写。
下面的写法更简洁。
<insert id="add" keyProperty="id" useGeneratedKeys="true">
insert into
raikou_search_log(keyword,hits,time,ip,browser,os,create_time)
values(#{keyword},#{hits},#{time},#{ip},#{browser},#{os},now())
</insert>

官网的权威说法:
keyProperty (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值
或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。
如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

也就是说,useGeneratedKeys和selectKey子句,只使用一个就行了。


213.Map的key。
map.put(1,"a");
map.get("1");


放进去的值,和取出来的值很可能不一样。
map的key不是同一个,integer的1和string的“1”是不同的。


214.Log4j的properties和xml方式配置各有好处。
properties比较简洁,编辑方便。
xml结构化更清晰。
有点需要注意的是,properties格式,只需要把log4j.properties放到classpath下,自动能读取到。
而log4j.xml则需要手动初始化,在web.xml中配置listener或者java应用程序中,手动初始化一次才能使用。
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


215.2014年11月30日,某企业客户给我打了500元的技术服务费到支付宝。
当天,我看到余额增加了500元,把他转到余额宝,然后就没有关注了。
今天,我想看下上个月的收入记录,但是从支付宝的交易记录始终查询不到这笔收入。


我弄了半个多小时,找到了“支付宝转入余额宝500元”这笔记录,从时间和金额来讲,只有这一项和那笔500元的服务费相似。


突然,我注意到,这笔记录的后面,有个“向下的箭头-点此查看明细”,然后点击“查看收支明细”-找到了这笔记录。


我感觉这个功能,好难用啊,为什么不能直接查到这笔收入呢???


明天去问问在淘宝工作过,开发过支付宝一些功能的boss。


216.Boss的Eclipse项目,访问总是提示页面找不到。
前端页面找不到,应该就是配置文件,没有弄好,但是去看配置,确实没有问题。
尝试了很多方法,还是不行。
最后,我觉得应该配置文件被Jetty缓存了,清理Maven的target目录,重启Eclipse就好了。


217.今天,又在替一个GG擦屁股,代码写得有问题。
认证标志是char类型的,想根据某个int类型的status来判断,是否经过了认证。
int statuc=1;
char auth;
不能强制类型转换(char)1。
太坑了额~


218.再次强调第213个问题,map的key是object类型,取值的时候,一定注意key的类型。
int和string的“1”是不同的。
另外,枚举类型,是根据枚举的name还是index,要注意。
getIndex是获得枚举类型UserAuthName索引的方法。
UserAuthName.AUTH_REALNAME.getIndex()


219.数据库表的字段有几十个,而最常用的字段却放在了后面。
每次去看,都很麻烦,修改,把最常用的字段放在最前面。


220.date数据截断。
数据库日期是bigint(10),程序报错。
Data truncated for column ‘exptime‘ at row 1。
最初我以为是,bigint(10)太短,后来发现是:插入日期是Date,存储日期是int导致的。


相关的还有一个问题,bigint后面的(10)是神马意思呢?



2014年工作中遇到的20个问题:201-220