Mybatis基础

MyBatis入门

MyBatis概述

  • MyBatis 是一款基于Java的优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • 它封装了JDBC操作的很多细节,使开发者只需要关注SQL语句本身,而无需关注驱动、创建连接等繁杂过程
  • 它使用了ORM思想实现了结果集的封装

MyBatis环境搭建

  1. 创建Maven工程

    • 小技巧:为了避免每次不同的模块都要编写一遍pom.xml的依赖,可以第一次创建一个父Maven项目,引入依赖,以后的Maven项目直接继承这个父项目就可以简化重复的依赖:
      • 建立的Maven项目删除掉src文件夹,然后配置好依赖后直接新建模块,选择Maven项目时就有继承选项了,继承的父项目在此项目的pom.xml的parent标签里
  2. 导入依赖:MyBatis和MySQL连接器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <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.38</version>
    </dependency>
  3. 创建domain里的实体类和dao层的接口,定义好接口的方法

    • 创建User实体类,成员属性名要和数据库字段名一一对应
    • 创建dao层的接口和方法
  4. 创建MyBatis的主配置文件并进行配置

    • 在Maven项目的resources目录下创建一个xml文件

    • 引入约束和环境配置:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      <?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="mysql"> <!--为这个环境起个名字-->
      <environment id="mysql">
      <transactionManager type="JDBC"></transactionManager><!--配置事务类型-->
      <dataSource type="POOLED"> <!--配置数据源/连接池-->
      <!--配置连接数据库的4个信息-->
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql:///db1/mybatisuser"/>
      <property name="username" value="root"/>
      <property name="password" value="199988"/>
      </dataSource>
      </environment>
      </environments>
      </configuration>
  5. 创建MyBatis与dao层接口的映射文件:

    • 在上一步的MyBatis配置文件的configuration标签中添加一个mappers标签,指定映射配置文件位置

      1
      2
      3
      4
      <mappers>
      <mapper resource="com/taoyyz/dao/UserDao.xml"></mapper>
      <!--注意这个路径默认是maven项目的resources目录而不是java目录-->
      </mappers>
    • 根据映射文件的位置,在resources目录下创建对应的xml映射文件并编写SQL语句

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <?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的约束-->
      <mapper namespace="com.taoyyz.dao.UserDao"> <!--命名空间为接口全类名-->
      <!--配置查询所有select,这里的id为对应mapper命名空间那个接口里的方法名称,结果集类型为实体类全类名-->
      <select id="findAll" resultType="com.taoyyz.domain.User">
      select * from mybatisuser #在这里编写SQL
      </select>
      </mapper>
  • 注意事项:遵从以下约定就可以无需编写dao层实现类(约定大于配置)
    • UserDao接口对应的映射xml文件为UserDao.xml,也可以叫做UserMapper.xml,相当于接口实现类
    • UserDao接口对应的xml映射文件的目录层级必须和接口的包层级在名字上相同:com.taoyyz.dao
    • 映射配置文件的mapper标签的namespace命名空间取值必须是dao层接口的全限定类名
    • 映射配置文件的操作配置(例如select标签)的id属性取值必须是dao层接口的对应方法名

MyBatis入门案例

自定义MyBatis框架

  • MyBatis在使用代理dao层接口的方式实现CRUD时做了什么事?
    • 创建代理对象
    • 在代理对象中调用方法
  • 自定义MyBatis需要的类:
    • Resources
    • SqlSessionFactoryBuilder
    • SqlSessionFactory
    • SqlSession

MyBatis基本使用

MyBatis的单表CRUD操作

MyBatis的参数和返回值

MyBatis的dao编写

MyBatis配置的细节:标签使用

MyBatis高级

MyBatis的连接池

MyBatis的事务控制和设计方法

MyBatis的多表查询

一对多

多对多

MyBatis缓存和注解开发

MyBatis的加载时机(查询时机)

MyBatis的一级缓存和二级缓存

MyBatis的注解开发

单表CRUD

多表