Mybatis 系列 3:Mybatis 的第一个测试用例

1,283 阅读2分钟

在项目 src 目录下新建 test 包,并创建 AppTest 类。

pom 文件引入 junit 测试依赖:

创建测试类AppTest。

编写查询用户 id 为 1 的用户信息。

前提:操作mybatis,需要一个连接对象SqlSession(会话)

SqlSession 里有多个方法:select、insert、update、delete、selectList、selectOne 等等。

这里我们选择 selectOne,作用是查询单个对象,而且是需要选择传入两个参数的方法。

很显然,第一个参数是通过 mapper 映射文件的命名空间(namespace) + id 唯一来找到 SQL 语句。

第二个参数则是需要传入 SQL 的参数,这里查询用户 id 为 1 的用户信息,所以该参数的值就为 1。

前提是,如何构建SqlSession?

逆向推导:SqlSession <- SqlSessionFactory <- SqlSessionFactoryBuilder <- 通过流对象 InputStream 创建 <- 读取mybatis-config.xml 文件获取流对象。

有两点需要说明一下:

0)、IDEA 的 Maven 不会编译 src 的 java 目录下的 xml 文件,所以在 Mybatis 的配置文件中找不到 xml 文件!

解决方案:

①不将 xml 放到 src 目录下面,将 XxxMapper.xml 放到 Maven 构建的resource 目录下面!

②在 Maven 的 pom 文件中,添加下面代码:

这里使用方案 2。

1)、连接数据源DataSource时:

①、如果 MySQL 的驱动包为 8 以上的,主配置文件中 driver 的 value 值应为 com.mysql.cj.jdbc.Driver,而非 com.mysql.jdbc.Driver, 日志显示说该类已弃用(This is deprecated),可到 jar 包查询该类,无参构造器会抛出 SQLException 异常,并打印相关信息。

②、系统时区的错误,可通过 show VARIABLES like "%time_zone%" 查看,默认为 SYSTEM。

解决方案:

0、url 的 value 值后面加上参数 serverTimezone=GMT。

1、设置 MySQL 的时区:MySQL 默认的时区是 UTC 时区 :

0)永久的修改:修改 MySQL 的配置文件,添加:default-time-zone='+08:00',重启mysql生效 。

1)临时的修改:执行 MySQL 命令 set global time_zone='+08:00',立即生效,重启 MySQL 后失效。

这里使用方案 0,在 url 后面加上参数 serverTimezone=GMT:

jdbc:mysql://localhost:3306/mybatis-demo?serverTimezone=GMT

运行测试用例,并打印结果:

看到控制输出结果,并且没有报错,则说明 Mybatis 的框架已经初步搭建好并可以使用了。

下面,我们接着写查询所有用户信息的测试类:

0、先在 UserMapper.xml 中编写对应的 SQL 语句:

1、编写查询所有用户信息的测试用例并打印结果:

tips:查看官方文档是学习一门新语言最有效的方法。

系列预告:Mybatis 系列 4:引入日志框架

关注「阿泽学长」,解锁更多干货。