封面:洛小汐
作者:潘潘
Mybatis 是一套长久层框架,灵便易用,特地风行。
前言
Mybatis系列全解,咱们预计筹备10+篇文章,让咱们理解到 Mybatis 的根本全貌,真正从入门到上手,从上手到精通,本文为首篇,咱们开始。
Mybaits系列全解 (继续更新)
- Mybatis系列全解(一):手写一套长久层框架
- Mybatis系列全解(二):Mybatis简介与环境搭建
- Mybatis系列全解(三):Mybatis简略CRUD应用介绍
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
- Mybatis系列全解(六):Mybatis最硬核的API你晓得几个?
- Mybatis系列全解(七):全息视角看Dao层两种实现形式之传统形式与代理形式
- Mybatis系列全解(八):Mybatis的动静SQL
- Mybatis系列全解(九):Mybatis的简单映射
- Mybatis系列全解(十):Mybatis注解开发
- Mybatis系列全解(十一):Mybatis缓存全解
- Mybatis系列全解(十二):Mybatis插件开发
- Mybatis系列全解(十三):Mybatis代码生成器
- Mybatis系列全解(十四):Spring集成Mybatis
- Mybatis系列全解(十五):SpringBoot集成Mybatis
- Mybatis系列全解(十六):Mybatis源码分析
目录
1、Mybatis是什么
2、Mybatis的前世今生
3、Mybatis的劣势
4、Mybatis整体架构图
5、环境搭建
6、总结
Mybatis是什么
咱们先看一下官网简介,Mybatis 官网:https://mybatis.org/mybatis-3/
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
大抵翻译为:
MyBatis是一款优良的长久层框架,它反对定制化SQL、存储过程以及高级映射。MyBatis防止了简直所有的JDBC代码和手动设置参数以及获取后果集。MyBatis能够应用简略的XML或注解来配置和映射原生类型、汇合接口以及Java的POJO(Plain Old Java Objects,一般老式 Java 对象)为数据库中的记录。
我目前的了解是,Mybatis 自身形象了大量的 JDBC 冗余代码,同时基于对象关系映射模型,向外提供了一套灵便易用的 API 和数据库做交互。
Mybatis的前世今生
凡事皆有过往,之前咱们讲过一篇 JDBC 的介绍与理论利用,并剖析比照了 JDBC 与长久层框架的差别,因为 JDBC 须要开发人员编写过多的代码,操作所有对象,既麻烦还特地容易出错,所以在咱们理论开发中很少间接应用 JDBC 进行编程,于是 ORM 的登台显得尤为重要,ORM 全称是 Object/Relation Mapping:示意 对象-关系映射 的缩写。
ORM模型 ,简略来说,就是数据库的表和简略 Java 对象的映射关系模型。采纳ORM框架后,应用程序不再间接拜访底层数据库,而是以 面向对象 的形式来操作长久化对象,而ORM框架则将这些面向对象的操作转换成底层SQL操作。ORM框架实现的成果:把对长久化对象的保留、批改、删除 等操作,转换为对数据库的操作。
最后 SUN 公司推出了 Java EE 服务器端组件模型(EJB),不过因为EJB 配置过于简单,且适应范畴小于是很快就被淘汰。起初封装度极高、开发效率极高、全表映射的 ORM 长久层框架Hibernate 呈现,成为了过后首选的 Java ORM 模型框架。然而随着互联网的极速倒退、简单业务场景的不断涌现,Hibernate 在许多方面缓缓暴露出了毛病:灵活性不够、无奈依据不同条件组装不同SQL、对多表关联和简单SQL查问反对较差、SQL优化和性能差、全表映射带来的不便等等。
于是 Mybatis 框架应运而生,补救了Hibernate的有余,不仅简略易用,而且具备高度灵便、可优化、易保护等特点,成为现在大型互联网我的项目的首选框架。
Mybatis 正史:Mybatis 前身是 iBATIS,2001年由Clinton Begin发动的一个开源我的项目,最后侧重于明码软件的开发,起初倒退成为一款基于Java的长久层框架,2004年,Clinton 将 iBATIS 的名字和源码捐献给 Apache 软件基金会,接下来的6年中,开源软件世界产生了微小的变动,所有开发实际、基础设施、许可,甚至数据库技术都彻底改变了。在2010年6月,外围开发团队把这个我的项目由 apache software foundation 迁徙到了google code,随着开发团队转投 Google Code 旗下,ibatis3.x 正式更名为 Mybatis ,代码于2013年11月迁徙到 Github 。
Mybatis的劣势
Mybatis 是一个半自动化的长久层框架,对开发人员来说,外围 sql 还是须要本人进行优化,sql 和 java 编码进行拆散,性能边界清晰,一个专一业务,一个专一数据。
蓝色区域是 Mybatis 框架性能反对,红色区域是利用了Mybatis 框架的工程项目理论须要操作的2个步骤:
以后有很多 Java 实现的长久化框架,而 MyBatis 流行起来有以下起因:
1、它打消了大量的 JDBC 冗余代码
2、它有低的学习曲线
3、它能很好地与传统数据库协同工作
4、它能够承受 SQL 语句
5、它提供了与 Spring 和 Guice 框架的集成反对
6、它提供了与第三方缓存类库的集成反对
7、它引入了更好的性能
Mybatis整体架构图
环境搭建
默认已装置 Java 开发环境、Mysql数据库、Maven 环境。
Mybatis 开发与环境搭建,咱们先入门体验,步骤如下:
1、创立 maven 工程
2、增加 MyBatis 仓库坐标(非maven我的项目则引入jar包)
3、创立user数据表
4、编写User实体类
5、编写映射文件UserMapper.xml
6、编写外围文件SqlMapConfig.xml
7、编写测试类
1、创立 maven 工程
2、增加 MyBatis 仓库坐标
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--日志坐标--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies>
3、创立user数据表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `birthday` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
4、编写User实体类
package com.panshenlian.pojo;/** * @Author: panshenlian * @Description: 用户实体 * @Date: Create in 2:08 2020/11/28 */public class User { private int id; private String username; private String password; private String birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday='" + birthday + '\'' + '}'; }}
5、编写映射文件UserMapper.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"><mapper namespace="userMapper"> <select id="findAll" resultType="com.panshenlian.pojo.User"> select * from User </select></mapper>
6、编写外围文件SqlMapConfig.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> <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" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="/UserMapper.xml" /> </mappers></configuration>
7、编写测试类
package com.panshenlian.service;import com.panshenlian.pojo.User;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 org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;/** * @Author: panshenlian * @Description: 体验测试类 * @Date: Create in 2:21 2020/11/28 */public class MybatisTest { @Test public void testQueryUser01() throws IOException { //加载外围配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 取得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //取得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行sql语句 List<User> userList = sqlSession.selectList("userMapper.findAll"); // 打印后果 for (User user : userList) { System.out.println(user); } // 开释资源 sqlSession.close(); }}
最终通过 Junit 单元测试,运行后果合乎预期:
工程构造参考:
总结
咱们通过本文介绍,也动手做了一个入门体验的测试工程,根本对 Mybatis 有了初步意识,同时对比了 JDBC 与 Hibernate ,清晰了 Mybatis 诞生的使命,和与生俱来的劣势能力。后续咱们会持续深刻解说 ,对于 Mybatis 各个常识脉络进行梳理和解析。
本篇完,本系列下一篇咱们讲《 Mybatis简略CRUD应用介绍 》。
BIU ~ 文章继续更新,微信搜寻「潘潘和他的敌人们」第一工夫浏览,随时有惊喜。本文会在 GitHub https://github.com/JavaWorld 收录,热腾腾的技术、框架、面经、解决方案,咱们都会以最美的姿态第一工夫送达,欢送 Star。