字段名为birthday,java中的类型为java.util.Date,数据库字段为DATE类型,传入一个日期(格式为"yyyy-MM-dd"),orderDate=#{orderDate}居然不相等????
解决方法:
添加jdbcType=DATE解决,where birthday=#{birthday,jdbcType=DATE}
代码如下:
<select id="findCountByOrderDate" parameterType="java.util.Date" resultType="long">
select count(*) from t_ordersetting where orderDate = #{orderDate,jdbcType=DATE}
select>
Mysql中类型为DATE,Java中为java.util.Date,日期对比问题
在连接数据库的时候,当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType=“TIMESTAMP”的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)。
以绑定时间和解绑时间为例:
1.1当绑定时间的jdbcType=“DATE”,解绑时间的为jdbcType=“TIMESTAMP”,xml文件设置如下:
1.2最终查询到的数据类型是DATE的数据只有年月日(yyyy-MM-dd),而TIMESTAMP的年月日和时分秒都有(yyyy-MM-dd HH:mm:ss),如下展示:
Mybatis框架中jdbcType=“DATE” 和 jdbcType=“TIMESTAMP” 两种类型的区别
首先,java这里有两个类型:
java.sql.Date java.util.Date
java.util.Date date = new java.util.Date();
java.sql.Date sqlDate=new java.sql.Date(date.getTime());
而且在jdbc Preparestatement中调用setDate( )方法给数据库中插入数据时,也是为java.sql.Date类型。
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
java.util.Date date = new java.util.Date();
在数据库中,若要保存如 2018-06-25 这种的日期格式,则可以将该字段定义为DATE类型;
若要保存如 2018-06-25 12:01:00 这种的日期格式,则可以将该字段定义为DATETIME类型;
我在数据库(MySQL)中声明字段为datetime类型,如果要在java代码中向数据库插入数据,可使用TimeStamp对象:先创建java.util.Date对象,然后将其转换成TimeStamp对象(java.sql.Date对象不能保存时间,java.util.Date的可以)然后将TimeStamp对象插入数据库(TimeStamp继承自java.sql.Date,数据库中自动转换成DateTime)
java.util.Date date = new java.util.Date(); // 获取一个Date对象
Timestamp timeStamp = new Timestamp(date.getTime()); // 将日期时间转换为数据库中的
pstmt.setTimestamp(2, timeStamp);
取出数据时,要使用rs.getTimestamp(“**”),自动转换成实体类中的java.util.Date
r.setUseTime(rs.getTimestamp("useTime"));//取出日期的为java.util.Date类型
另外:java.util.Date显示日期格式化方法:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String str = df.format(new Date());// new Date()为获取当前系统时间
关于jdbc中的Date类型