Mybatis 教程

Mybatis 教程

第一个 Mybatis 程序

思路:搭建环境 \(\to\) 导入 Mybatis \(\to\) 编写代码 \(\to\) 测试

image-20230111170714910

搭建环境

  1. 搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;

CREATE TABLE `user` (
  `id` INT(20) NOT NULL,
  `name` VARCHAR(30) DEFAULT NULL,
  `pwd` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT  INTO `user`(`id`,`name`,`pwd`) VALUES (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
  1. 新建项目
    1. 新建一个普通的 maven 项目
    2. 删除 src 目录

导入 Mybatis

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

创建模块

  1. 编写 mybatis 核心配置文件:在 resources 文件夹内创建 mybatis-config.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="130914"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个 Mapper.xml 都需要在 Mybatis 核心配置文件中注册!-->
    <mappers>
        <!--注意名字千万不要写错啦-->
        <mapper resource="com/locke/dao/UserMapper.xml"/>
    </mappers>
</configuration>
  1. 编写 mybatis 的工具类:在 com.locke.utils 中新建 MybatisUtils 类(连接数据库

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

拿到 SqlSessionFactory 后,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 获取 SqlSession 连接
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

编写代码

  1. 实体类:在 com.locke.pojo 中新建 User
public class User {
    private int id;  // id
    private String name;   // 姓名
    private String pwd;    // 密码
    //构造,有参,无参
    //set/get
    //toString()
}
  1. Dao 接口:在 com.locke.Dao 中新建 UserMapper 接口
public interface UserMapper {
    List<User> selectUser();
}
  1. 接口实现类:在 com.locke.Dao 中新建 UserMapper.xml 配置文件(原来是 UserDaoImpl
<?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.locke.dao.UserMapper">
    <!--id 就是接口中方法的名字,本来是需要重写的(例如先连接数据库再执行查询),
    现在只需要绑定,不需要再连接数据库,只用专注于 sql 代码-->
    <!--resultType 代表返回类型-->
    <select id="selectUser" resultType="com.locke.pojo.User">
        select * from user
    </select>
</mapper>

测试

public class UserDaoTest {
    @Test
    public void selectUser() {
        // 第一步:获取 SqlSession 对象
        SqlSession session = MybatisUtils.getSession();
        // 第二步:执行 SQL
        // 方法一:
        // List<User> users = session.selectList("com.locke.mapper.UserMapper.selectUser");
        // 方法二:
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.selectUser();
        for (User user: users){
            System.out.println(user);
        }
        // 第三步:关闭 sqlSession
        session.close();
    }
}

注意点:可能出现问题说明:Maven 静态资源过滤问题

pom.xml 中添加:以免找不到我们的 xml 文件

<!--在 build 中配置 resources,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

最终输出:

User{id=1, name='狂神', pwd='123456'}
User{id=2, name='张三', pwd='abcdef'}
User{id=3, name='李四', pwd='987654'}

参考资料

  1. B站视频地址
  2. 狂神课堂笔记
posted @ 2024-02-08 21:12  Lockegogo  阅读(20)  评论(0编辑  收藏  举报