欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis 框架快速入门

程序员文章站 2022-04-15 18:32:44
上一篇????:MyBatis ---- 框架概述文章目录1 Mybatis 框架开发的准备1.12 搭建 Mybatis 开发环境????大家好!我是近视的脚踏实地,这篇文章主要是继续记录自己MyBatis的学习笔记–Mybatis 框架快速入门 唯有行动 才能解除你所有的不安1 Mybatis 框架开发的准备1.12 搭建 Mybatis 开发环境......

上一篇????:MyBatis ---- 框架概述



????大家好!我是近视的脚踏实地,后边这系列主要是记录自己MyBatis的学习笔记,这篇文章主要来学习Mybatis 框架快速入门
     唯有行动  才能解除你所有的不安

1 开发环境准备

第一步:创建数据库环境

Mybatis 框架快速入门

CREATE DATABASE mybatis

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT  INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

第二步:创建maven工程并导入相应的坐标,mybatis官网:mybatis官网

Mybatis 框架快速入门

<!--打包方式-->
    <packaging>jar</packaging>
    <!--导入依赖-->
    <dependencies>

        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>compile</scope>
        </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>

2 mybatis的环境搭建

第一步:创建实体类和dao的接口

实体类????:

Mybatis 框架快速入门

package monster.zf.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 User() {
    }

    public User(Integer id, String username, Date birthday, String sex, String adress) {
        this.id = id;
        this.username = username;
        Birthday = birthday;
        this.sex = sex;
        this.address = adress;
    }

    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) {
        Birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

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

    public String getAdress() {
        return address;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", Birthday=" + Birthday +
                ", sex='" + sex + '\'' +
                ", adress='" + address + '\'' +
                '}';
    }
}

dao接口????:

package monster.zf.dao;

import monster.zf.domain.User;

import java.util.List;

public interface UserDao {

    /**
     * 查询所有用户
     * @return
     */
    List<User> findAll();
}

第二步:创建Mybatis的主配置文件:在resources资源文件下创建sqlMapConfig.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">

<!--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://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="passworld" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="monster/zf/dao/UserDao.xml"/>
    </mappers>
</configuration>

第三步创建映射配置文件:因为指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件,所以要创建一个UserDao.xml文件
Mybatis 框架快速入门

<?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属性写的是dao对应的全类名 -->
 <mapper namespace="monster.zf.dao.UserDao">

    <!--配置查询所有 -->
    <!--id属性指的是方法的名称-->
    <select id="findAll">
        select * from user
    </select>
</mapper>

3 环境搭建的注意事项

第一个:创建 UserDao.xml 和 UserDao.java 时,名称是为了和之前学的知识保持一致。在mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper。所以UserDao 和UserMapper是一样的。
(意思是说这里是为了保持和之前的风格一样,所以没有起名叫UserMapper,而是继续叫UserDao,但是如果以后看到叫Mapper,应该要知道他就是个Dao)

第二个:在idea中创建目录的时候,它和包是不一样的。包在创建时:monster.zf.dao它是三层结构。目录在创建时monster.zf.dao是一级目录。
(就是在创建包的时候可以一次性写完所有所有的包,用点号隔开,这样就会对应三个文件夹,创建目录的时候不可以一次性写完,有多个目录就要一次一次创建,也可以中间用/隔开一次创建)

第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同

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

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

当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。>

(也就是说,写完接口,我们的操作就结束了,那剩下的功能将由mybatis为我们实现)

4 入门案例

先把 log4j.properties配置文件放到resources资源文件下
Mybatis 框架快速入门

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

然后在test里边创建一个测试类:MybatisTest

package monster.zf;

import monster.zf.dao.UserDao;
import monster.zf.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;

/**
 * @author Monster丶ZF
 * @version 1.8
 * @remakeTodo mybatis的入门案例
 * @Package monster.zf
 * @date 2020/11/2 12:40
 */
public class MybatisTest {
    /**
     * 入门案例
     * @param args
     */
    public static void main(String[] args)throws Exception {
        //因为我们已经完成了mybatis三四五点,所以不需要写dao的实现类,这种方式也是以后用得最多的方式
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.创建sqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产一个sqlSession对象
        SqlSession session = factory.openSession();
        //4.使用创建Dao接口的代理对象
        UserDao userDao = session.getMapper(UserDao.class);

        //因为我们只有dao的接口,没有具体功能的实现,于是我们就需要想办法把接口中的实现加出来
        //那么加的方式就是不改变源码的基础上对已有方法增强,那么就是使用动态代理

        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

(那么上面代码中的 SqlSessionFactory 查看源码可以发现它是一个接口,那么就意味着他不能直接new,也就不是不能直接初始化,于是我们就需要找它的实现类,那么首先我们要知道用 SqlSessionFactory 这个工厂,无外乎就是要创建sqlSession对象,于是mybatis在给我们提供这个工厂的时候,把工厂的创建细节给我们省略了,它在前面准备了SqlSessionFactoryBuilder对象,这个对象是可以直接new的,用这个对象的好处就是可以直接用builder.build()方法来进行构建,那么这里边怎么解析配置文件,怎么去封装都跟我们没关系,都交给mybatis,这也和刚开始说的框架的作用,他把细节都给我们屏蔽起来了,让我们可以更加极简地进行开发、实现功能。

那么上面入门案例总的思路就是:InputStream in = Resources.getResourceAsStream(“sqlMapConfig.xml”); 有连接数据库的信息,接着是创建出工厂,有了工厂就可以生产操作对象,这个对象就可以操作数据库,但是我们又不是用这个对象直接操作,而是用dao操作,但是只有dao接口,于是让sqlSession给我们创建一个代理对象,有了代理对象后,就代表方法已经增强了,我们能实现功能了,然后就用代理对象调用方法即可。)

运行结果:
Mybatis 框架快速入门Mybatis 框架快速入门

可以发现运行结果报错了,那么首先在刚开始介绍这个mybatis框架的时候,关注点应该只是sql语句本身,那么我们在UserDao.xml里边已经写了sql语句,但是还是不行,原因是什么呢????:?,原因是这个框架它并不知道你这个查询完了要把查询到的数据封装到哪里去。因为它的框架在设计之初,肯定是所有表和所有的实体类都能封装,但是它也不知道你的实体类和表是什么关系,所以这个时候,上面报错的错误说得很清楚,就是它不知道应该封装到哪里去。因为它说Result Type 没有一个返回类型。

所以说我们在这个开发过程中,除了这个sql语句外,还应该提供另外一个配置,这个配置就是resultType返回类型,这个类型也就是说,我们查询完了,要封装到哪里去,这里就是monster.zf.domain.User。
Mybatis 框架快速入门
那么当把这个配上之后,也就是sql语句执行完之后,实现封装的时候会把结果集封装到User对象里边, 并把这些User对象,添加到List集合中,这样我们这个工程就完整。那么当我们把这个封装的结果信息告诉mybatis后,再来运行就没有任何问题了????:
Mybatis 框架快速入门

那么刚才不成功的原因其实就是mybatis并不知道你要往User里边去封装,所以它没发法执行

通过快速入门示例,我们发现使用 mybatis 是非常容易的一件事情,因为只需要编写 Dao 接口并且按照mybatis 要求编写两个配置文件,就可以实现功能。远比我们之前的 jdbc 方便多了。(我们使用注解之后,将变得更为简单,只需要编写一个 mybatis 配置文件就够了。)
但是,这里面包含了许多细节,比如为什么会有工厂对象(SqlSessionFactory),为什么有了工厂之后还要有构建者对象(SqlSessionFactoryBuilder),为什么 IUserDao.xml 在创建时有位置和文件名的要求等等。

这些问题我们在自定义 mybatis 框架的章节,通过层层剥离的方式,给大家讲解。
请注意:我们讲解自定义 Mybatis 框架,不是让大家回去自己去写个 mybatis,而是让我们能更好了了解
mybatis 内部是怎么执行的,在以后的开发中能更好的使用 mybatis 框架,同时对它的设计理念(设计模式)有一个认识。


下一篇????MyBatis----入门案例中的设计模式以及mybatis的注解开发

本篇博客到这就完啦,非常感谢您的阅读????,那么下一篇将会详细解释入门案例中的语句,以及各种接口、类、对象的作用。如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔????

本文地址:https://blog.csdn.net/w15977858408/article/details/109382986

相关标签: mybatis