zoukankan      html  css  js  c++  java
  • 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 = "/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)是神马意思呢?



  • 相关阅读:
    实现windows数据更新
    使用ListView展示数据
    构建良好的windous布局
    初始Windows系统
    用C#连接SQL sever数据库
    分组查询与内外连接查询
    SQL Server中数据查询基础
    使用SQL语句操作数据
    CHECK约束表达式
    聊聊四种冷启动,和它们的成本、竞争门槛
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462993.html
Copyright © 2011-2022 走看看