MyBatis

MyBatis


学习本模块可见手册 MyBatis参考文档

1、框架概述

框架是一个半成品,已经对基础的代码进行了封装并提供相应的 API ,开发者在使用框架时直接调用封装好的 API 可以省去很多代码编写,从而提高工作效率和开发速度

框架是一种经过校验、具有一定功能 的半成品软件.

经过校验: 指框架本身经过测试,且框架自身所具有的功能已经实现
具有一定功能: 指框架可以完成特定的功能,不同的框架功能不同
半成品软件: 指框架自身是一个软件,但是该软件无法直接运行,需要配合其他的程序才可以完成指定的工作

框架的工作模式:
开发工程师建立在框架的基础之上完成开发部分功能 加 框架自身完成部分功能组成一个完整的产品

例子: 小店卖早餐
1 自给自足
2 进货(框架) 卖

2、MyBatis 基础

2.1、MyBatis的概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和 映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录

mybatis框架架构图:
MyBatis

我们把Mybatis的功能架构分为三层:

  1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收 到调用请求就会调用数据处理层来完成具体的数据处理。
  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是 共用的东西,将他们抽取出来作为最基础的组件,为上层的数据处理层提供最基础的支撑

MyBatis

2.2、环境准备

需求: 向用户表中添加一条数据

  1. 添加项目需要的 jar 包

    1. lombok-1.16.6.jar
      Lombok可以自动生成 getter/setter/toString 等方法
      使用的前提是已经在 idea 中安装了 lombok 插件
    2. mysql-connector-java-5.1.7-bin.jar
      MySQL 数据库的 JDBC 驱动包,访问 MySQL 必须导入备 jar 包
    3. mybatis-3.4.5.jar
      MyBatis 框架的核心 jar 包
  2. 创建一张用户表:user

    CREATE TABLE `user` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) DEFAULT NULL,
    `age` int(255) DEFAULT NULL,
    `salary` decimal(10,0) DEFAULT NULL, 
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
  3. 根据表结构创建实体类

    @Getter@Setter@ToString
    @NoArgsConstructor@AllArgsConstructor
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private BigDecimal salary;
    }
    
  4. mybatis主配置文件: mybatis-config.xml

    1. 在项目的resources(source folder)下创建 mybatis-config.xml 配置文件
      MyBatis

    2. 拷贝 xml 的约束(从mybatis的参考手册里面)

      <?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">
      
    3. 添加环境配置(事务管理器 / 连接池 / 映射文件)
      在根标签<configuration>里面,使用<environments>标签
      配置数据源时候可以使用外置文件引入,需要先引入文件 druid.properties
      MyBatis

    4. mapper 映射文件: UserMapper.xml
      mybatis中,访问数据库的SQL语句是编写在mapper配置文件中的,程序员按照这个文件约定的格式进行配置即可
      一个项目可以操作多张表,每张表都需要一个mapper配置文件来编写SQL语句
      在包 cn.mybatis.mapper 中创建配置文件: UserMapper.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">
      

      在配置文件中添加 SQL 语句


insert into user(name,age,salary,hiredate)
values(#{name}, #{age}, #{salary}, #{hiredate})


每条SQL语句都需要有一个唯一的标识
这个唯一的标识由 namespace + sqlid 组成 使用下面的namespace+sqlid就得到了保存用户信息的唯一标识: cn.wolfcode.mybatis.mapper.UserMapper.insert 接下来,我们就可以使用上面的标识找到这条SQL语句了
注意: 一定记得在 mybatis-config.xml 配置文件中关联映射文件

POOLED:org.apache.ibatis.datasource.pooled.PooledDataSource的别
–>









叩丁狼教育

2.3_DAO层开发 1. dao接口
在 cn.wolfcode.mybatis.dao 包中创建 dao 接口: IUserDAO.java
package cn.wolfcode.mybatis.dao;
import cn.wolfcode.mybatis.domain.User;
public interface IUserDAO {
/**

  • 向user表中插入一条数据 * @param u 要插入的数据 */
    void insert(User u);
    }
  1. dao 接口实现类
    在 cn.wolfcode.mybatis.dao.impl 包中创建 dao 的实现类: UserDAOImpl.java
    按以下 API 实现数据的保存操作:
  2. SqlSessionFactory : 对连接池(DataSource)的封装
    SqlSession openSession() : 获取SqlSession对象 2. SqlSession,对连接(Connection)的封装
    int insert(String statementid, Object param);
    statementid: 有mapper配置文件中的namespace+sqlid组成
    void commit(): 提交事务
    void close() : 释放资源
  3. 调用 SqlSession 中的 insert 方法,执行指定的 SQL


public class UserDAOImpl implements IUserDAO {
public void insert(User u) {
try {
InputStream in = Resources.getResourceAsStream(“mybatis-
config.xml”);
SqlSessionFactory fac = new
SqlSessionFactoryBuilder().build(in);
SqlSession session = fac.openSession();
叩丁狼教育

  1. 在测试类中测试 insert 方法
    public class UserDAOTest {
    private IUserDAO dao = new UserDAOImpl();
    @Test
    public void testInsert() {
    User u = new User(null,“张三”,20,new BigDecimal(20000), new Date());
    dao.insert(u); }
    }
    2.4_MyBatis 执行流程(理解)
  2. 加载主配置文件(mybatis-config.xml)到内存中,将数据封装成对象
    Configuration/Environment/TransactionManager/DataSource等
  3. 通过操作拿到访问数据库的基本信息,根据这些数据创建SqlSessionFactory对象
  4. 从SqlSessionFactory对象中获取到 SqlSession 对象,然后执行执行的 SQL
  5. INSERT INTO user(name,age,salary,hiredate) VALUES(#{name},#{age},#{salary},#{hiredate})
    被翻译成
    INSERT INTO user(name,age,salary,hiredate) VALUES(?, ?, ?, ?)
  6. 使用PreparedStatement来执行指定的SQL
    从传递进来的 Use r对象中依次获取到 name/age/salary/hiredate这些属性的值 这里需要使用到内省机制来访问对象中的属性
    注:
    在加载完当前映射文件之后,会将SQL中的#{} OGNL表达式翻译成对应的占位符?,
    执行上面的SQL,需要将数据设置给当前的语句对象 ps.setObect(1, 从参数中获取到name属性的值); ps.setObect(2, 从参数中获取到age属性的值); ps.setObect(3, 从参数中获取到salary属性的值); ps.setObect(4, 从参数中获取到hiredate属性的值);
    操作步骤回顾:
    u);
    } }
    session.insert(“cn.wolfcode.mybatis.mapper.UserMapper.insert”,
    session.commit();
    session.close();
    } catch (Exception e) {
    e.printStackTrace(); }
上一篇:SAP MM 采购单据的屏幕布局配置中字段选择值“$$$$”有什么用处?


下一篇:大型网站搜索外推转码软件工具 V1.5.0 支持98%网站!