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
相关推荐
本压缩包中的资源涵盖了MyBatis的核心概念和常见操作,对于学习和理解MyBatis具有极大的帮助。 1. **MyBatis内置的类型处理器**:MyBatis提供了丰富的类型处理器,用于处理Java类型与数据库类型的转换。例如,当...
在接口中定义的方法对应XML文件中的SQL语句,通过MyBatis的动态代理机制,实现了方法调用与数据库操作的无缝对接。 3. **SQL映射**:MyBatis的灵活性在于它可以处理复杂的SQL,包括动态SQL,即在运行时根据条件动态...
**实例分析** 在“AstronomicalObject”这个实例中,我们可以假设这是一个天文学领域的应用,其中可能包含星体、行星、恒星等天文对象的数据。在IBatis中,我们可能会有以下操作: 1. **实体类**:创建一个`...
在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景...
总的来说,"bootDemo.rar"是一个综合性的Spring Boot应用实例,涵盖了数据库操作、缓存管理和实用工具的使用,对于初学者和开发者来说,这是一个很好的学习和实践平台,可以帮助他们快速理解和掌握这些技术。...
在"papersystem"项目中,Mybatis可能会被用来执行CRUD操作,比如添加新的论文记录、删除特定的论文、更新论文信息以及查询论文列表。 MySql是广泛使用的开源关系型数据库管理系统,它支持ACID(原子性、一致性、...
SQL的基础包括数据类型(如整型、浮点型、字符串、日期时间等)、数据库对象(如表、视图、索引、存储过程等)的创建与管理,以及DML(Data Manipulation Language)操作,包括INSERT用于添加新记录,UPDATE用于修改...
- **写入数据**:通过指定单元格位置,可以向工作表中写入字符串、数字、日期等不同类型的数据。 - **读取数据**:同样,可以读取指定单元格的数据,支持遍历整个工作表以获取所有数据。 - **样式设置**:...
Hibernate或MyBatis可能作为ORM(对象关系映射)工具,帮助开发者将数据库操作转化为Java对象的方法,简化数据库访问。 SQLServer作为数据库,用于存储网站的各种数据,包括用户信息、商品详情、订单记录等。开发者...
在汽车销售管理系统中,MyBatis的XML配置文件或者注解用于定义SQL语句,包括查询、插入、更新和删除等操作。通过MyBatis的Mapper接口,我们可以方便地在Java代码中执行这些SQL语句,获取或修改数据库中的数据。此外...
1. 固定资产录入:系统提供界面供用户输入固定资产的基本信息,如资产编号、设备名称、购置日期、原值等,这些信息会被存储在数据库中。 2. 固定资产查询:用户可以根据不同的条件(如资产编号、类别、购置日期等)...
数据库通用模块是软件开发中的一种常见设计模式,它旨在提供一套可复用的数据库操作组件,以便在不同的应用中处理数据存储和检索。...通过对各种应用场景的实例分析,我们可以更好地理解和运用这种模块化设计思路。
【ssm项目源码】学院工资...总结,【ssm项目源码】学院工资管理系统展示了SSM框架在实际项目中的应用,包括后端服务的构建、数据库操作、权限控制以及前端展现等多个方面,为学习和理解Java Web开发提供了宝贵的实例。
Java使用Apache POI库进行Excel导入与导出操作是企业级应用中常见的需求,尤其是在数据处理、报表生成和数据分析等领域。Apache POI是一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel...
在这个系统中,Spring作为基础框架,负责依赖注入(DI)和面向切面编程(AOP),Spring MVC作为Web层框架,处理HTTP请求和响应,MyBatis作为持久层框架,实现了数据库操作的封装。下面将详细探讨这些知识点。 1. **...
SSM框架是JavaWeb开发中常用的技术栈,由Spring框架提供依赖注入和事务管理,SpringMVC负责处理HTTP请求和响应,而MyBatis则作为持久层框架,简化了数据库操作。下面将详细介绍这个系统的相关知识点。 首先,Spring...
在这个系统中,Java不仅用于编写后端服务,还可能涉及一些辅助工具类的编写,如日期处理、文件操作等。 **微信小程序**是一种轻量级的应用开发平台,允许开发者在微信环境下快速开发具有原生体验的小程序。在SSM...
总结,图书馆管理系统是一个典型的数据库应用实例,涵盖了数据库设计、数据操作、关系模型等多个方面,通过实际操作,可以帮助学生更好地掌握数据库技术,并提升其在实际项目中的应用能力。在设计和实现过程中,应...
在新闻管理系统中,MySQL将存储新闻的元数据、内容、发布日期等信息,支持高效的查询和更新操作。 5. **Web技术**:这个系统基于Web,意味着使用HTTP协议进行通信,可能包括HTML、CSS、JavaScript等前端技术,以及...