Java学习之Mybatis框架入门篇

Java学习之Mybatis框架入门篇

0x00 前言

前面文章使用jdbc进行数据库的连接,虽然代码并不复杂,但是比较繁琐。在连接池的文章里面也使用到了JDBC Template简化了数据库操作的步骤,但是Template只是对JDBC进行了简单的封装,是一个工具类,而并不是一个框架。

0x01 Mybatis概述

1.mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

2.mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。

3.采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我
们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

0x02 Mybatis配置

我们搭建mybatis环境的几个步骤:

1:创建maven工程并导入坐标

2:创建实体类和dao的接口

3:创建Mybatis的主配置文件
Conifg.xml

4:创建映射配置文件UserDao.xml

创建一个maven工程,然后配置pom.xml文件。

 <packaging>jar</packaging>   //打包方式设置为jar
    <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.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>

添加mybatis和mysql连接驱动包的坐标。

完成后,创建一个userdao的接口

package com.test.dao;

import com.test.domain.User;

import java.util.List;

public interface Userdao {
    List<User> findAll();
}

然后需要创建一个config.xml文件来指定连接数据库的参数

mapconfig.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://localhost:3306/demo"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

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

还得添加一个映射配置文件

<?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.test.dao.Userdao">

    <select id="findAll" resultType="com.test.domain.User">
        select * from user
    </select>


</mapper>

这里就搭建完成了,这里还有几个注意事项:

1.创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一样的

2.mybatis的映射配置文件位置必须和dao接口的包结构相同
		
3.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

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

这样我们就不需要再创建dao的实现类来完成jdbc的操作了。到这一步mybatis的就简单配置好了。

0x02 Mybatis 使用

mybatis配置完成后,建立一个test类,查询数据库里面的信息。

使用Mybatis步骤:

1.读取配置文件

2.创建SqlSessionFactory工厂

3.创建SqlSession

4.创建Dao接口的代理对象

5.执行dao中的方法

6.释放资源

代码:

package com.test;


import com.test.dao.Userdao;
import com.test.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.IOException;
import java.io.InputStream;
import java.util.List;

public class mybatistest {


    public static void main(String[] args)throws Exception {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("mapconfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        Userdao userDao = session.getMapper(Userdao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user.toString());
        }
        //6.释放资源
        session.close();
        in.close();
    }

}

以上的是配置xml的写法,个人比较喜欢使用注解来配置。

注解配置Mybatis

我们只需要在接口处加一个select的注解就可以了

package com.test.dao;

import com.test.domain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface Userdao {
    @Select("select * from user")
    List<User> findAll();
}

这样我们就可以删除前面创建的userdao.xml文件。

使用注解配配置,还需要修改一下mapconfig.xml的配置
原本的xml配置:

<mappers>
        <mapper resource="com/test/dao/Userdao.xml"/>
    </mappers>

改为:

<mappers>
        <mapper class="com.test.dao.Userdao"/>
    </mappers>

mapper 这里使用注解使用class指定被select注解的接口就完成了。

0x03 结尾

本章节内容就先写这么多,下篇文章继续更新Mybatis内容。

posted @ 2020-08-27 06:23  nice_0e3  阅读(486)  评论(0编辑  收藏  举报