mybatis大致使用流程

一、什么是框架?

框架我们可以理解为,他是我们软件开发中的一套解决方案,不同的框架用于解决不同的问题。而使用框架的好处就是框架封装了很多的细节,让开发者可以使用极简的方式来实现功能,从而提高开发效率。

三层架构中有

  • 表现层
  • 业务层
  • 持久层:持久层就是用于操作我们数据库的,而我们所学习的mybatis就是一个用于dao层的框架

在这里插入图片描述

持久层技术解决方案

  • JDBC技术
  • Spring的JdbcTemplate
  • Apache的DBUtils

这些都是操作数据库的一些技术,但是以上这些都不是框架,JDBC是一个规范,Spring的JdbcTemplate和Apache的DButils都只是工具类

二、mybatis的概述

mybatis是一个持久层框架,它是使用java编写的,它封装了jdbc操作的很多细节,使开发者只需要关注sql本身,而无序关注注册驱动,创建连接等繁杂的过程,它使用了ORM思想实现了结果姐的封装

ORM:
ORM的全称是Object Relational Mapping对象关系映射,就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表

三、mybatis入门

1、使用配置文件的方式进行配置

(1)创建maven工程并导入所需jar包的坐标

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>com.hegong</groupId>
    <artifactId>mybatis学习</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>



    <dependencies>
        <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.32</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

(二)创建实体类和dao的接口
实体类

package com.hegong.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;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + 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;
    }
}

dao接口

package com.hegong.dao;

import com.hegong.domain.User;

import java.util.List;

/**
 * @author 14767
 * 用户的持久层接口
 */
public interface IUserDao {
    /**
     * 查询user表中所有信息
     * @return
     */
    List<User> findAll();
}

(3)创建Mybatis的主配置文件SqlMapConifg.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">
<!--mybatis的主配置文件-->
<configuration>
    <!-- 配置环境   -->
    <environments default="mysql">
        <!--配置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:///mybatistest"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件    -->
    <mappers>
        <mapper resource="com/hegong/dao/IUserDao.xml"></mapper>
    </mappers>
</configuration>

(4)创建映射配置文件IUserDao.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">
 <mapper namespace="com.hegong.dao.IUserDao">
    <!-- 配置查询dao接口中方法的sql语句   -->
    <select id="findAll">
        select * from user;
    </select>
</mapper>

注意事项:

  1. 这里映射配置文件IUserDao.xmlIUserDao.java这两个文件在Mybatis中还可能叫做IUserMapperIUserMapper.java
  2. 在idea中创建项目目录的时候要注意,Package和Directory是不一样的。Package在创建的时候如果直接输入com.hegong.dao它是三级结构,但是Directory在创建的时候如果直接输入com.hegong.dao它是一级目录
  3. mybatis的映射被指文件IUserDao.xm和对应接口IUserDao.java的包结构必须相同
  4. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  5. 映射配置文件的操作配置,id属性的取值必须是dao接口的方法名

当我们遵从第3、4、5点注意事项之后,我们在开发中就不需要再写dao的实现类

调用数据库数据示范

表中数据
在这里插入图片描述

 @Test
    public void test1()throws Exception{
        //        读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//        创建一个SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
//        使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
//        使用动态代理SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
//        使用代理对象职系那个方法
        List<User> users = userDao.findAll();
        for (User user : users) {

            System.out.println(user);

        }
//        释放资源
        session.close();
        in.close();
    }

这里如果我们直接执行上面的代码会出现错误
在这里插入图片描述
这是因为我们在先前的代码中的IUserDao.xml里面只设置了id="findAll",而没有设置接收后封装的数据类型
在这里插入图片描述
所以我们应该在设置一个属性resultType为com.hegong.domain.User
在这里插入图片描述

最终我们就成功得到结果
在这里插入图片描述
获取数据库表中信息步骤

  1. 读取配置文件
  2. 创建SqlSessionFactory工厂
  3. 创建SqlSession
  4. 创建Dao接口的代理对象
  5. 执行dao中的方法
  6. 释放资源

注意:
不要忘记在映射配置文件中设置mybatis封装到哪个实体类:要指定全限定类名

2、使用注解进行配置

这里我们就不需要IUserDao.xml配置文件了,直接删除掉就可以
举例示范
将IUserDao接口使用注解配置
在这里插入图片描述
并且SqlMapConfig.xml中指定mapper标签中的属性为class属性
在这里插入图片描述

2、实现接口使用工厂类对象中的方法

当然我们可以通过直接使用xml配置文件的方式和使用注解的方式来操作sql语句并且封装对象,我们同样也可以使用实现dao接口的方式来完成同样的操作

IUserDao.xml配置如下
在这里插入图片描述
IUserDao接口的实现类如下
在这里插入图片描述
测试类中的测试方法
在这里插入图片描述

注意

在实际使用中我们并不会是使用这种方式来进行配置,我们示范这种配置方式主要是为了说明,我们通过配置文件中的id并不能保证我们直接找到我们要执行的sql语句,所以我们还需要加上namespace,才能准确定位到我们要执行的sql语句是什么

posted @ 2021-01-01 11:32  谢海川  阅读(168)  评论(0)    收藏  举报