最近抽空学习了Mybatis这个框架,在学习的过程中也找了很多的文章,个人感觉官网上的东西太多太杂,不适合许多希望一步步快速上手的朋友们,当然觉得查阅问题的时候可以直接通过官网找还比较快或者是StackOverflow,鉴于此原因把自己想把自己学习过程中的经验留作笔记以供分享参考之用,尽量少绕弯路。因为想直接了解Mybatis的使用方式,而网上有许多学习文章是Mybatis与Spring的结合范例,或者说直接在Web Project项目下创立的范例,感觉对于只是纯粹想了解那个东西怎么使用的朋友应该不需要那么多附加的条件,所以本系列中直接用最简单的Java Project作范例演示。

  什么是Mybatis,前身iBatis(个人没用过,所以没什么发言权),引述官网的原意来说,Mybatis是支持普通SQL查询,可以更简单直接的操作SQL,存储过程和高级映射的一种优秀的持久层框架,使用它基本可以消除所有的JDBC大麦和参数的手工设置以及结果集的检索,其实个人使用下来感觉,其实主要工作都是在配置XML或者注解上,然后将接口和Java的POJO(普通Java对象映射成数据库的记录),个人没用过Java的Hb,所以对于两者之间的差异性也没权限发表意见,我相信各个事物的产生总有它自己的目的。

  这段时间学习下来,其实对Mybatis来说主要的过程无法是以下几步

  1. 从XML配置文件中获取SessionFactory,然后由SessionFactory产生相应的Session。

  2. 是用Session对象对业务数据完成相应的CRUD操作(增删改查)和相应的事务控制。

  3. 使用完毕后关闭相应的Session,以免过度占用资源

  4. 使用配置相应的Mapper xml文件进行业务实体的JavaBean与数据库表之间做相应的Map操作

  

战前准备:

  1. 开发环境Eclipse JavaEE IDE,JDK 1.6,数据库mysql 5.5

  2. 下载相应Jar包,以备后用

    mybatis-3.2.3.zip 解压后拿出 mybatis-3.2.3.jar,=> 下载地址: http://code.google.com/p/mybatis/ (Mybatis核心包)

    mybatis-generator-core-1.3.1.jar => 下载地址: http://code.google.com/p/mybatis/wiki/Generator (Mybatis自动生成配置文件包)

    mysql-connector-java-5.1.26-bin.jar => 下载地址:http://dev.mysql.com/downloads/connector/j/ (Mysql 的jdbc驱动包)

  

  接下来大家可以再Eclipse下面建一个名为MybatisDemo的Java Project项目,按照如下图中所示新建相应的包结构和文件夹结构,其中config与mapper分别为文件夹,

  包david.mybatis.demo与包david.mybatis.model下分别存放相应的demo运行程序与Javabean对象,lib文件夹下存放刚刚下载的那几个第三方jar包。

            

  

  

  建完下面的目录,我们可以添加相应的Jar包,如下图

  

  

  完成后,执行下面SQL,建立DEMO所需的表结构,分别有3张表,Visitor(访问者表),Website(网站表),Channel(频道表)

  

/*创建Visitor*/
CREATE TABLE Visitor
(
Id INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
Email VARCHAR(1000) NOT NULL,
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime,
PRIMARY KEY(Id)
)
/*创建网站表*/
CREATE TABLE Website
(
Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
VisitorId INT REFERENCES Visitor(Id),
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime
) /*创建频道表*/
CREATE TABLE Channel
(
Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
WebsiteId INT REFERENCES Website(Id),
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime
)

建表SQL

所有这些都完成后,我们就要开始动手啦~

就像开头说的,Mybatis的所有配置都源于一份XML配置文件,我们需要在config文件夹下,新建名为mybatis_demo_config.xml的配置文件,这一份东西就是我们后面所需要操作的核心之一。

在配置这个文件千万要注意<configuration>节点内的元素都是有层级顺序的要求的,不能够随意更换次序,否则在加载xml配置文件的时候会出现异常而导致后续操作不成功。

具体的节点说明大家可以查看http://mybatis.github.io/mybatis-3/zh/configuration.html#,这里只说比较常用的节点,typeAliases,environments,mappers。

1. typeAliases => 别名节点,可以通过设置这个节点的属性,这样配置文件中其他需要实体名字的地方都可以使用此别名而不是完全限定名

例如 <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />

2. environments => 环境节点,配置数据连接相关的信息

3. mappers => 配置SQL映射语句。

最简单的配置如下:

<?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 type="david.mybatis.model.Visitor" alias="Visitor" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- ?useUnicode=true&amp;characterEncoding=utf8为了支持中文插入 -->
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis_db?useUnicode=true&amp;characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/VisitorMapper.xml" />
</mappers>
</configuration>

XML配置

在包david.mybatis.demo下面新建一个名为MyBatisUtils类,里面存放获取SqlSession与关闭SqlSession的方法,提炼出来方便多次复用。

package david.mybatis.demo;

import java.io.InputStream;
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 david.mybatis.model.CRUD_Enum; public class MybatisUtils { private static final String CONFIG_PATH = "config/mybatis_demo_config.xml"; /*
* 获取数据库访问链接
*/
public static SqlSession getSqlSession() {
SqlSession session = null;
try {
InputStream stream = Resources.getResourceAsStream(CONFIG_PATH);
//可以根据配置的相应环境读取相应的数据库环境
// SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(
// stream, "development");
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(stream);
session = factory.openSession();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return session;
} /*
* 获取数据库访问链接
*/
public static void closeSession(SqlSession session) {
session.close();
} /*
* 返回操作记录消息
*/
public static void showMessages(CRUD_Enum type, int count) {
switch (type) {
case Add:
System.out.println("添加了" + count + "条记录。");
break;
case Delete:
System.out.println("删除了" + count + "条记录。");
break;
case Update:
System.out.println("更新了" + count + "条记录。");
break;
case Query:
System.out.println("匹配了" + count + "条记录。");
break;
case List:
System.out.println("共有" + count + "条记录。");
break;
default:
break;
}
}
}

MybatisUtils工具类

在包david.mybatis.model下面新建一个名为Visitor的类,用来作相应的OR Mapping。

package david.mybatis.model;

import java.text.SimpleDateFormat;
import java.util.Date; public class Visitor {
private int id;
private String name;
private String email;
private int status;
private Date createTime; public Visitor() {
// TODO Auto-generated constructor stub
createTime = new Date();
} public Visitor(String name, String email) {
this.name = name;
this.email = email;
this.status = 1;
this.createTime = new Date();
} public int getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setEmail(String email) {
this.email = email;
} public String getEmail() {
return email;
} public Date getCreateTime() {
return createTime;
} @Override
public String toString() {
// TODO Auto-generated method stub
return String.format("{Id: %d, Name: %s, CreateTime: %s}", id, name,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
}
}

Visitor类

在包david.mybatis.demo下面新建一个VisitorMapper.xml,用来映射相应SQL语句。

这里要注意namespace=>david.mybatis.demo.IVisitorOperation一定要与对应这个包下面的实际文件名,IVisitorOperation否则无法成功加载相应的映射文件

<mapper namespace="david.mybatis.demo.IVisitorOperation">
<select id="basicQuery" parameterType="int" resultType="Visitor">
select * from visitor where id=#{id} and
Status>0 order by Id
</select>
</mapper>

IVisitorOperation接口

接下来运行下面的程序

    public static void testBasicQuery(int id) {
SqlSession session = MybatisUtils.getSqlSession();
try {
Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
MybatisUtils.closeSession(session);
System.out.println(visitor);
} catch (Exception e) {
// TODO: handle exception
}
}

基础查询

一个最简单的执行结果就出来啦

这算是Mybatis系列的HelloWord,下回会讲述关于使用接口的方式进行相应操作。

  

一步步学Mybatis-搭建最简单的开发环境-开篇(1)的更多相关文章

  1. 一步步教你搭建TinyOS2.1.2开发环境

    (本教程使用的是VirtualBOX +ubuntu14.04+tinyos2.1.2) note:看了非常多的tinyos的安装教程.区别不是非常大,无非就是安装编译器配置环境等.尽管简单,但还是有 ...

  2. 搭建一套Java开发环境以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载JDK. https://www.oracle.com/tech ...

  3. 极其简单的搭建eclipse的android开发环境

    这篇博客是关于如何搭建eclipse的android开发环境, 与网上的其他博客不同,我的方法比他们简单的多,所 以推荐给大家. 搭建eclipse的android开发环境步骤: 1.配置JDK(Ja ...

  4. 【Head First Servlets and JSP】笔记6:什么是响应首部 & 快速搭建一个简单的测试环境

    搭建简单的测试环境 什么是响应首部 最简单的响应首部——Content-Type 设置响应首部 请求重定向与响应首部 在浏览器中查看Response Headers 1.先快速搭建一个简单的测试环境, ...

  5. 【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)

    首先.在開始搭建MyEclipse的开发环境之前.还有三步工具的安装须要完毕,仅仅要在安装配置成功之后才干够进入以下的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官 ...

  6. Grunt搭建自动化web前端开发环境--完整流程

    Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...

  7. react-native —— 在Windows下搭建React Native Android开发环境

    在Windows下搭建React Native Android开发环境 前段时间在开发者头条收藏了 @天地之灵_邓鋆 分享的<在Windows下搭建React Native Android开发环 ...

  8. 搭建Eclipse C/C++开发环境

    搭建eclipse C/C++开发环境:     1.下载并安装Eclipse for C++:http://www.eclipse.org.最新版是基于Eclipse 3.5 galileo,文件名 ...

  9. windows下搭建Apache+Mysql+PHP开发环境

    原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2;MySQL Server 5. ...

随机推荐

  1. 记录一次cefsharp1输入法在win7下异常解决定位

    最近几天都被基于cefSharp封装的浏览器控件搞疯了!对于cefSharp基本满足当前所做项目的需求,但是有一个问题一直困扰我,那就是系统中偶尔会出现输入法不能转换到中文.而且这个问题似乎没有什么规 ...

  2. Laravel不同数据库的模型之间关联

    假设ModelA和ModelB之间是BelongsTo的关系 如果同属于一个数据库连接 那么 public function a(){ return $this->belongsTo(" ...

  3. 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码

    JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...

  4. pick定理:面积=内部整数点数+边上整数点数/2-1

    //pick定理:面积=内部整数点数+边上整数点数/2-1 // POJ 2954 #include <iostream> #include <cstdio> #include ...

  5. 设计模式 外观 Facade

    外观模式的作用是简化接口.它提供一个统一的接口用来访问子系统的一群接口.通过这个高层接口使子系统更容易使用. 同时,通过外观将客户从组件的子系统中解耦. Head 1st中使用了家庭影院的例子来说明外 ...

  6. Eclipse中用Link方式安装Maven插件(转载)

    标签: it 分类: 开发软件 1.工具下载: Eclipse4.2 jee版本(注意是Jee,不是标准版的eclipse) 下载地址:http://www.eclipse.org/downloads ...

  7. [转] AOP面向切面编程

    AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  8. xargs 简单功能

    之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如: find /sbin -perm +700 |ls -l       这个命 ...

  9. Strider-test 相关配置

    package.json { "name": "test-node", "version": "0.0.0", &quo ...

  10. pd虚拟机死机怎么解决

    最近在mac上使用pd虚拟机装win使用,今天发现pd中的win7虚拟机死机了,无论怎么点都没用,通过点击操作-关闭也不行,重启电脑也不行,后来找到一种办法可以重启虚拟机. 1.先通过菜单中止虚拟机, ...