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. 利用github协作开发步骤

    项目使用IDEA开发,IDEA上可以加载很多的插件(而且下载很快),安装github插件,安装git 首先一个成员需要创建好代码库,这个代码库存放项目,所有的开发提交代码都是向这个库提交,在githu ...

  2. Mycat 常用管理命令说明

    Mycat 提供了类似数据库的管理监控方式,可以通过 MySQL 命令行登陆管理端口 9066 执行相应的 SQL 语句进行管理,可以可以通过 JDBC 的方式进行远程连接管理,使用 MySQL 命令 ...

  3. 笔记:I/O流-ZIP文档

    ZIP文档以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含诸如每个文件名字和所使用的压缩方法等信息,在 Java 中可以使用 ZipInputStream 来读入ZIP 文档,getNe ...

  4. 关于synchronized与volatile的小析

    简单点说:synchronized很强大,既可以保证原子性,也可以保证可见性,而volatile不能保证原子性: 可见性:一个线程对共享变量值的修改,能够及时的被其它线程看到. 共享变量:如果一个变量 ...

  5. 大数据 --> ProtoBuf的使用和原理

    ProtoBuf的使用和原理 一.简介 Protobuf是一个灵活的.高效的用于序列化数据的协议.相比较XML和JSON格式,protobuf更小.更快.更便捷.Protobuf是跨语言的,并且自带了 ...

  6. Oracle profile 使用技巧

    给scott用户分配一个profile要求如下: 1.尝试登录的次数最多4次: 2.如果4次输入错误,则锁定该用户2天: 3.密码每隔5天修改一次,宽限期为2天: 答: SQL>conn sys ...

  7. 【Spring系列】Spring mvc整合redis(非集群)

    一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...

  8. JavaScript(第二十八天)【Cookie与存储】

    随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案:cookie诞生了.cookie的意图是:在本地的客户端的磁盘上以很小的文件形式保存数据.   一.Cook ...

  9. Java暑期作业

    一.假期观影笔记--<熔炉> 影片<熔炉>是根据发生在韩国光州聋哑学校里的真实事件而改编.影片讲述的是在一所聋哑儿童学校里,校长.教务以及老师披着慈善的华丽外衣对学校中的多名未 ...

  10. 2017-2018-1 1623 bug终结者 冲刺002

    bug终结者 冲刺002 by 20162329 张旭升 今日冲刺任务: 能够显示主菜单和功能 游戏需要提供主菜单让玩家进行游戏设置,同时能能够把地图文件中的信息转换成为图像显示到游戏界面上 能够实现 ...