玩转MyBatis01——第一个Mybatis程序

Mybatis 是一款优秀的持久层框架,是我们工作学习过程中不可或缺的一部分。 本教程致力于打造 Mybatis 的保姆级教程,祝您学习愉快~

1 准备工作

1.1 创建父工程

  1. File -> New -> Project
    在这里插入图片描述

  2. 选择 maven ,next
    在这里插入图片描述

  3. 填写项目名称 Name,GroupId 以及 ArtifactId,点击 Finish
    在这里插入图片描述

  4. 删除 src 目录,把当前项目当作父工程目录
    在这里插入图片描述

  5. 在 pom.xml 文件中导入 jar 包

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>

1.2 创建当前工程module

  1. 在父目录上点击右键,New -> Module在这里插入图片描述
  2. 继续创建一个 maven 项目,添加 module 的 Name、ArtifactId,最后 finish,得到如下目录结构
    在这里插入图片描述

1.3 数据库准备

CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

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');

2 实操

利用 Mybatis 的整体的过程是:

  1. SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
  2. 通过 SqlSessionFactory 实例获得 SqlSession 实例
  3. 通过 SqlSession 实例操作数据库

上述过程的前两步都是固定的,因此我们可以将其抽象出来,方便后续直接调用。详细介绍可以看官网入门教程

2.1 编写配置文件

在这里插入图片描述

  1. 在 resources 目录下新增 jdbc.properties 配置文件,用于配置数据库连接信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=******
  1. 在 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>
    <properties resource="jdbc.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

</configuration>

2.2 编写 Mybatis 工具类

在这里插入图片描述

在 java.com.jason.utils 包下创建 MybatisUtils.java 文件

package com.jason.utils;

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;

/**
 * @Author Jason
 * @Date 2022/1/10 1:09 下午
 * @Description
 */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //获取SqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

2.3 编写实体类

在这里插入图片描述

在 java.com.jason.pojo 包下创建 User.java 文件。注意该类的字段需要与 1.3 中数据库的列严格一致。

package com.jason.pojo;

/**
 * @Author Jason
 * @Date 2022/1/10 1:11 下午
 * @Description
 */
public class User {
    private long id;
    private String name;
    private String pwd;

    public User() {}

    public User(long id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    
	@Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

2.4 编写 mapper

在这里插入图片描述

  1. 创建 UserMapper 接口类
package com.jason.mapper;

import com.jason.pojo.User;

import java.util.List;

/**
 * @Author Jason
 * @Date 2022/1/10 1:14 下午
 * @Description
 */
public interface UserMapper {
    List<User> getUserList();
}

  1. 编写 UserMapper.xml 配置文件,注意 namespace 不能写错,对应 Mapper 接口或者 Dao 接口的完整包名。id 是接口中的方法,resultType 是返回类型,如果返回的是集合的话就写集合中的范型类型。
<?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绑定一个对应的Mapper(Dao)接口-->
<mapper namespace="com.jason.mapper.UserMapper">

    <!--select查询语句, resultType 写集合的范型的类型-->
    <select id="getUserList" resultType="com.jason.pojo.User">
        select *
        from mybatis.user
    </select>


</mapper>

2.5 编写测试文件

在这里插入图片描述

建议创建同名包路径下的测试文件!

package com.jason.mapper;

import com.jason.pojo.User;
import com.jason.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @Author Jason
 * @Date 2022/1/10 1:19 下午
 * @Description
 */
public class UserMapperTest {
    @Test
    public void selectTest() {
        // 获取 SqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        // 执行 SQL
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        // 关闭 SqlSession
        sqlSession.close();

    }
}

  • 问题1:
    此时如果直接运行该测试用例,可能提示 org.apache.ibatis.binding.BindingException: Type interface com.jason.mapper.UserMapper is not known to the MapperRegistry. ,需要我们将编写的 mapper 注册到 mybatis-config.xml 文件中
    在这里插入图片描述
  • 问题2:
    可能出现报错### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/jason/mapper/UserMapper.xml,需要我们按照 2.6 步骤添加之后,clean 掉target ,关闭并重新打开 idea。
    在这里插入图片描述

2.6 解决静态资源过滤问题

在 pom.xml 文件(dependencies 的同级)中添加以下内容, 并更新一下 maven

<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>

2.7 运行成功

在这里插入图片描述

3 参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值