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. java算法----------二叉树的遍历

    二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...

  2. CodeForces 1060 B Maximum Sum of Digits

    Maximum Sum of Digits You are given a positive integer n. Let S(x)S(x) be sum of digits in base 10 r ...

  3. Tomcat源码分析——请求原理分析(下)

    前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...

  4. C《二》

    开始阅读谭浩强的C语言程序设计. 编译一个程序,除了语法以外,还需要管理内存,就是数据结构,学习如何高效的利用内存:数据关系的处理.例如学生管理系统的开发,但是数据关系是有最优解的,也就是可以学会的, ...

  5. Html与Css关联到一起

    在HTML文件中使用Link标签连接独立的Css文件 将Link标签放在head标签中 like标签是空标签,只写开始标签,不写结束标签 我们需要为like标签设置一些属性 type的值设置为text ...

  6. C# 之多线程(二)

    一.确定多线程的结束时间,thread的IsAlive属性 在多个线程运行的背景下,了解线程什么时候结束,什么时候停止是很有必要的. 案例:老和尚念经计时,2本经书,2个和尚念,一人一本,不能撕破,最 ...

  7. GridFS使用及配合nginx实现文件服务

    Mongodb下GridFS使用及配合nginx实现文件服务 一.GridFS简介 GridFS是mongodb下用来存储文件的一种规范,所有官方支持的驱动均实现了GridFS规范. Mongodb本 ...

  8. Cheatsheet: 2018 05.01 ~ 07.31

    JAVA Java Tips: Creating a Monitoring-Friendly ExecutorService Other Modeling the Card Game War in C ...

  9. 撩课-Java每天10道面试题第6天

    51.HashMap的实现原理 HashMap的主干是一个Entry数组. Entry是HashMap的基本组成单元, 每一个Entry包含一个key-value键值对. HashMap基于hashi ...

  10. 浅谈Android项目----JSON解析(4种解析技术详解)

    json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...