• mybatis 关于时间的问题与技巧


    oracle:
        此执行是在oracle下!
    关于日期和时间的问题,date只有日期   timestamp 带有时分秒
    一  #号取值
        1.date
            insert into table (column1) values (#{aa,jdbcType=DATE})
     
        语句执行的sql:
            insert into table (column1)  values (to_date('08/27/2015 20:20:20', 'mm/dd/yyyy hh24:mi:ss'))
     
        实际插入到数据库的结果:
     
        2015/08/27
      --只有日期! 没有时间
     
    ** PS: 如果 aa取值时是null 或 "" 则插入到数据库里的为 null 
     
        2.timestamp
     
            insert into table (column1) values (#{aa,jdbcType=TIMESTAMP})
     
    语句执行的sql:
     
           insert into table (column1)  values (to_ timestamp('08/27/2015 20:20:20.000', 'mm/dd/yyyy hh24:mi:ss.ff3'))
     
    实际插入到数据库的结果:
     
    2015/08/27 20:20:20
      --带有时分秒的
     
     
    二  直接用to_date() / to_timestamp()函数
        前提:这两个函数不能用于java里的Date类型,只能用于String类型,即aa 的数据类型只能是String
        mybatis在处理to_date函数时(to_timestamp()同理) 
            #{aa} 没有指定jdbctype, 则根据java数据类型给出一个jdbctype,  但如果 aa为null 或 "" 则出报错
            #{aa,jdbcType=DATE} ,指定jdbctype后,会转换为相应的jdbctype,但如果类型不匹配,则报错. 如果 aa为null 或 ""  则aa 取值为null
            
         PS: java.util.Date aa  mybatis默认给出的jdbctype=TIMESTAMP  即:#{aa} 等价于 #{aa,jdbcType=TIMESTAMP}
     
        1. to_date()
        
        sql1:     insert into table (column1) values (to_date(#{aa},'YYYY-MM-DD'))
        sql2:    insert into table (column1) values (to_date(#{aa},'YYYY-MM-DD hh24:mi:ss'))
     
        执行的sql语句:
        sql1:    insert into table (column1) values (to_date('2015-09-08 20:20:20','YYYY-MM-DD'))
        sql2:     insert into table (column1) values (to_date('2015-09-08 20:20:20','YYYY-MM-DD hh24:mi:ss'))
     
        执行结果:
        sql1:    报错:  日期格式图片在转换整个输入字符串之前结束    转换类型不匹配
        sql2:    column1 : 2015-09-08 20:20:20
     
        2. to_timestamp()
        sql3:     insert into table (column1) values (to_timestamp(#{aa},'YYYY-MM-DD'))
        sql4:    insert into table (column1) values (to_timestamp(#{aa},'YYYY-MM-DD hh24:mi:ss'))
     
        执行的sql语句:
        sql3:    insert into table (column1) values (to_timestamp('2015-09-08 20:20:20','YYYY-MM-DD'))
        sql4:     insert into table (column1) values (to_timestamp('2015-09-08 20:20:20','YYYY-MM-DD hh24:mi:ss'))
     
        执行结果:
        sql3:    报错:  日期格式图片在转换整个输入字符串之前结束    转换类型不匹配
        sql4:    column1 :   08-9月 -15 08.20.20.000000000 下午   //timestamp 带有更多的时间信息
     
    三  直接取值
        没有jdbctype  没有to_date函数  column1的类型为date
         sql5:     insert into table (column1) values (#{aa})    //aa的java 数据类型为String 
        sql6:     insert into table (column1) values (#{aa})    //aa的java 数据类型为 java.util.Date
        执行的sql语句:
        sql5:    insert into table (column1) values ('2015-09-08 20:20:20')
      sql6:    insert into table (column1) values (to_timestamp('09/08/2015 15:14:38.000','mm/dd/yyyy hh24:mi:ss.ff3'))
        执行结果:
        sql5:    报错:  文字与格式字符串不匹配    转换类型不匹配
        sql4:    column1 :   2015/8/27 20:20:20  
  • 相关阅读:
    Creating Bootstrapper Packages
    匹配Google查询URL关键字
    DotNetNuke模块Unhandled error loading module问题解决
    当WCF的定义过大时vs.net无法添加引用.
    SQL 去除时间
    2012年终总结(一)
    GDI+生成证书带二维码
    linq to xml基础
    Jquery ligerUI的使用
    vs2012 用户类和xml 、xaml不高亮显示的解决办法
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/4794035.html
Copyright © 2020-2023  润新知