`

mybatis中操作日期实例分析

阅读更多

        myBatis的sqlmap操作mysql数据库表,不管是查询还是更新,可以和表的字段类型无关,可以是VARCHAR或者TIMESTAMP,而sqlmap中的resultMap对应的jdbcType也可以是TIMESTAMP或者VARCHAR,甚至DTO的属性类型可以是Date类型,也可以是String类型,都不影响实际的操作逻辑。

        验证代码如下:

ScheduledConfigDao.java

package com.bijian.study.dao;

import com.bijian.study.model.ScheduledConfigDTO;

public interface ScheduledConfigDao {

    public ScheduledConfigDTO selectByPrimaryKey(String task_type);

    public int updateByPrimaryKey(ScheduledConfigDTO record);
}

ScheduledConfigDTO.java

package com.bijian.study.model;

import java.util.Date;

public class ScheduledConfigDTO {

    private String task_type;

    private Date exec_time;
    //private String exec_time;

    private Date update_time;

    public String getTask_type() {
        return task_type;
    }

    public void setTask_type(String task_type) {
        this.task_type = task_type;
    }

    public Date getExec_time() {
        return exec_time;
    }

    public void setExec_time(Date exec_time) {
        this.exec_time = exec_time;
    }

//    public String getExec_time() {
//        return exec_time;
//    }
//
//    public void setExec_time(String exec_time) {
//        this.exec_time = exec_time;
//    }

    public Date getUpdate_time() {
        return update_time;
    }

    public void setUpdate_time(Date update_time) {
        this.update_time = update_time;
    }

    @Override
    public String toString() {
        return "CoreScheduledConfigDTO [task_type=" + task_type + ", exec_time=" + exec_time + ", update_time="
                + update_time + "]";
    }
}

ScheduledConfigDaoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bijian.study.dao.ScheduledConfigDao">
	<resultMap id="BaseResultMap" type="com.bijian.study.model.ScheduledConfigDTO">
		<id column="task_type" property="task_type" jdbcType="VARCHAR"/>
		<result column="exec_time" property="exec_time" jdbcType="TIMESTAMP"/>
		<result column="update_time" property="update_time" jdbcType="TIMESTAMP"/>
	</resultMap>
	
	<sql id="Base_Column_List">
		task_type,exec_time,update_time
	</sql>
	
	<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String">
		select 
		<include refid="Base_Column_List" /> 
		from scheduled_config where task_type = #{task_type,jdbcType=INTEGER}
		 for update
	</select>
	
	<update id="updateByPrimaryKey" parameterType="com.bijian.study.model.ScheduledConfigDTO">
		update scheduled_config 
		<set>
			<if test="exec_time != null">
				exec_time = #{exec_time,jdbcType=TIMESTAMP},
			</if>
			<if test="update_time != null">
				update_time = #{update_time,jdbcType=TIMESTAMP},
			</if>
		</set>
		where task_type = #{task_type,jdbcType=VARCHAR}
	</update>
</mapper>

MyBatisBasicTest.java

package com.bijian.study.test;

import java.io.IOException;
import java.io.Reader;
import java.util.Date;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.bijian.study.dao.ScheduledConfigDao;
import com.bijian.study.model.ScheduledConfigDTO;

public class MyBatisBasicTest {

    private static final Logger log = LoggerFactory.getLogger(MyBatisBasicTest.class);
    private static SqlSessionFactory sqlSessionFactory;

    private static Reader reader;

    @BeforeClass
    public static void initial() {
        try {
            reader = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            log.error("Error thrown while reading the configuration: {}", e);
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    log.error("Error thrown while closing the reader: {}", e);
                }
            }
        }
    }
    
    @Test
    public void queryInInterfaceWayTest() {
        
        SqlSession session = sqlSessionFactory.openSession();
        ScheduledConfigDao scheduledConfigDao = session.getMapper(ScheduledConfigDao.class);
        ScheduledConfigDTO scheduledConfigDTO = scheduledConfigDao.selectByPrimaryKey("02");
        //ScheduledConfigDTO scheduledConfigDTO = scheduledConfigDao.selectByPrimaryKey("1");
        log.info("scheduledConfigDTO:{}", scheduledConfigDTO);
        
        //scheduledConfigDTO.setExec_time("2016-11-08 10:01:01");
        //scheduledConfigDTO.setExec_time("20161108100112");
        //scheduledConfigDTO.setExec_time(new Date());
        
        scheduledConfigDTO.setExec_time(null);
        scheduledConfigDTO.setUpdate_time(new Date());
        log.info("scheduledConfigDTO:{}", scheduledConfigDTO);
        int count = scheduledConfigDao.updateByPrimaryKey(scheduledConfigDTO);
        session.commit();
        log.info("{}", count);
    }
}

Configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<typeAliases><!-- 别名 -->
		<typeAlias alias="ScheduledConfigDTO" type="com.bijian.study.model.ScheduledConfigDTO" />
	</typeAliases>
	
	<environments default="development">
	  <environment id="development">
		<transactionManager type="JDBC"/>
		<dataSource type="POOLED"><!-- 数据源 -->
			<property name="driver" value="com.mysql.jdbc.Driver" />
			<property name="url" value="jdbc:mysql://127.0.0.1:3306/hbatis" />
			<property name="username" value="test" />
			<property name="password" value="test" />
		</dataSource>
	  </environment>
	</environments>
	
	<mappers><!-- ORM映射文件 -->
		<mapper resource="com/bijian/study/model/ScheduledConfigDaoMapper.xml" />
	</mappers>
</configuration>

mysql.sql

-- Create the database named 'hbatis'.
-- It's OK to use `, not OK to use ' or " surrounding the database name to prevent it from being interpreted as a keyword if possible.
CREATE DATABASE IF NOT EXISTS `hbatis`
DEFAULT CHARACTER SET = `UTF8`;

-- Create a table named 'User'
DROP TABLE IF EXISTS `scheduled_config`;
CREATE TABLE `scheduled_config` (
  `task_type` varchar(2) NOT NULL COMMENT '任务类型',
  `exec_time` varchar(20) DEFAULT NULL COMMENT '上次执行时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`task_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Insert a test record
Insert INTO `scheduled_config` VALUES ('1', '20161108101751', '2016-11-08 10:17:51');
Insert INTO `scheduled_config` VALUES ('02', '2016-11-08 00:01:02', '2016-11-08 10:17:51');

-- drop table
drop table `scheduled_config`;

mysql2.sql

-- Create the database named 'hbatis'.
-- It's OK to use `, not OK to use ' or " surrounding the database name to prevent it from being interpreted as a keyword if possible.
CREATE DATABASE IF NOT EXISTS `hbatis`
DEFAULT CHARACTER SET = `UTF8`;

-- Create a table named 'User'
DROP TABLE IF EXISTS `scheduled_config`;
CREATE TABLE `scheduled_config` (
  `task_type` varchar(2) NOT NULL COMMENT '任务类型',
  `exec_time` timestamp NULL DEFAULT NULL COMMENT '上次执行时间',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`task_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Insert a test record
Insert INTO `scheduled_config` VALUES ('1', '20161108101751', '2016-11-08 10:17:51');
Insert INTO `scheduled_config` VALUES ('02', '2016-11-08 00:01:02', '2016-11-08 10:17:51');

-- drop table
drop table `scheduled_config`;

/*
查数据表如下所示:
mysql>  select * from core_scheduled_config;
+-----------+---------------------+---------------------+
| task_type | exec_time           | update_time         |
+-----------+---------------------+---------------------+
| 02        | 2016-11-08 00:01:02 | 2016-11-08 10:17:51 |
| 1         | 2016-11-08 10:17:51 | 2016-11-08 10:17:51 |
+-----------+---------------------+---------------------+
2 rows in set (0.01 sec)
*/

mysql3.sql

-- Create the database named 'hbatis'.
-- It's OK to use `, not OK to use ' or " surrounding the database name to prevent it from being interpreted as a keyword if possible.
CREATE DATABASE IF NOT EXISTS `hbatis`
DEFAULT CHARACTER SET = `UTF8`;

-- Create a table named 'User'
DROP TABLE IF EXISTS `scheduled_config`;
CREATE TABLE `scheduled_config` (
  `task_type` varchar(2) NOT NULL COMMENT '任务类型',
  -- `exec_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上次执行时间',
  `exec_time` timestamp NOT NULL COMMENT '上次执行时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次修改时间',
  PRIMARY KEY (`task_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Insert a test record
Insert INTO `scheduled_config` VALUES ('1', '20161108101751', '2016-11-08 10:17:51');
Insert INTO `scheduled_config` VALUES ('02', '2016-11-08 00:01:02', '2016-11-08 10:17:51');

-- drop table
drop table `scheduled_config`;

        唯一需要注意的是:如果数据库表是TIMESTAMP类型的,初始化语句字段内容为20161108101751,也会转换为2016-11-08 10:17:51TIMESTAMP类型。

 

附:MySQL数据表字段为timestamp类型的坑

        当使用MYSQL,建表使用timestamp类型时,没有默认default CURRENT_TIME,会导致创建的timestamp默认加上default CURRNET_TIME ON UPDATE CURRENT_TIMESTAMP,解决方法:

1.修改字段类型为datetime类型(如果允许允许)

2.更改表的ddl,给timestamp加上default CURRENT_TIMESTAMP



分析实例参考文章:http://bijian1013.iteye.com/blog/2313380

  • 大小: 36.9 KB
分享到:
评论

相关推荐

    MyBatis配套资料.rar

    本压缩包中的资源涵盖了MyBatis的核心概念和常见操作,对于学习和理解MyBatis具有极大的帮助。 1. **MyBatis内置的类型处理器**:MyBatis提供了丰富的类型处理器,用于处理Java类型与数据库类型的转换。例如,当...

    MyBatis.tgz

    在接口中定义的方法对应XML文件中的SQL语句,通过MyBatis的动态代理机制,实现了方法调用与数据库操作的无缝对接。 3. **SQL映射**:MyBatis的灵活性在于它可以处理复杂的SQL,包括动态SQL,即在运行时根据条件动态...

    IBatis开发实例

    **实例分析** 在“AstronomicalObject”这个实例中,我们可以假设这是一个天文学领域的应用,其中可能包含星体、行星、恒星等天文对象的数据。在IBatis中,我们可能会有以下操作: 1. **实体类**:创建一个`...

    java 利用反射获取内部类静态成员变量的值操作.docx

    在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景...

    bootDemo.rar

    总的来说,"bootDemo.rar"是一个综合性的Spring Boot应用实例,涵盖了数据库操作、缓存管理和实用工具的使用,对于初学者和开发者来说,这是一个很好的学习和实践平台,可以帮助他们快速理解和掌握这些技术。...

    papersystem.zip-ssm简单项目

    在"papersystem"项目中,Mybatis可能会被用来执行CRUD操作,比如添加新的论文记录、删除特定的论文、更新论文信息以及查询论文列表。 MySql是广泛使用的开源关系型数据库管理系统,它支持ACID(原子性、一致性、...

    sql实例教程+课件

    SQL的基础包括数据类型(如整型、浮点型、字符串、日期时间等)、数据库对象(如表、视图、索引、存储过程等)的创建与管理,以及DML(Data Manipulation Language)操作,包括INSERT用于添加新记录,UPDATE用于修改...

    ExcelHelper(Excel导入导出)实例源码.zip

    - **写入数据**:通过指定单元格位置,可以向工作表中写入字符串、数字、日期等不同类型的数据。 - **读取数据**:同样,可以读取指定单元格的数据,支持遍历整个工作表以获取所有数据。 - **样式设置**:...

    网购网站实例(JAVA+SQLServer)

    Hibernate或MyBatis可能作为ORM(对象关系映射)工具,帮助开发者将数据库操作转化为Java对象的方法,简化数据库访问。 SQLServer作为数据库,用于存储网站的各种数据,包括用户信息、商品详情、订单记录等。开发者...

    ssm实现汽车销售管理系统.rar

    在汽车销售管理系统中,MyBatis的XML配置文件或者注解用于定义SQL语句,包括查询、插入、更新和删除等操作。通过MyBatis的Mapper接口,我们可以方便地在Java代码中执行这些SQL语句,获取或修改数据库中的数据。此外...

    基于Java的实例源码-单位固定资产登记管理系统JAVA版.zip

    1. 固定资产录入:系统提供界面供用户输入固定资产的基本信息,如资产编号、设备名称、购置日期、原值等,这些信息会被存储在数据库中。 2. 固定资产查询:用户可以根据不同的条件(如资产编号、类别、购置日期等)...

    数据库通用模块数据库例子

    数据库通用模块是软件开发中的一种常见设计模式,它旨在提供一套可复用的数据库操作组件,以便在不同的应用中处理数据存储和检索。...通过对各种应用场景的实例分析,我们可以更好地理解和运用这种模块化设计思路。

    【ssm项目源码】学院工资管理系统.zip

    【ssm项目源码】学院工资...总结,【ssm项目源码】学院工资管理系统展示了SSM框架在实际项目中的应用,包括后端服务的构建、数据库操作、权限控制以及前端展现等多个方面,为学习和理解Java Web开发提供了宝贵的实例。

    java用poi导入,到处excel操作

    Java使用Apache POI库进行Excel导入与导出操作是企业级应用中常见的需求,尤其是在数据处理、报表生成和数据分析等领域。Apache POI是一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel...

    基于SSM的企业台账管理系统源码.zip

    在这个系统中,Spring作为基础框架,负责依赖注入(DI)和面向切面编程(AOP),Spring MVC作为Web层框架,处理HTTP请求和响应,MyBatis作为持久层框架,实现了数据库操作的封装。下面将详细探讨这些知识点。 1. **...

    javaWeb家庭收支系统Gxd01.rar

    SSM框架是JavaWeb开发中常用的技术栈,由Spring框架提供依赖注入和事务管理,SpringMVC负责处理HTTP请求和响应,而MyBatis则作为持久层框架,简化了数据库操作。下面将详细介绍这个系统的相关知识点。 首先,Spring...

    基于ssm实验室仪器设备管理系统.zip

    在这个系统中,Java不仅用于编写后端服务,还可能涉及一些辅助工具类的编写,如日期处理、文件操作等。 **微信小程序**是一种轻量级的应用开发平台,允许开发者在微信环境下快速开发具有原生体验的小程序。在SSM...

    图书馆管理系统(数据库课程设计).zip

    总结,图书馆管理系统是一个典型的数据库应用实例,涵盖了数据库设计、数据操作、关系模型等多个方面,通过实际操作,可以帮助学生更好地掌握数据库技术,并提升其在实际项目中的应用能力。在设计和实现过程中,应...

    基于ssm+mysql+web的工厂新闻管理系统源码数据库.zip

    在新闻管理系统中,MySQL将存储新闻的元数据、内容、发布日期等信息,支持高效的查询和更新操作。 5. **Web技术**:这个系统基于Web,意味着使用HTTP协议进行通信,可能包括HTML、CSS、JavaScript等前端技术,以及...

Global site tag (gtag.js) - Google Analytics