目录

MyBatis----01

1. MyBatis简介

1.1 软件开发三层架构

MyBatis作用于持久层,属于数据持久化框架。

1.2 什么是框架?

简单来说框架可以理解为一个半成品项目,已经有人完成好了一部分功能,我们只需要在其基础上完成我们需要做的业务逻辑即可,将重复的代码抽取出来,让程序员把精力专注于业务逻辑之上。

1.3 常见的框架

Java的世界中存在着无数的框架,每个框架都为了解决某一领域的问题而存在的。

  • 持久层框架:专注于解决持久化,例如:Hibernate|MyBatis|JPA规范
  • 表现成框架:专注于解决与用户交互,例如:struts2|SpringMVC
  • 全栈框架:能在各层都发会作用的框架,例如:Spring

目前市面上流行的框架组合:SSM(Spring | SpringMVC | MyBatis),早年曾经流行SSH(Spring | Strusts2 | Hiberbate),SSH已经过时了。

1.4 MyBatis介绍

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  • iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
  • 当前,最新版本是MyBatis 3.5.5 ,其发布时间是2020年6月4日。

特点:

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

1.5 MyBatis是一款半自动ORM框架

ORM是能够完全面向对象操作数据库的框架,因为SQL语句完全由Hibernate负责生成,我们只需要负责面向对象的调用API操作数据库即可,不需要写SQL;
MyBatis是半自动的ORM框架,因为SQL语句还是由开发人员手写,MyBatis负责封装结果到对象中,以及从对象中提取参数。

Hibernate与MyBatis:

Hibernate缺点:

  • 运行效率低,内存占用高->功能强大
  • 因为Hibernate对于持久层的封装过于完整(甚至帮我们书写SQL)导致sql语句优化不容易进行,不适用于数据量大的大型项目

MyBatis优点:

  • MyBatis灵活,因为SQL语句还是由我们负责书写,书写到XML中
  • SQL语句与程序分离,降低了耦合度,便于管理
  • 执行效率较高

2. MyBatis搭建

2.1 准备数据库

CREATE TABLE t_user( id INT PRIMARY KEY, NAME VARCHAR(255) NOT NULL, PASSWORD VARCHAR(255) NOT NULL ) 

2.2 添加测试数据

INSERT INTO t_user VALUE (1,'Tom','1234'),(2,'Jerry','1234'), (3,'Jack','1234'),(4,'Rose','1234') 

2.3 创建Maven工程

引入依赖

dependencies> dependency> groupId>org.mybatis.spring.bootgroupId> artifactId>mybatis-spring-boot-starterartifactId> version>2.0.1version> dependency> dependency> groupId>mysqlgroupId> artifactId>mysql-connector-javaartifactId> version>8.0.21version> dependency> dependency> groupId>junitgroupId> artifactId>junitartifactId> version>4.13version> scope>testscope> dependency> dependencies> 

2.4 创建MyBatis主配置文件

  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?serverTimezone=UTC"/> property name="username" value="root"/> property name="password" value="hanjuechen"/> dataSource> environment> environments> mappers> --> mappers> configuration> 

2.5 创建实体类映射表

public class User { private Integer id; private String name; private String password; public User() { } public User(Integer id, String name, String password) { this.id = id; this.name = name; this.password = password; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}'; } } 

2.6 创建Mapper接口

public interface UserMapper { //查询所有用户 ListUser> findAll(); } 

2.7 创建xxxMapper.xml配置

   mapper namespace="com.leo.mapper.UserMapper">  select id="findAll" resultType="com.leo.domain.User"> select * from t_user select> mapper> 

2.8 将xxxMapper.xml注册到主配置文件

在mybatis-config.xml配置文件末尾注册:

mappers>  mapper resource="com/leo/mapper/UserMapper.xml"/> mappers> 

2.9 其他配置

为了让src/main/java目录中的xml文件能够作为资源文件编译输出,在pom.xml中加入如下配置:

build>  resources> resource>  directory>src/main/resourcesdirectory>  includes>  include>**/*.*include> **/*.xml--> **/*.yml--> **/*.properties--> includes>  filtering>falsefiltering> resource>  resource>  directory>src/main/javadirectory> includes> include>**/*.*include> includes>  excludes> exclude>**/*.javaexclude> excludes> filtering>falsefiltering> resource> resources> build> 

2.10 代码测试

public class UserMapperTest { @Test public void testFindAll(){ //定义配置文件路径 String resource = "mybatis-config.xml"; InputStream inputStream = null; try { //加载配置文件 inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } //根据配置文件创建SessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //获得SqlSession SqlSession session = sqlSessionFactory.openSession(); //获得UserMapper接口的实现类 UserMapper mapper = session.getMapper(UserMapper.class); //调用UserMapper方法,执行xml中定义的SQL语句 ListUser> list = mapper.findAll(); //打印list: list.sout System.out.println(list); } }