Mybatis笔记(1)-快速入门

概述

中文文档: https://mybatis.org/mybatis-3/zh/index.html

MyBatis 是支持定制化 SQL,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJO映射成数据库中的记录。它内部封装了 jdbc使开发者能更专注于 SQL 代码, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程

快速入门

该示例基于IDEA的Maven项目。

1.导入依赖

主要是导入mybatis和mysql jdbc驱动包依赖。

<!-- 两个必须导入的依赖 -->
<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>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

使用lombok可以通过使用@Data注解修饰entity类,从而使Lombok为该类自动生成getter、setter、constructor以及toString。

使用前需在idea中安装Lombok插件:【Settings】-》【Plugins】,搜索Lombok,安装即可。

若不使用Lombok则后述的User类注意添加getter、setter等。

2.创建实体类、数据表以及dao接口(Mapper)

包结构:

image-20200914213616915

user表:

image-20200913232633655

User

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
}

UserMapper

public interface UserMapper {
    User selectById(Integer id);
}

Mybatis中,把dao接口称为Mapper(映射器)。

3.创建映射文件

在resource目录下创建Mapper对应的xml配置文件,Mapper对应的xml文件在resource中的目录结构要与Mapper的包结构保持一致,如图:

image-20200914213717783

PS:IDEA的Maven项目中,在resource目录下不能创建package,只能创建redirect,且创建目录时,需一层一层创建,这样在磁盘中才会有对应的目录结构,若在创建时使用 com.entity的命名方式,则在磁盘中只会创建一个名为com.entity的目录

UserMapper.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.dao.UserMapper">
    <!-- #{id}将会接收UserMapper.selectById方法中的id参数 -->
    <select id="selectById" resultType="com.entity.User" >
        select * from user where id = #{id}
    </select>
</mapper>

4.创建主配置文件

主配置文件用于用于配置数据源,事务管理器,映射文件位置等其他全局设置。一般命名为SqlMapConfig.xml,放在resource目录下。

<?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>
    <!-- default属性指定配置的environment中某一个的id -->
    <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/test?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的路径,注意分隔符是 / 而不是 . -->
    <mappers>
        <mapper resource="com/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

5.获取SqlSession,进行数据库操作

测试方法:

@Test
public void test() throws IOException {
    //获取主配置文件的输入流
    InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");

    //创建SqlSessionFactoryBuilder
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

    //通过SqlSessionFactoryBuilder加载输入流,创建工厂
    SqlSessionFactory factory = builder.build(in);

    //通过工厂创建SqlSession对象
    SqlSession sqlSession = factory.openSession();

    //通过SqlSession对象获取Dao的代理对象
    UserDao userDao = sqlSession.getMapper(UserDao.class);

    //执行数据库操作
    User user = userDao.selectById(1);
    System.out.println("user = " + user);
    
    //关闭sqlSession
    sqlSession.close();
}


执行test方法,输出:user = User(id=1, username=张三, password= 123456)

获取SqlSession步骤

步骤如下:

  1. 读取配置文件。通过org.apache.ibatis.io.Resources类的getResourceAsStream()静态方法获取主配置文件的输入流:

    InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

  2. 创建SqlSessionFactory工厂。SqlSessionFactory不能直接通过构造器创建,需先创建一个SqlSessionFactoryBuilder,再通过builder加载上述创建的输入流,创建工厂对象:

    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.builde(in);//传入主配置文件的输入流
    
  3. 通过工厂创建SqlSession对象

    SqlSession session = factory.openSession();

  4. 通过session获取dao接口的代理对象也可以不使用代理对象,直接使用session对象的方法实现数据库操作,如selectAll()等

    XxxDao dao = session.getMapper(XxxDao.class);

  5. 使用该dao代理对象执行方法,进行数据库操作。

posted @ 2020-09-17 22:25  bxxiao  阅读(196)  评论(0)    收藏  举报