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. Greetings

    1,Common English Greetings Hey! Hey man! Hey girl! Hi. How's it going? How are you doing? What's up? ...

  2. NodeJs实现下载Excel文件

    nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / ...

  3. 【CSS】 CSS基础知识 属性和选择

    css基础知识 html的基本标签都是千篇一律的,为了能够个性化外观,就需要进行样式的调整,而css就是专门用来维护,管理样式的一种格式.在html中定义css有三种方法 1. 为标签添加style属 ...

  4. MyBatis-plus 代码生成器

    1.添加pom文件依赖 <!-- Mybatis-Plus 自动生成实体类--> <dependency> <groupId>com.baomidou</gr ...

  5. Matlab绘图基础——给图像配文字说明(text对象)

      text对象 (1)text(x坐标,y坐标,'string')在图形中指定位置(x,y)显示字符串string.(2)Editing有效值为on/off,off时,用户在执行GUI操作时无法直接 ...

  6. Android Intent 基本使用及对象构成

    Intent基本使用 Intent可以理解为不同组件通信的媒介或者信使. Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast. 具体方法如下表 ...

  7. virtualbox主机与虚拟机之间互相通信教程

    前言 在使用虚拟机搭建集群时,需要实现虚拟机与虚拟机之间互相ping通,并且主机与虚拟机也可以互相ping通. 一.环境准备: 1.主机为win7 2.virtualbox下创建两台ubuntu虚拟机 ...

  8. java使用io创建文件与删除文件的工具类

    java中对于文件的操作,是再常见不过了.以下代码是自己代码中所用到的工具类,仅供参考. import java.io.File; import java.io.IOException; /** * ...

  9. RabbitMQ封装实战

    先说下背景:上周开始给项目添加曾经没有过的消息中间件.虽然说,一路到头非常容易,直接google,万事不愁~可是生活远不仅是眼前的"苟且".首先是想使用其他项目使用过的一套对mq封 ...

  10. 201621123050 《Java程序设计》第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1 写出你 ...