一、MyBatis 介绍

1.1 简单介绍

MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis。2013 年 11 月迁移到 Github。

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

GitHub 地址:https://github.com/mybatis/mybatis-3
官方文档:http://www.mybatis.org/mybatis-3/zh/getting-started.html

1.2 主要特点
  • 简单易学,没有任何第三方依赖,最简单安装+配置几个 SQL 映射文件即可进行开发。
  • 易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。官方文档提供中文翻译。
  • 灵活,MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。
  • 解除 SQL 与程序代码的耦合,SQL 和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的 orm 字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供 XML 标签,支持编写动态 SQL。

以上内容主要来自百度百科,介绍的还挺详细的。

二、为什么要使用 MyBatis

2.1 传统的 JDBC 开发流程

在传统的 JDBC 开发项目的过程中,SQL 语句夹杂在代码块里,导致代码之间的耦合度高,硬编码现象普遍存在。这样就导致后期代码不易维护。

2.2Hibernate 开发流程

Hibernate 意在消除 SQL,所以在使用 Hibernate 的时候所有的执行流程都由框架处理,包括 SQL 语句的编写,这些操作对用户都是不可见的。这样做是很方便,简化了程序人员的开发,但是由于 SQL 语句由框架生成,这样就导致很难对 SQL 语句进行优化,造成数据库的性能下降,并且对于非常复杂的 SQL 语句,Hibernate 处理起来也不太容易。

当然 Hibernate 也提供了 HQL 技术,把编写 SQL 语句的任务交给程序开发人员,这样就导致学习成本变高。

2.3MyBatis 开发流程

MyBatis 把编写 SQL 的任务单独提取出来交由程序人员实现,从而使 SQL 与 Java 代码分开,不仅降低了代码之间的耦合,并且在进行 SQL 优化的时候也很容易。所以说 MyBatis 功能边界划分的很清晰,这也是为什么它那么受欢迎的原因。

三、编写 MyBatis 的 Hello World

3.1 开发流程
  1. 编写全局配置文件,用于创建SqlSessionFactory 对象和封装 SQL 映射文件,以及做一些其他设置。
  2. 在 SQL 映射文件内编写对应的 SQL 语句,以及封装规则。
  3. 将 SQL 映射文件映射在 XML 全局配置文件中。
  4. 编写代码。
        1)、创建SqlSessionFactory 对象。
        2)、通过SqlSessionFactory 对象获得SqlSession对象,用该对象来执行对数据库的操作。
        3)、使用 SQL 的唯一标识来告诉SqlSession对象来执行哪条 SQL 语句。
        4)、关闭SqlSession对象。
3.2 环境准备

博主使用的开发工具是 IDEA,并使用了 Maven 项目管理工具。

数据库表结构:

DROP TABLE IF EXISTS `t_employee`;
CREATE TABLE `t_employee` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(30) DEFAULT NULL,`gender` char(1) DEFAULT NULL,`email` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

pom.xml中添加如下依赖:

         <!-- MyBatis 的依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version></dependency><!-- log4j 的依赖,用于在控制台查看执行的 SQL 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>

项目工程目录:

3.3 搭建 Hello World

员工类Employee

public class Employee {private Integer id;private String username;private Character gender;private String email;/** 省略 get 、set 与 toString 方法 */
}

log4j.xml,只用来在控制台输出 SQL 日志,在这里没有其他的作用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root>
</log4j:configuration>

全局配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!-- 配置数据源 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis-study"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment></environments>
</configuration>

SQL 映射文件EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间id:唯一标识resultType:返回值类型,这里返回的是 Employee 对象
-->
<mapper namespace="com.jas.mybatis.helloworld.EmployeeMapper"><select id="getEmpById" resultType="com.jas.mybatis.helloworld.Employee"><!-- #{id} 表示要传进来的参数,类似于 JDBC SQL 语句中的 '?' -->select * from t_employee where id = #{id}</select>
</mapper>

在全局配置文件mybatis-config.xml中注册 SQL 映射文件EmployeeMapper.xml

    <mappers><mapper resource="EmployeeMapper.xml"/></mappers>

编写测试代码

public class MybtisTest {@Testpublic void helloWorld() throws Exception{String resource = "mybatis-config.xml";InputStream is = Resources.getResourceAsStream(resource);// 创建 SqlSessionFactory 对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);// 创建 SqlSession 对象SqlSession sqlSession = sqlSessionFactory.openSession();// 用 SqlSession 对象操作数据库// 第一个参数表示在 SQL 映射文件中的唯一标识,最好加上名称空间的名字// 第二个参数表示执行 SQL 时传入的参数Employee employee = sqlSession.selectOne("com.jas.mybatis.helloworld.EmployeeMapper.getEmpById", 1);// 关闭 sqlSession 对象sqlSession.close();System.out.println(employee);}}

执行结果

到这里基于 MyBatis 的一个 Hello World 就算完成了。MyBatis 通过配置文件的形式将 SQL 语句封装起来,对外提供一个唯一标识调用。这样一来,SQL 语句的编写完全与代码分离开来,降低了代码之间的耦合度,在进行 SQL 语句优化的时候,只需要到对应 SQL 映射文件中进行优化即可。

四、总结

这篇博文主要介绍了 MyBatis 的概念,具有的相对优势,并通过一个简单的 Hello World 快速体验 MyBatis,希望可以为读者提供帮助。如果你想了解更多关于 MyBatis 的知识,请继续关注后续博文。

MyBtis快速入门相关推荐

  1. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  2. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  3. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  4. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  5. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  6. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  7. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  8. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

  9. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

最新文章

  1. 每次输出日志前需要判断日志的级别吗?
  2. 邻域闭包matlab,闭包 - it610.com
  3. 2013年,移动App设计的13大精髓
  4. Spring 使用 JSR303自定义校验注解+分组校验
  5. c语言实训模块化程序设计,C语言 实验三 模块化程序设计.doc
  6. 【详细注释】1058 选择题 (20 分)
  7. 2019年9月中国编程语言排行榜,C#排第三
  8. jeecg框架alert消息样式
  9. 重置studio 3T 14天试用
  10. h5跳转小程序_微信小程序吞掉H5?
  11. nodejs进入mysql数据库_nodejs简单访问及操作mysql数据库的方法示例
  12. 在經歷了8個Beta版和1個RC版後
  13. sql 系统 存储过程的使用方法 转载
  14. php饼图只有一个小方块_如何用Python画一个好看的饼图
  15. 探究文华盘整(PANZHENG)函数之一
  16. Pywin32操控Excel——2. 筛选与排序
  17. Zabbix监控流量异常(偶尔超出交换机限制)
  18. 晶振(crystal)与晶振(oscillator)的区别
  19. 搜索下半场:微信要做大搜索吗?
  20. 【腾讯】2017暑期实习生

热门文章

  1. spring boot报错Invalid numeric value: Leading zeroes not allowed
  2. vuepress 2.x 集成百度统计
  3. [JSOI2008]星球大战
  4. github的基础使用
  5. 计算机网络【在一个1Mb/s的卫星信道上发送1000bit长的帧。确认总是捎带在数据帧中。帧头很短,使用3位的序列号。对以下协议而言,可以取得的最大信道利用率是多少?(a)停-等协议;(b)(c)】
  6. Bootstrap4+MySQL前后端综合实训-Day09-PM【实训汇报、在同一校园网下,查看别人的项目——ipconfig】
  7. Java07-day07【类和对象、对象内存图、成员变量与局部变量、private、this、封装、构造方法】
  8. Java01-day01【发展史、跨平台原理、JRE和JDK、常用DOS命令、关键字、常量、数据类型、变量使用的注意事项、标识符、类型转换】
  9. 浅谈Volatile与多线程
  10. Eclipse:Target runtime XXX is not defined