MyBatis 初见面

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。详细介绍可参考中文官网:https://mybatis.net.cn/

MyBatis 是目前比较流行的持久层框架,下面就用一个简单的 demo 来作为这款框架的入门介绍吧。

数据库数据准备

我这里选择是的Mysql 8.0.23 版本的数据库。

首先,创建一个数据库,创建模板语句如下

CREATE DATABASE IF NOT EXISTS <数据库名>
DEFAULT CHARACTER SET <字符集名>] 
DEFAULT COLLATE <校对规则名>];

我使用的创建语句

CREATE DATABASE IF NOT EXISTS hukan
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

然后,创建用户表,表名:mybatis-user,SQL 如下:

create table mybatis_user
(
    id   int auto_increment
        primary key,
    name varchar(30) not null,
    pwd  varchar(32) not null
)
comment 'mybatis-用户表';

最后,像用户表中插入几条数据供后面程序使用

insert into mybatis_user (id, name, pwd)
values (1,'胡侃','123');
insert into mybatis_user (id, name, pwd)
values (1,'张三','123');
insert into mybatis_user (id, name, pwd)
values (1,'李四','235');

这样我们案例中需要使用到的数据库数据就准备完成了,接下里开始编写代码。

MyBatis 入门案例开发

我这里使用 idea 作为开发的工具

先创建一个不使用骨架的 Maven 工程,删除里面的 src 文件夹,该工程我们作为父工程使用,不需要放置代码。然后添加今天案例使用的模块。创建完成后的项目如图:

创建父工程的目的是为了方便管理多个子模块的 jar 包依赖。 

向父工程中的 pom.xml(上图中下面那个) 文件添加项目需要的 jar。文件依赖内容如下:

<dependencies>
            <!-- 导入 MyBatis 依赖  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!-- 导入 Junit 依赖  -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!-- 导入 Mysql 依赖  -->
        <dependency>
          <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
            <scope>runtime</scope>
        </dependency>
 </dependencies>

 编写 User 实体类 ,这里需要注意的是 User 类的属性需要和数据库中字段名保持一致。代码如下:

package com.hukanmasheng.pojo;

public class User {
    private Integer id;
    private String name;
    private String pewd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pewd='" + pewd + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPewd() {
        return pewd;
    }

    public void setPewd(String pewd) {
        this.pewd = pewd;
    }
}

接下来编写 User 的数据访问层接口,在 Mybatis 中更喜欢用 mapper 来表示数据层。代码如下:

package com.hukanmasheng.mapper;

import com.hukanmasheng.pojo.User;

import java.util.List;

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

 前面的代码完成以后,现在我们要进入今天的主题:MyBatis ,这部分可以参考 https://mybatis.net.cn/ 入门部分。

在 main->resources 目录中新增 MyBatis 核心配置文件  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.jdbc.Driver"/>
                <!-- 数据库地址 -->
                <property name="url" value="***"/>
                <!-- 用户名 -->
                <property name="username" value="***"/>
                <!-- 密码 -->
                <property name="password" value="***"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

在 main->resources 目录中新建 mapper 文件夹,在该文件夹中新增 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.hukanmasheng.mapper.UserMapper">
    <select id="findAll" resultType="com.hukanmasheng.pojo.User">
        select * from mybatis_user
    </select>
</mapper>

这里的 namespace 指向 User 的数据访问接口 UserMapper。mapper 标签内可以理解为接口的具体实现。 id 和接口方法名保持一致,resultType 为接口返回数据类型。注意这里都要使用全限定类名。

那么怎么调用 UserMapper.xml 呢?这里就需要获取SqlSession 对象,这里我将获取SqlSession 的方法封装了一个工具类。代码如下:

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

}

如果到这里你就以为全部搞定,那就大错特错了。我们需要在 mybatis-config.xml 文件中注册 UserMapper.xml 文件。不然运行测试代码的时候会报如下错误:

Type interface com.hukanmasheng.mapper.UserMapper is not known to the MapperRegistry.

添加 mappers 标签, 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.jdbc.Driver"/>
                <!-- 数据库地址 -->
                <property name="url" value="jdbc:mysql://localhost:3306/hukan?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!-- 用户名 -->
                <property name="username" value="root"/>
                <!-- 密码 -->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写测试类代码。测试代码放在 test 文件夹下面。代码如下:

package com.hukanmasheng.mapper;

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

import java.util.List;

public class UserMapperTest {
    @Test
    public void test()
    {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> all = mapper.findAll();
        sqlSession.close();
        System.out.println(all);
    }
}

运行测试代码,控制台即可打印出查询出的数据:

虽然结果正确打印了,但还是有个小问题,你可能会遇到:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
这行提示。这个就是希望我们使用更新的 com.mysql.cj.jdbc.Driver

将这个的 value 替换即可。再次运行,文字消失了。

 

 到这里我们就完成了和MyBatis的第一次见面。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值