学习笔记如此详细的mybatis,你不来看看吗?

文章目录

    • mybatis框架-学习笔记Day01
      • 1.mybatis的概述
      • 2.mybatis入门
          • 2.1mybatis的环境搭建
          • 2.2环境搭建的注意事项:
      • 3.mybatis入门案例(是在前面操作的基础上的三种案例)
          • 3.1在前面操作的基础上,创建一个MybatisTest.java
          • 3.2.mybatis基于注解的入门案列
          • 3.3mybatis不使用XML和注解配置,自己写dao实现类
          • 3.4“查询所有”功能的分析
      • 4.自定义mybatis框架(主要目的是了解mybatis中执行细节)
          • 4.1自定义Mybatis分析
          • 4.2自定义mybatis(有xml和注解两种自定义配置)
            • 4.2.0删除pom.xml中mybatis的配置(删除图中部分)
            • 4.2.1删除后,根据 MybatisTest测试类 中缺的 进行 创造类和接口
            • 4.2.2对于SqlSessionFactoryBuilder.java的build进行操作

mybatis框架-学习笔记Day01

1.mybatis的概述

mybatis是一个持久层框架,用java编写的。

它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程 它使用了ORM思想实现了结果集的封装。

​ ORM:Object Relational Mappging 对象关系映射

​ 简单的说:就是把数据库表和实体类及实体类的属性对应起来 ,让我们可以操作实体类就实现操作数据库表。

2.mybatis入门

2.1mybatis的环境搭建

第一步:创建maven工程并导入坐标 pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.itheimagroupId>
    <artifactId>day01_eesy_01mybatisartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>jarpackaging>      

    <dependencies>
        <dependency>   
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.4.5version>
        dependency>

        <dependency>    
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.16version>
        dependency>

        <dependency>        
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.12version>
        dependency>

        <dependency>    
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.10version>
        dependency>
    dependencies>

project>

第二步:创建实体类和dao的接口 User.java 与 IUserDao.java

package com.itheima.domain;

import java.io.Serializable;
import java.util.Date;


public class User implements Serializable {

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
package com.itheima.dao;

import com.itheima.domain.User;

import java.util.List;

/*
    用户的持久层接口,“操作数据库,基于Dao"
 */
public interface IUserDao {

    //查询所有操作
    List<User> findAll();
}

第三步:创建Mybatis的主配置文件SqlMapConifg.xml





<configuration>
    
    <environments default="mysql">
        
        <environment id="mysql">  
            <transactionManager type="JDBC">transactionManager>
            
            <dataSource type="POOLED">
                
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>

            dataSource>
        environment>
    environments>

    
    <mappers>
        
        <mapper resource="com/itheima/dao/IUserDao.xml">mapper>
    mappers>
configuration>

第四步:创建映射配置文件 IUserDao.xml





<mapper namespace="com.itheima.dao.IUserDao">
    
    
    <select id="findAll" resultType="com.itheima.domain.User">
        select * from user  
    select>
mapper>

附录补充:

1.进行导入sql文件(mybatisdb.sql)
自行在相关文件中修改读取数据库时需要的数据

2.将日志文件log4j.properties放在项目中

2.2环境搭建的注意事项:

1.创建IUserDao.xml 和 IUserDao.java时名称一样。

在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper

所以:IUserDao 和 IUserMapper是一样的

2.在idea中创建目录的时候,它和包是不一样的

包在创建时:com.itheima.dao它是三级结构

目录在创建时:com.itheima.dao是一级目录

3.mybatis的映射配置文件位置必须和dao接口的包结构相同

学习笔记如此详细的mybatis,你不来看看吗?_第1张图片

4.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

不要忘记在映射配置中告知mybatis要封装到哪个实体类中
告知的方式:指定实体类的全限定类名

5.映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

学习笔记如此详细的mybatis,你不来看看吗?_第2张图片

3.mybatis入门案例(是在前面操作的基础上的三种案例)

3.1在前面操作的基础上,创建一个MybatisTest.java

学习笔记如此详细的mybatis,你不来看看吗?_第3张图片

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
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 java.io.InputStream;
import java.util.List;

/*
mybatis的入门案例
 */
public class MybatisTest {

    /*
        入门案例
     */
    public static void main(String[] args) throws Exception{
        //1.读取配置文件(这个案例在连接数据库)
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
                /*SqlSessionFactory是一个接口,接口不可以new,mybatis把建工厂的细节省略了,
                提供了一个SqlSessionFactoryBuilder,这个是可以直接new的,用builder.build()构建工厂,把流传进去 ,而怎么解析配置文件,怎么去封装,与我们无关*/
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession,创建Dao接口的代理对象 (Dao的实现)
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

学习笔记如此详细的mybatis,你不来看看吗?_第4张图片

3.2.mybatis基于注解的入门案列

学习笔记如此详细的mybatis,你不来看看吗?_第5张图片

1.移除IUserDao.xml文件,在dao接口的方法上使用@Select注解,并指定Sql语句

学习笔记如此详细的mybatis,你不来看看吗?_第6张图片

2.在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名

学习笔记如此详细的mybatis,你不来看看吗?_第7张图片

3.3mybatis不使用XML和注解配置,自己写dao实现类

我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。

不管使用XML还是注解配置。

但是Mybatis它是支持写dao实现类的。

学习笔记如此详细的mybatis,你不来看看吗?_第8张图片

1.创建UserDaoImpl.java

package com.itheima.dao.impl;

import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements IUserDao {

    //定义一个可以拿到session对象的变量
    private SqlSessionFactory factory;

    //在创建时传值,保证factory有值
    //把默认构造函数覆盖,相当于没有默认构造函数,所以在用的时候,一定会传一个工厂进来
    public UserDaoImpl(SqlSessionFactory factory){
        this.factory = factory;
    }

    @Override //实现类
    public List<User> findAll() {
        //1.使用工厂创建SqlSession对象,
        SqlSession session = factory.openSession();
        //2.使用session执行查询所有方法
        //填入的是xml配置文件中的对应的namespace.id
        List<User> users =  session.selectList("com.itheima.dao.IUserDao.findAll");
        session.close();  //用完后关闭
        //3.返回查询结果
        return users;
    }
}

2.修改MybatisTest.java

学习笔记如此详细的mybatis,你不来看看吗?_第9张图片

3.4“查询所有”功能的分析

学习笔记如此详细的mybatis,你不来看看吗?_第10张图片

4.自定义mybatis框架(主要目的是了解mybatis中执行细节)

4.1自定义Mybatis分析

学习笔记如此详细的mybatis,你不来看看吗?_第11张图片

学习笔记如此详细的mybatis,你不来看看吗?_第12张图片

4.2自定义mybatis(有xml和注解两种自定义配置)
4.2.0删除pom.xml中mybatis的配置(删除图中部分)

学习笔记如此详细的mybatis,你不来看看吗?_第13张图片

4.2.1删除后,根据 MybatisTest测试类 中缺的 进行 创造类和接口

学习笔记如此详细的mybatis,你不来看看吗?_第14张图片

1.Resources.java

学习笔记如此详细的mybatis,你不来看看吗?_第15张图片

2.SqlSession.java

学习笔记如此详细的mybatis,你不来看看吗?_第16张图片

3.SqlSessionFactory.java

学习笔记如此详细的mybatis,你不来看看吗?_第17张图片

4.SqlSessionFactoryBuilder.java

学习笔记如此详细的mybatis,你不来看看吗?_第18张图片

4.2.2对于SqlSessionFactoryBuilder.java的build进行操作

1.创建utils下工具类XMLConfigBuilder用于解析配置文件 XMLConfigBuilder.java

2.在pom.xml中导入dom4j和jaxen的坐标---------->用于解析配置文件的技术dom4j和xpath

<dependency>
	<groupId>dom4jgroupId>
	<artifactId>dom4jartifactId>
	<version>1.6.1version>
 dependency>

<dependency>
	<groupId>jaxengroupId>
	<artifactId>jaxenartifactId>
	<version>1.1.6version>
dependency>

3.对应的为XMLConfigBuilder.java中出现错误的地方创建该有的类

Configuration.java
Mapper.java ,
Select.java

前面两个文件是xml配置,后面一个是注解配置,可以先把XMLConfigBuilder.java中关于注解配置的代码先注释掉,先进行学习xml配置,然后再学注解配置,不然两个一起学,容易混

4.在前面的操作完成后,XMLConfigBuilder.java中没有错误,

此时,对SqlSessionFactoryBuilder.java的build进行操作

学习笔记如此详细的mybatis,你不来看看吗?_第19张图片

5.有了config,还是没有工厂,而现在工厂现在是接口,所以创建工厂接口的实现类

学习笔记如此详细的mybatis,你不来看看吗?_第20张图片

6.工厂有了,则每个session就有了

学习笔记如此详细的mybatis,你不来看看吗?_第21张图片

上面的操作:

SqlSessionFactoryBuilder有了构建者

DefaultSqlSessionFactory(cfg)构建者就构建出了工厂

DefaultSqlSession(cfg)工厂就生产了一个SqlSession

学习笔记如此详细的mybatis,你不来看看吗?_第22张图片
7.在session方法里,实现创建代理对象和查询所有的操作

需要添加的文件:

MapperProxy.java
DataSourcesUtil.java
Executor.java

学习笔记如此详细的mybatis,你不来看看吗?_第23张图片

完成上面的操作,运行MybatisTest.java的main方法,得到结果

学习笔记如此详细的mybatis,你不来看看吗?_第24张图片

大白话解释
❶.我们需要最后实现查询所有,而查询所有的功能在工具类里面,最后就是调用这个工具类,

❷. 那么什么时候调用呢?在创建Dao实现类增强的时候,

❸.那什么时候增强呢?在创建代理对象时进行创建Dao实现类(MapperProxy的调用),

​ invoke用于对方法进行增强的,我们的增强其实就是selectList方法,

​ MapperProxy找到要执行的语句和封装的结果

​ 为什么要找执行的语句和封装的结果?

​ ①从setMappers的内容就可以看出来getMappers的结果

​ ②从方法 MapperProxy(Map mappers,Connection conn)

​ 的第一个参数也可以有所察觉

❹.从哪里找?从配置文件中找,

❺.怎么读取配置文件?读取配置文件由XMLConfigBuilder进行,读取完了之后,需要存起来,

​ 如何存起来?就用到了Configuration对象

当前的项目结构【其中,图中的Select.java是注解配置,在此之前的4.2.2讲的是xml配置,所以还没有涉及Select.java】
需要的文件:

MapperProxy.java
DataSourcesUtil.java
Executor.java

学习笔记如此详细的mybatis,你不来看看吗?_第25张图片

8.之前4.2.2已经完成1~7部分内容,就是xml配置部分,接下来将其改为注解配置,需要修改三个地方

SQLMapConfig.xml文件中,修改为注解配置

学习笔记如此详细的mybatis,你不来看看吗?_第26张图片

IUserDao.java文件修改

学习笔记如此详细的mybatis,你不来看看吗?_第27张图片

进行添加Select.java文件,如果前面添加过,即不需要再次添加 Select.java

在这里插入图片描述

完成上面的操作,运行MybatisTest.java的main方法,得到结果

学习笔记如此详细的mybatis,你不来看看吗?_第28张图片

你可能感兴趣的:(mybatis)