一、MyBatis简介
1.什么是框架
框架,就是软件的半成品,完成了软件开发过程中的通用操作,程序员只需很少或者不用进行加工就能够实现特定的功能,从而简化开发人员在软件开发中的步骤,提高开发效率。
2.常用框架
- MVC框架:简化了Servlet的开发步骤
Struts、Struts2、SpringMVC - 持久层框架:完成数据库操作的框架
apache DBUtils、Hibernate、Spring JPA、MyBatis、EJB3.0 - 胶水框架:Spring
- SSM(Spring SpringMVC MyBatis)
- SSH (SSH Spring Struts2 Hibernate)
3.MyBatis介绍
MyBatis是一个半自动的ORM框架,ORM框架提供了实体类与数据表的映射关系,通过映射文件的配置,实现对象的持久化。
ORM(Object Relational Mapping)对象关系映射(对象指面向对象,关系指关系型数据库,Java到MySQL的映射,开发者可以以面向对象的思想来管理数据库),将Java中的一个对象与数据表中一行记录一一对应。
MyBatis的前身是iBatis,iBatis是Apache软件基金会提供的一个开源项目
- 2010年iBatis迁移到Google code,正式更名为MyBatis
- 2013年迁移到Github托管
MyBatis特点:
- 支持自定义SQL、存储过程
- 对原有的JDBC进行了封装,几乎消除了所有JDBC代码,让开发者只需关注SQL本身
- 支持XML和注解配置方式自定完成ORM操作,实现结果映射
MyBatis 的优点
- 与JDBC相比,减少了50%以上的代码量。
- MyBatis是最简单的持久化框架,小巧并且简单易学。
- MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度(耦合度越低越灵活),便于统一管理和优化,并可重用。
- 提供XML标签,支持编写动态SQL语句。
- 提供映射标签,支持对象与数据库的ORM字段关系映射。
MyBatis 的缺点
- SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
- SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
二、MyBatis框架部署
框架部署,就是将框架引入到我们的项目中
- 创建Maven项目(Java工程、web工程)
- 在项目中添加MyBatis依赖
在pom.xml中添加 mybatis 和 mysql driver 依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
- 创建MyBatis配置文件
创建自定义模板:选择resources----右键New----Edit File Templates
在resources中创建名为mybatis-config.xml
的文件,在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>
<!-- 在environments配置数据库连接信息 -->
<!-- 在environments标签中可以定义多个environment标签,每个environment标签可以定义一套连接配置 -->
<!-- default属性,用来指定使用哪个environment标签 -->
<environments default="mysql">
<environment id="mysql">
<!--transactionManager标签用于配置数据库管理方式-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource标签就是用来配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_2010_fmwy?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="admin123"/>
</dataSource>
</environment>
</environments>
</configuration>
三、MyBatis框架使用
- 创建数据库表
create table 表名(字段名 类型 是否为空);
- 创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class 类名{
private 类型 变量名(对应字段);
}
- 创建DAO接口并定义操作方法
public interface ...DAO{
public 返回值类型 方法名(参数)
}
- 创建DAO接口的映射文件
在resources
目录下,新建名为mappers
文件夹
在mappers
中新建名为StudentMapper.xml
的映射文件(根据模板创建)
在映射文件中对DAO中定义的方法进行实现(以StudentDAO为例):
<?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文件相当于DAO接口的‘实现类’,namespace属性要指定`实现`DAO接口的全限定名-->
<mapper namespace="com.qfedu.dao.StudentDAO">
<insert id="insertStudent">
insert into tb_students(stu_num,stu_name,stu_gender,stu_age)
values(#{stuNum},#{stuName},#{stuGender},#{stuAge})
</insert>
<delete id="deleteStudent">
delete from tb_students where stu_num=#{stuNum}
</delete>
</mapper>
- 将映射文件添加到主配置文件
<?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配置数据库连接信息-->
<!--在environments标签中可以定义多个environment标签,每个environment标签可以定义一套连接配置-->
<!-- default属性,用来指定使用哪个environment标签-->
<environments default="mysql"...>
<mappers>
<mapper resource="mappers/StudentMapper.xml"></mapper>
</mappers>
</configuration>
四、MyBatis-plus
MyBatis-plus是一款MyBatis的增强工具,在MyBatis 的基础上只做增强不做改变。是国内团队苞米豆在MyBatis基础上开发的增强框架,扩展了一些功能,以提高效率。引入 Mybatis-Plus 不会对现有的 Mybatis 构架产生任何影响,而且 MyBatis-plus 支持所有 Mybatis 原生的特性。
1)依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring 。
2)损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 。
3)预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击 。
4)通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 。
5)多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题 。
6)支持热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
7)支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作
8)支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码(生成自定义文件,避免开发重复代码),支持模板引擎、有超多自定义配置等。
9)支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )。
10)支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词 。
11)内置分页插件:基于 Mybatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询。
12)内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询 。
13)内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作。
14)默认将实体类的类名查找数据库中的表,使用@TableName(value=“table1”)注解指定表名,@TableId指定表主键,若字段与表中字段名保持一致可不加注解。
参考链接:
https://www.jianshu.com/p/8556c8468241
https://www.bilibili.com/video/BV15Q4y1m78a?p=42