1、MyBatis简介

MyBatis是这个框架现在的名字,而此框架最早的名字是IBatis,其名字的含义是“internet”、“abatis”两个单词的组合,是在2002年的时候开始的一个开源项目,在2010年6月16日Apache将项目交与Google进行管理,更名MyBatis。所以2010年之后,MyBatis框架逐渐成为主流,比Hibernate发展更快。

IBatis和MyBatis两者的操作原理是相同的。IBatis变为了MyBatis之后,核心操作没有改变,但是配置部分有部分变化。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

持久层发展:实体Bean的设计思想 → JDO → Hibernate → MyBatis → JPA标准。MyBatis的性能优于Hibernate。

MyBatis官网:http://www.mybatis.org/mybatis-3/

2、第一个MyBatis程序

本次使用Eclipse的Maven进行项目的构建,在pom.xml文件中添加如下代码;如果使用普通Java项目按需添加Jar包即可。

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>

在项目下新建目录:config,将config目录添加到classpath中(Build Path)。

范例:配置数据库信息config/dbconfig.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF8
username=root
password=mysqladmin

范例:MyBatis核心配置文件config/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>
<!-- 资源文件 -->
<properties resource="dbconfig.properties"/> <environments default="development"> <!-- 定义数据库连接池 -->
<environment id="development"> <!-- 一个数据库的资源配置 -->
<transactionManager type="JDBC"/> <!-- 进行事务管理 -->
<dataSource type="POOLED"> <!-- 配置数据源 -->
<!-- 数据库的驱动程序路径,配置的mysql驱动包中的类名称 -->
<property name="driver" value="${driver}"/>
<!-- 数据库的连接地址 -->
<property name="url" value="${url}"/>
<!-- 数据库连接的用户名 -->
<property name="username" value="${username}"/>
<!-- 数据库的连接密码 -->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!-- 配置的是每一张表的映射文件 -->
<mappers>
<!-- 映射文件路径, 与POJO类同包 -->
<mapper resource="com/github/logsave/pojo/EmpMapper.xml"/>
</mappers>
</configuration>

对于一些配置做如下解释:

  1. 关于“<transactionManager type="jdbc" /> ”配置

    此处表示进行事务的配置,但是在MyBatis中有两种事务配置方式:

    • JDBC :表示使用 JDBC 这种比较简单的方式进行事务的提交或回滚,同时它依赖于从数据源得到的连接来管理事务形式;
    • MANAGED:此配置几乎没有什么用处,它即不提交事务也不回滚事务,而是让容器来管理整个生命周期(例如:Spring 就是一个容器,负责所有对象的生命周期的控制) 。
  2. 关于“<dataSource type="POOLED"> ”配置
    dataSource 主要使用基本的 JDBC 数据源接口来配置 JDBC 连接对象。而在 MyBatis 之中提供有三种可用的数据源配置类型:

    • UNPOOLED:这个数据源的实现是每次请求时简单打开和关闭连接操作。不过它的性能有一些慢,如果是一些简单的应用程序可以适用,因为它不需要及时取得可用连接。不过不同的数据库对此操作的表现也有所不同,所以对某些数据库来说配置数据源不重要,那么使用的机会也就少了,几乎不用;
    • POOLED :是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间,速度会快一些,这个是现在开发之中主要使用的形式;
    • JNDI:使用一些容器里面配置的数据库连接池,此处就是配置一个名称引用。
  3. 关于“<mappers> ”配置
    这块为 MyBatis 的核心配置,主要是利用它来决定操作的数据表。

建立一张emp表,创建对应的简单Java类也是Emp类。

范例:建立数据库脚本

-- 创建'mybatis'数据库
CREATE DATABASE mybatis CHARACTER SET UTF8;
-- 创建'emp'数据表
CREATE TABLE emp (
empno INT(4),
ename VARCHAR(10) NOT NULL ,
job VARCHAR(9) ,
mgr INT(4) ,
hiredate DATE ,
sal DOUBLE(7,2) ,
PRIMARY KEY (empno)
);

范例:定义简单Java类--Emp.java

package com.github.logsave.pojo;
import java.util.Date;
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private double sal;
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job
+ ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal="
+ sal + "]";
}
}

此时虽然建立了Java类,但是简单Java类一定需要一个与它配合的映射文件。数据库Emp表对应的简单Java类是Emp.java,与Java类同一路径下新建EmpMapper.xml文件。

范例:定义EmpMapper.xml文件

<?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">
<!-- 每个POJO都对应MyBatis的一个命名空间,不能重复。
设置命名空间,可以与不同表的同类型操作进行区分,使用时以“namespace.id”的方式调用。
命名空间任意命名,均可正常调用,确保唯一性,一般按表名称实体类或表名称。
resultType使用全路径。
-->
<mapper namespace="com.github.logsave.pojo.EmpMapper">
<select id="selOne" resultType="com.github.logsave.pojo.Emp">
SELECT * FROM emp WHERE empno = #{empno}
</select> <insert id="creatOne" parameterType="com.github.logsave.pojo.Emp">
INSERT INTO emp(empno,ename,job,mgr,hiredate,sal)
VALUES (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal})
</insert>
</mapper>

增加操作之中是针对于简单Java类之中的内容进行取出并填充,所以在访问属性的时候使用“#{属性名称}”,编写SQL语句时最后一定不要加“;”。

多个XML配置文件及POJO之间相互引用,初学MyBatis容易出错。配置文件之间的引用关系如下图:

范例:编写程序完成数据增加操作

package com.github.logsave.test;

import java.io.IOException;
import java.io.Reader;
import java.util.Date; 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 com.github.logsave.pojo.Emp; public class Test01 { public static void creat(SqlSession sqlSession) {
Emp emp = new Emp();
/**
* 测试时运行第二次会报错:Duplicate entry '7499' for key 'PRIMARY'
* 原因是主键冲突了,修改Empno即可。
*/
emp.setEmpno(7499);
emp.setEname("ALLEN");
emp.setJob("SALESMAN");
emp.setMgr(7695);
emp.setHiredate(new Date());
emp.setSal(1600.00); System.out.println("数据更新行数:"
+ sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne",emp));
sqlSession.commit(); // 事务提交
} public static void selectByEmpNo(SqlSession sqlSession,int empno) {
System.out.println(sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne",empno));
}
public static void main(String[] args) { try {
// 1、取得操作的SqlSession对象
String resource = "mybatis-config.xml"; // MyBatis配置文件路径
Reader reader = Resources.getResourceAsReader(resource); // 当前配置文件输入流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 数据库会话工厂
SqlSession sqlSession = sqlSessionFactory.openSession(); // 取得连接 // 2、操作简单Java类
// creat(sqlSession); // 增加数据
selectByEmpNo(sqlSession,7499); // 按empno查询数据 sqlSession.close(); // 关闭连接
} catch(IOException e) {
e.printStackTrace();
}
}
}

此时数据库之中已经正常保存了我们添加的数据。

总结一下MyBatis操作的步骤:

  • 通过 Resources 取得配置文件(mybatis-config.xml )的信息,通过 Resource 取得一个 Reader 对象路径;
  • 通过此 Reader对象肯定要读取配置,读取的配置用于实例化 SqlSessionFactoryBuilder 类对象,通过 SqlSessionBuilder 来建立 SqlSessionFactory 类对象;
  • 利用 SqlSessionFactory 打开 SqlSession 对象;
  • 利用 SqlSession 来实现数据的 CRUD 操作;
  • 如果是更新则提交事务后关闭连接。

程序源码

【MyBatis】 MyBatis入门的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 一 mybatis快速入门

    什么是MyBatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBatis可以使用简 ...

  7. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  8. mybatis快速入门(六)

    前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...

  9. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  10. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

随机推荐

  1. WPF中使用RenderTransformOrigin来控制动画的起点

    Render :渲染:Transform:动画:Origin:起点 RenderTransformOrigin:渲染动画的起点 取值为一个坐标的形式  取值范围: 0,0 到 1,1 0,0:表示左上 ...

  2. 哪些网站需要HTTPS(SSL证书)

    很多站长似乎不了解https站点是怎么回事,这就要从传统站点说起:传统的站点的http超文本传输协议,采用明文传输模式,存在着大量的灰色中 间环节,明文信息在中间代理服务器.路由器.wifi热点.通信 ...

  3. mvc手把手教你写excel导入[mvc+三层,没用EF]

    实习狗的每天新知识日常 准备工作: 1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113 2.NPOI学习系列教 ...

  4. PhpStorm 破解及 XDebug 调试

    PhpStorm 破解及 XDebug 调试 PhpStorm 破解 PhpStorm 10.0.2 破解 地址:http://jingyan.baidu.com/article/20095761cb ...

  5. [PHP] 从 PHP 5.3.X 迁移到 PHP 5.6.X不兼容点

    从 PHP 5.3.X 迁移到 PHP 5.4.X不兼容点: 1.不再支持 安全模式 2.移除 魔术引号,设置 magic_quotes_gpc 系列将不会生效 3.Salsa10 和 Salsa20 ...

  6. 判断php变量是否定义,是否为空,是否为真的一览表

    分类: 使用 PHP 函数对变量 $x 进行比较 表达式 gettype() empty() is_null() isset() boolean : if($x) $x = ""; ...

  7. Kinect1驱动 PCL OpenCV ROS 安装

    1. OpenCV安装 1)在终端安装依赖项sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev li ...

  8. 前端(八):react入门

    React 特点:声明式设计.虚拟DOM.JSX.组件.数据驱动. 一.环境搭建 1.安装npm.cnpm # 安装node.js 从而安装npm,它会在当前用户家目录下生成node_moudules ...

  9. java设计模式-----3、抽象工厂模式

    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创 ...

  10. 闲谈:乌云上那些 web-based 的 QQ 漏洞

    0×00 起始 昨日凌晨,看到爱尖刀团队发布了一条“腾讯客户端XSS,已第一时间提交至TSRC”的微博,心想,腾讯又出此类漏洞了.今日,由于有一位名叫“阿布”的同学将该漏洞发布到了乌云,引来不少争吵甚 ...