MyBatis具体是什么东东,这些在后边在研究吧,本文目的是为了记录如何使用MyBatis。

  • 首先,需要下载MyBatis开发所需要文件。

通过github上可以找到MyBatis代码:https://github.com/mybatis/mybatis-3,在最新代码中可以下载具体的有代码包,也可以下载开发包。

  • 解压MyBatis后把其中的Jar包引入工程中:

  • 在工程下边添加配置文件:

mybatis-config.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>
<!-- 引用db.properties配置文件 -->
<properties resource="resources/db.properties"/>
<typeAliases>
<package name="com.xxx.entity"/>
</typeAliases>
<!-- 对事务的管理和连接池的配置 -->
<environments default="mysql_jdbc">
<environment id="oracle_jdbc">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment> <environment id="mysql_jdbc">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="resources/mapper/TaskAutoExecutePlanMapper.xml"/>
</mappers>
</configuration>

log4j.properties

# #define DEBUG priority, R
# log4j.rootLogger = INFO, R
# # configure log output type as file
# log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
# #log filename
# log4j.appender.R.file = ./logRecord.log
# # append
# log4j.appender.R.Append = true
# log4j.appender.R.layout = org.apache.log4j.PatternLayout
# log4j.appender.R.layout.ConversionPattern = %n%d%p[%l]%m%n
#
# log4j.appender.R.DatePattern='.' yyyy-MM-dd log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

这里主要目的是实现把MyBatis的sql操作打印到控制台中。

具体其他方式实现MyBatis操作日志打印到控制台,请参考文章:http://blog.csdn.net/qq_17555933/article/details/51656253

db.properties

#oracle.jdbc.driver.OracleDriver | com.mysql.jdbc.Driver
driver=com.mysql.jdbc.Driver
#jdbc:oracle:thin:@localhost:1521:orcl | jdbc:mysql://localhost:3306/mybatis
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=123456
  • 新建mysql库:MyBatis,新建表TaskAutoExecutePlan

create databases mybatis;

create table TaskAutoExecutePlan(
id varchar(64) CHARACTER SET utf8mb4 NOT NULL DEFAULT '',
autoExecutePlanType varchar(36) NOT NULL default '',
taskStatus varchar(36) NOT NULL default '',
createDate datetime not null DEFAULT CURRENT_TIMESTAMP,
modifyDate datetime not null DEFAULT CURRENT_TIMESTAMP)
  • 新建实体类TaskAutoExecutePlan.java

package com.xxx.entity;

import java.util.UUID;
import java.util.Date; /**
* Created by Administrator on 2017/2/19.
*/
public class TaskAutoExecutePlan {
/**
* create databases mybatis;
*
* create table TaskAutoExecutePlan(
* `id` varchar(36) CHARACTER SET utf8mb4 NOT NULL DEFAULT '0',
* 'autoExecutePlanType' integer default '0',
* 'taskStatus' integer default '0',
* 'createDate' datetime DEFAULT CURRENT_TIMESTAMP,
* 'modifyDate' datetime DEFAULT CURRENT_TIMESTAMP)
* */
private String id=null;
private AutoExecutePlanType autoExecutePlanType;
private TaskStatus taskStatus;
private Date createDate;
private Date modifyDate; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public AutoExecutePlanType getAutoExecutePlanType() {
return autoExecutePlanType;
} public void setAutoExecutePlanType(AutoExecutePlanType autoExecutePlanType) {
this.autoExecutePlanType = autoExecutePlanType;
} public TaskStatus getTaskStatus() {
return taskStatus;
} public void setTaskStatus(TaskStatus taskStatus) {
this.taskStatus = taskStatus;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} public Date getModifyDate() {
return modifyDate;
} public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
}

设计到的enum对象包括:

AutoExecutePlanType.java
TaskStatus.java
package com.xxxx.entity;

/**
* Created by Administrator on 2017/2/19.<br>
* 任务状态:<br>
* 2:Todo,待处理状态<br>
* 4:Doing,正在处理状态<br>
* 8:Success,已成功处理<br>
* 16:Fail;已失败<br>
* */
public enum TaskStatus {
/**
* 2:Todo,待处理状态
* */
Todo(2),
/**
* 4:Doing,正在处理状态
* */
Doing(4),
/**
* 8:Success,已成功处理
* */
Success(8),
/**
* 16:Fail;已失败
* */
Fail(16); private Integer value;
private TaskStatus(int value){
setValue(value);
} public static TaskStatus valueOf(int value){
switch(value){
case 2:
return Todo;
case 4:
return Doing;
case 8:
return Success;
case 16:
return Fail;
default:
return null;
}
} public Integer getValue() {
return value;
}
private void setValue(int value) {
this.value = value;
}
}

为了实现mybatis映射enum类型需要添加一个每个enum对象的一个mybatis转化处理类.

package com.xxx.entity;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* Created by Administrator on 2017/2/20.
*/
public class TaskStatusHandler extends BaseTypeHandler<TaskStatus> {
private Class<TaskStatus> type;
private final TaskStatus[] enums; /**
* 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现
*
* @param type 配置文件中设置的转换类
*/
public TaskStatusHandler(Class<TaskStatus> type) {
if (type == null)
throw new IllegalArgumentException("Type argument cannot be null");
this.type = type;
this.enums = type.getEnumConstants();
if (this.enums == null)
throw new IllegalArgumentException(type.getSimpleName() + " does not represent an enum type.");
} @Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, TaskStatus autoExecutePlanType, JdbcType jdbcType) throws SQLException {
// baseTypeHandler已经帮我们做了parameter的null判断
preparedStatement.setInt(i, autoExecutePlanType.getValue());
} @Override
public TaskStatus getNullableResult(ResultSet resultSet, String s) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int i = resultSet.getInt(s); if (resultSet.wasNull()) {
return null;
} else { // 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(i);
}
} @Override
public TaskStatus getNullableResult(ResultSet resultSet, int i) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int index = resultSet.getInt(i);
if (resultSet.wasNull()) {
return null;
} else { // 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(index);
}
} @Override
public TaskStatus getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
// 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型
int index = callableStatement.getInt(i);
if (callableStatement.wasNull()) {
return null;
} else {
// 根据数据库中的code值,定位EnumStatus子类
return locateEnumStatus(index);
}
} /**
* 枚举类型转换,由于构造函数获取了枚举的子类enums,让遍历更加高效快捷
*
* @param code 数据库中存储的自定义code属性
* @return code对应的枚举类
*/
private TaskStatus locateEnumStatus(int code) {
for (TaskStatus status : enums) {
if (status.getValue().equals(Integer.valueOf(code))) {
return status;
}
}
throw new IllegalArgumentException("未知的枚举类型:" + code + ",请核对" + type.getSimpleName());
}
}
  • 配置TaskAutoExecutePlan映射文件:

<?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.xxx.mapper.TaskAutoExecutePlanMapper">
<!--
private UUID id=null;
private AutoExecutePlanType autoExecutePlanType;
private TaskStatus taskStatus;
private Date createDate;
private Date modifyDate;
-->
<resultMap type="TaskAutoExecutePlan" id="TaskAutoExecutePlanResult">
<result column="id" property="id"/>
<result column="autoExecutePlanType" property="autoExecutePlanType" typeHandler="com.xxx.entity.AutoExecutePlanTypeHandler"/>
<result column="taskStatus" property="taskStatus" typeHandler="com.xxx.entity.TaskStatusHandler"/>
<result column="createDate" property="createDate" jdbcType="TIMESTAMP" javaType="java.sql.Timestamp"/>
<result column="modifyDate" property="modifyDate" jdbcType="TIMESTAMP" javaType="java.sql.Timestamp"/>
</resultMap>
<select id="getAll" resultType="TaskAutoExecutePlan" resultMap="TaskAutoExecutePlanResult">
select * from TaskAutoExecutePlan
</select>
<insert id="insert" parameterType="TaskAutoExecutePlan">
<selectKey keyProperty="id" resultType="String" order="BEFORE">
select replace(uuid(),'-','') from dual
</selectKey>
insert into TaskAutoExecutePlan (id,autoExecutePlanType,taskStatus,createDate,modifyDate)
values (#{id,jdbcType=VARCHAR},
#{autoExecutePlanType,jdbcType=BIT,typeHandler=com.xxx.entity.AutoExecutePlanTypeHandler},
#{taskStatus,jdbcType=BIT,typeHandler=com.xxx.entity.TaskStatusHandler},
#{createDate,jdbcType=TIMESTAMP},
#{modifyDate,jdbcType=TIMESTAMP})
</insert>
</mapper>

当涉及到日期操作时,需要注视事项:
在MyBatis映射文件中要表明映射类型:

<!-- jdbcType="TIMESTAMP"入库后保存精确日期为:yyyy-MM-dd HH:mm:ss-->
<result column="CreateDate" jdbcType="TIMESTAMP" property="createDate" javaType="java.sql.Timestamp" />
<!-- jdbcType="DATE"入库后保存精确日期为:yyyy-MM-dd -->
<result column="ModifyDate" jdbcType="DATE" property="modifyDate" javaType="java.util.Date" />

在使用字段的时候也要标明类型#{createDate,jdbcType=TIMESTAMP}、#{modifyDate,jdbcType=DATE}。

  • 编写数据操作接口类TaskAutoExecutePlanMapper.java:

package com.xxx.mapper;

import com.xxx.entity.TaskAutoExecutePlan;

import java.util.List;

/**
* Created by Administrator on 2017/2/17.
*/
public interface TaskAutoExecutePlanMapper {
public List<TaskAutoExecutePlan> getAll();
public void insert(TaskAutoExecutePlan taskAutoExecutePlan); }
  • 编写业务类TaskAutoExecutePlanServer.java:

package com.xxx.service;

import java.io.InputStream;
import java.util.List; import com.xxx.entity.TaskAutoExecutePlan;
import com.xxx.mapper.TaskAutoExecutePlanMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /**
* Created by Administrator on 2017/2/20.
*/
public class TaskAutoExecutePlanServer implements TaskAutoExecutePlanMapper {
private final String resource = "resources/mybatis-config.xml";
private SqlSessionFactory factory = null; public TaskAutoExecutePlanServer() {
InputStream is = TaskAutoExecutePlanServer.class.getClassLoader().getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(is);
} @Override
public List<TaskAutoExecutePlan> getAll() {
SqlSession sqlSession = this.factory.openSession();
List<TaskAutoExecutePlan> result = sqlSession.selectList("com.xxx.mapper.TaskAutoExecutePlanMapper.getAll");
sqlSession.commit();
sqlSession.close(); return result;
} @Override
public void insert(TaskAutoExecutePlan taskAutoExecutePlan) {
SqlSession sqlSession = this.factory.openSession();
sqlSession.insert("com.xxx.mapper.TaskAutoExecutePlanMapper.insert",taskAutoExecutePlan);
sqlSession.commit();
sqlSession.close();
} }
  • 测试类Main.java

public static void main(String[] args) {
TaskAutoExecutePlanServer taskAutoExecutePlanServer = new TaskAutoExecutePlanServer();
TaskAutoExecutePlan taskAutoExecutePlan = new TaskAutoExecutePlan();
taskAutoExecutePlan.setId("BC");
taskAutoExecutePlan.setAutoExecutePlanType(AutoExecutePlanType.MxRasterization);
taskAutoExecutePlan.setTaskStatus(TaskStatus.Doing);
taskAutoExecutePlan.setCreateDate(new Date());
taskAutoExecutePlan.setModifyDate(new Date());
taskAutoExecutePlanServer.insert(taskAutoExecutePlan); List<TaskAutoExecutePlan> items = taskAutoExecutePlanServer.getAll();
for (TaskAutoExecutePlan item : items)
System.out.println(item.getId() + "," + item.getAutoExecutePlanType() + "," + item.getTaskStatus() + "," + item.getCreateDate() + "," + item.getModifyDate()); Log log = LogUtil.getInstance(MainThread.class);
}

输出结果:

"D:\Program Files\Java\jdk1.8.0_111\bin\java"2017-02-21 01:06:54,465 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert!selectKey] - ==>  Preparing: select replace(uuid(),'-','') from dual
2017-02-21 01:06:54,509 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert!selectKey] - ==> Parameters:
2017-02-21 01:06:54,548 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert!selectKey] - <== Total: 1
2017-02-21 01:06:54,549 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert] - ==> Preparing: insert into TaskAutoExecutePlan (id,autoExecutePlanType,taskStatus,createDate,modifyDate) values (?, ?, ?, ?, ?)
2017-02-21 01:06:54,563 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert] - ==> Parameters: fa07695af78e11e69fb300fffdc16f2e(String), 256(Integer), 4(Integer), 2017-02-21 01:06:54.124(Timestamp), 2017-02-21 01:06:54.124(Timestamp)
2017-02-21 01:06:54,565 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.insert] - <== Updates: 1
2017-02-21 01:06:54,574 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.getAll] - ==> Preparing: select * from TaskAutoExecutePlan
2017-02-21 01:06:54,575 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.getAll] - ==> Parameters:
2017-02-21 01:06:54,587 [main] DEBUG [com.xxx.mapper.TaskAutoExecutePlanMapper.getAll] - <== Total: 7
b82e7600f78d11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 00:57:54.0,2017-02-21 00:00:00.0
cc754dacf78d11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 00:58:28.0,2017-02-21 00:58:28.0
2e6cb0a8f78e11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 01:01:12.0,2017-02-21 01:01:12.0
3cfe4f81f78e11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 01:01:36.0,2017-02-21 01:01:36.0
576b7b93f78e11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 01:02:21.0,2017-02-21 01:02:21.0
a5de9916f78e11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 01:04:32.0,2017-02-21 01:04:32.0
fa07695af78e11e69fb300fffdc16f2e,MxRasterization,Doing,2017-02-21 01:06:54.0,2017-02-21 01:06:54.0

MyBatis(一):配置并使用的更多相关文章

  1. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  2. MyBatis Cache配置

    @(MyBatis)[Cache] MyBatis Cache配置 MyBatis提供了一级缓存和二级缓存 配置 全局配置 配置 说明 默认值 可选值 cacheEnabled 全局缓存的开关 tru ...

  3. spring和mybatis整合配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  5. Mybatis中配置Mapper的方法

    在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...

  6. MyBatis 实践 -配置

    MyBatis 实践 标签: Java与存储 Configuration mybatis-configuration.xml是MyBatis的全局配置文件(文件名任意),其配置内容和顺序如下: pro ...

  7. SpringMVC+Mybatis+MySQL配置Redis缓存

    SpringMVC+Mybatis+MySQL配置Redis缓存 1.准备环境: SpringMVC:spring-framework-4.3.5.RELEASE-dist Mybatis:3.4.2 ...

  8. spring整合mybatis(hibernate)配置

    一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...

  9. 笔记:MyBatis XML配置详解

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...

  10. mybatis的配置和使用

    mybatis的配置和使用 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

随机推荐

  1. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  2. 前端的UI设计与交互之字体篇

    跨平台的字体设定,力求在各个操作系统下都有最佳展示效果.字体是界面设计中最重要的基本构成之一,用户通过文本来消化内容和完成工作,优雅的字体将大大提升用户的阅读体验及工作效率.在满足不同终端始终保持良好 ...

  3. Java高级篇(一)——线程

    前面我们系统的了解了Java的基础知识,本篇开始将进入到Java更深层次的介绍,我们先来介绍一下Java中的一个重要的概念--线程. 一.什么是线程 在了解线程前,我们首先要了解进程的概念.进程是操作 ...

  4. Vue的组件

    1,局部组件就是在Vue对象内部注册的构造器 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. Android中文API (110) —— CursorTreeAdapter

    前言 本章内容是android.widget.CursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",欢迎访问它的博客:"http: ...

  6. oracle 常用sql字符函数介绍

    常用字符函数介绍 1.ascii 返回与指定的字符对应的十进制数: SQL>select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') ...

  7. [Java] JDK 环境配置(图文)

    Windows10 上的安装配置 1.前往 JDK 官网下载对应 jdk 版本安装包: http://www.oracle.com/technetwork/java/javase/downloads/ ...

  8. WCF配置问题(配置WCF跨域)

    其它的先放一边.今天先来分享一下前段时间给公司做网站WCF服务接口的心得. 配置文件的配置问题 这里既然讨论WCF配置文件的问题,那么怎么创建的就不一一讲解了.好多博主都有提过的.所以直接分享自己开发 ...

  9. RTMP规范协议

    本文参照rtmp协议英文版,进行简单的协议分析 1.什么是RTMP 关于 Adobe 的实时消息协议(Real Time Messaging Protocol,RTMP),是一种多媒体的复用和分组的应 ...

  10. C语言博客作业—嵌套循环

    一.PTA实验作业 题目1:7-4 换硬币 1. 本题PTA提交列表 2. 设计思路 (1)定义整型变量money表示待换的零钱总额,p5表示5分硬币的数量,p2表示2分硬币的数量,p1表示1分硬币的 ...