MyBatis

MyBatis概述

1. ORM模型简介

  • object relation mapping

    object Mapping Relation
    xxx.java XML dbf

    传统JDBCC程序的设计缺陷

    • 大量配置信息硬编码
    • 大量的无关业务处理的编码
    • 扩展优化极为不便

2. MyBatis概述

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

  • 避免传统JDBC硬编码
  • XML配置或者注解
  • POJO对象和数据库记录直接映射
  • 完善的文档支持

3.MyBatis使用优势及应用场景

使用优势

  • 简单易学、快速上手、学习成本低
  • 数据库交互信息配置化
  • 动态SQL处理

使用场景

  • 更加关注SQL优化的项目

  • 需求频繁更新改动的项目

MyBatis的环境搭建

MyBatis的下载

http://www.mybatis.org/mybatis-3/

项目中引入MyBatis支持

maven方式引入

入门程序(MyBatis核心API操作过程)

mybatis配置

  • mybatis.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.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/test1?serverTimezone=Asia/Shanghai"/>
                    <property name="username" value="root"/>
                    <property name="password" value="mjj666123"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="mapper/usersMapper.xml"></mapper>
        </mappers>
    </configuration>
  • ***Mapper.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">
    <!-- namespace 命名空间
          通常情况,命名空间的值,就是当前操作实体类的全名称
    -->
    <mapper namespace="mjj.Users">
        <select id="usersList" resultType="mjj.Users">
            select * from tb1
      </select>
    </mapper>
  • 实体类Users(重写tostring()方法进行输出)

package mjj;

public class Users {
    private Integer id;
    private String user;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", user='" + user + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • Testdemo(连接数据库)
import mjj.Users;
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.io.OutputStream;
import java.util.List;

public class Testdemo {
    @Test
    public void testDemo1() throws IOException {
        String resource ="mybatis.xml";
        InputStream is=Resources.getResourceAsStream(resource);
        //主配置文件和SqlSessionFactory构建工厂类
        SqlSessionFactory factory=
                new SqlSessionFactoryBuilder().build(is);
        //打开和数据库的会话
        SqlSession session=factory.openSession();
        List<Users> ulist= session.selectList("usersList");
        for(Users user:ulist){
            System.out.println(user.toString());
        }
        //关闭会话
        session.close();
    }
}

项目案例演示

  • 项目案列演示

    后台管理系统用户数据维护平台

    • 所有用户数据查询
    • 单个用户数据查询
    • 用户数据修改
    • 锁定用户账号
    • 删除用户账号
    • 彻底删除用户账号
  • 数据库数据准备工作

  • 界面准备工作

  • MyBatis基础操作

了解MyBatis的工作原理

基础操作——主配置解析

  • properties配置加载

    properties配置,用于加载外部的properties配置文件

  • environments环境配置

    environments:主要用于数据源的配置,可以配置多个数据源

    通过default属性来指定当前项目运行过程中使用的是哪个数据源

    environment:用于配置一个具体的独立的数据源

    id属性用于给当前数据源定义一个名称,方便我们项目指定

    transactionManager:用于配置事务管理,默认情况下使用的是JDBC事务管理

    dataSource:具体数据源的链接信息;type属性用于指定是否使用连接池

  • settings参数设置配置

  • typeAliases别名设置

  • mapper映射加载

    mappers:主要用于配置我们外部的映射配置文件,在主配置文件中需要引入加载映射配置文件

基础操作——映射配置文件

mapper 用于定义一个映射配置文件的根节点

namespace属性是用来配置命名空间,主要进行session级别的缓存,命名空间默认情况下,使用我们当前操作的实体类全路径

基础操作——查询数据

  • 映射配置:sql片段
  • 映射配置:select配置
    • 特殊配置:字段和属性不一致时resultMap配置

Mybatis四大对象

Mybatis核心对象

  • ParameterHandler:处理SQL的参数对象
  • ResultSetHandler:处理SQL的返回结果集
  • StatementHandler:数据库的处理对象,用于执行SQL语句
  • Executor:Mybatis的执行器, 用于执行增删改查操作

Mybatis插件原理

  • Mybatis的插件借助于责任链的模式进行对拦截的处理
  • 使用动态代理对目标对象进行包装,达到拦截的目的
  • 作用于Mybatis的作用域对象之上

Mybatis插件开发

Mybatis插件借口-Interceptor

  • Intercept方法,插件的核心方法
  • 使用plugin方法,生成target的代理对象
  • setProperties方法,配置所有参数

javaweb     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!