MyBatis【一】 简介及入门

时间:2020-06-16 09:45:25   收藏:0   阅读:53

Mybatis 简介

持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

为什么需要持久化服务呢?由于内存本身的缺陷引起的

持久层

为什么需要 MyBatis


Mybatis 入门程序

搭建环境-->导入MyBatis--->编写代码--->测试

1. 搭建数据库

CREATE DATABASE mybatis;

USE mybatis;

DROP TABLE IF EXISTS USER;

CREATE TABLE USER(
	id INT(20) NOT NULL PRIMARY KEY,
	NAME VARCHAR(30) DEFAULT NULL,
	pwd VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO USER(id, NAME, pwd) VALUES
(1, ‘张三‘, ‘123456‘),
(2, ‘李四‘, ‘abcdef‘),
(3, ‘王五‘, ‘000000‘);

2. 导入MyBatis

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

<!-- 导入依赖 -->
    <dependencies>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

3. 编写 MyBatis 核心配置文件(mybatis-config.xml)

在 src.main.resources 文件夹下创建 mybatis-config.xml 文件,该配置文件包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

这里目前只对 driver、url、username、password 的 value 进行了修改填写。一定要填写正确!!!

注意:一定要在此文件中注册 Mapper.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 核心配置文件 -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 每一个 Mapper.XML 都需要在 Mybatis 核心配置文件中注册!!-->
    <mappers>
        <mapper resource="com/song/dao/UserMapper.xml"/>
    </mappers>
</configuration>

4. 编写 MyBatis 工具类

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

通过 SqlSessionFactory 获得 SqlSession 对象实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。可以通过 SqlSession 实例来直接执行已映射的 SQL 语句

使用工具类实现可以避免重复的操作。

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;

// SqlSessionFactory --> sqlSession
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory; // 提升作用域

    static {
        try {
            // 使用Mybatis第一步:获取 SqlSessionFactory 对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    
    // 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    public static SqlSession getSqlSession(){
//        SqlSession sqlSession = sqlSessionFactory.openSession();
//        return sqlSession;
        return sqlSessionFactory.openSession();
    }
}

5. 创建实体类

构造和数据库中的表相对应的实体类:

public class User {
   
   private int id;  //id
   private String name;   //姓名
   private String pwd;   //密码
   
   //构造,有参,无参
   //set/get
   //toString() 
}

6. 编写 UserDao(Mapper) 接口

import com.song.pojo.User;
import java.util.List;

public interface UserDao {
    List<User> getUserList();
}

7. 编写 UserMapper.xml 文件

这个 xml 配置文件实现的功能与之前的 UserDao 接口的实现类(UserDaoImpl)一致。

UserMapper.xml 文件和 UserDao 接口在同一个包中。

<?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 接口-->
<mapper namespace="com.song.dao.UserDao">

    <!-- select 查询语句,id 绑定方法名,
    返回结果写全限定类名,因为配置文件不会像java类一样会自动找关联,集合都写泛型中的类-->
    <select id="getUserList" resultType="com.song.pojo.User">
        select * from mybatis.user
    </select>

</mapper>

8. 编写测试类

import com.song.pojo.User;
import com.song.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test(){
        // 第一步:获取 sqlSession 对象,使用工具类
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        try{
            // 方式一:执行 sql,通过 getMapper
            // 获取 userDao 对象
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();

            // 方式二:不推荐使用(已经进行了强制类型转换)
//        List<User> userList = sqlSession.selectList("com.song.dao.UserDao.getUserList");

            for (User user : userList){
                System.out.println(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 关闭 sqlSession
            sqlSession.close();
        }
    }
}

遇到的问题

  <!-- 每一个Mapper.XML 都需要在 Mybatis 核心配置文件中注册!!-->
      <mappers>
          <mapper resource="com/song/dao/UserMapper.xml"/>
      </mappers>
<!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

参考

Mybatis 官方文档:http://www.mybatis.org/mybatis-3/zh/index.html

狂神说 Java:https://www.bilibili.com/video/BV1NE411Q7Nx?p=2

原文:https://www.cnblogs.com/Songzw/p/13139011.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!