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 中 利用正则表达式 获取 网页图片

    import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;i ...

  2. Laravel框架中的make方法详解

    为什么网上已经有这么多的介绍Laravel的执行流程了,Laravel的容器详解了,Laravel的特性了,Laravel的启动过程了之类的文章,我还要来再分享呢? 因为,每个人的思维方式和方向是不一 ...

  3. Go语言学习1

    1.go标示符:非空字母或者数字串,第一个必须是字母,不能为关键字,可以是下划线. 2.go关键字: break,default,func,interface,select, case,defer,g ...

  4. Eclipse CDT开发环境搭建及问题记录(Windows)

    这两天在整Eclipse,在此记录过程中遇到的一些问题. 1.安装JDK,配置系统路径: 2.下载Eclipse 直接访问Eclipse官网(https://www.eclipse.org/downl ...

  5. 通过jersey-client客户端调用Jersey的Web服务模拟CURD

    一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...

  6. WEB 表格测试点

    Web页面的表格测试点: 1.表格列名 2.表格翻页.表格跳转到多少页.最后一页.首页 3.表格每页显示的数据, 数据的排序 4.表格无数据 5.表格支持的最大数据量 6.表格中数据内容超长时,显示是 ...

  7. JAVA设计模式之【装饰者模式】

    JAVA设计模式之[装饰者模式] 装饰模式 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用. 在软件设计中,对已有对象(新房)的功能进行扩展(装修). 把通用功能封装在装 ...

  8. Beta No.4

    今天遇到的困难: 百度位置假死的问题研究发现并不是源于代码的问题,而是直接运行在主线程中会出现诸多问题 Fragment碎片刷新时总产生的固定位置的问题未果 今天完成的任务: 陈甘霖:修复了部分Bug ...

  9. alpha-咸鱼冲刺day1-紫仪

    总汇链接 一,合照 emmmmm.自然是没有的. 二,项目燃尽图 三,项目进展   登陆界面随意写了一下.(明天用来做测试的) 把学姐给我的模板改成了自家的个人主页界面,侧边栏啥的都弄出来了(快撒花花 ...

  10. B-day5

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:昨天虽然完成了风险数据的图表统计,但是界面风格仍然不太满意,还在抓紧调试中:还有登录页的背景图,在想应该如何设计, 什么样的风格才好. ...