Eclipse创建Mybatis查询

1. 项目创建

1.1 创建动态页面

在Eclipse中创建Dynamic Web Project

微信图片_20240529235826.png

微信图片_20240529235934.png

这里后续没有使用的web.xml,可以不勾选

1.2 导入相关的jar包

在WEB-INF下的lib中导入Spring相关的jar包,这里使用到的包有两个:

mybatis.jar、mysql-connector-java.jar,其中的log4j是日志输出文件可选择导入

微信图片_20240530184800.png

1.3 数据库创建

创建一个库名为exam的数据库,在里面创建一个名为student的表:

1
2
3
4
5
6
CREATE TABLE `student`  (
`id` int(11) NOT NULL,
`Sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Sage` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

1.4 插入数据

1
2
INSERT INTO `student` VALUES (1, '张三', '12');
INSERT INTO `student` VALUES (2, '李四', '19');

2. 项目配置

2.1 mybatis.xml

在src目录下创建mybatis.xml配置数据库链接包扫描等等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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="db.properties"/>
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<typeAliases>
<package name="pojo"/>
</typeAliases>

<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="dao"></package>
</mappers>
</configuration>

2.2 db.properties

在src目录下创建db.properties文件存放sql账号密码

1
2
3
4
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/exam?useSSL=false&serverTimezone=UTC
mysql.username=root
mysql.password=123456

*2.3 log4j.properties

在src目录下创建log4j.properties文件存放日志配置文件,如果这步骤不选择,在2.1中将log4j的扫描项删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Global logging configuration
log4j.rootLogger=debug, stdout,logfile
# MyBatis logging configuration...
log4j.logger.mapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
# File output...
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=log/File_log.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n

3. 项目编写

3.1 实体类(pojo)

在src中创建子文件夹pojo,在pojo中创建student.java实体类

1
2
3
4
5
6
public class student {
private int id;
private String Sname;
private String Sage;
//省略get、set、空参、全参、tostring方法
}

3.2 数据持久层(dao)

在src中创建子文件夹dao,在dap中创建studentMapper.java持久类

1
2
3
4
public interface studentMapper {
@Select("select * from student where id = #{id}")
public student findbyid(int id);
}

3.3 初始化数据工厂

在src中创建子文件夹utils,在utils中创建MybattisUtils.java工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package 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.InputStream;

public class MybattisUtils {
static SqlSessionFactory sqlSessionFactory=null;
static{
try {
InputStream in = Resources.getResourceAsStream("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}

4. 项目测试

4.1 测试类

在src中创建子文件夹test,在test中创建studenttest.java测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package test;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import dao.studentMapper;
import pojo.student;
import utils.MybattisUtils;

public class studenttest {

@Test
public void findtest() {
SqlSession sqlSession = MybattisUtils.getSession();
studentMapper sm = sqlSession.getMapper(studentMapper.class);
student s = sm.findbyid(1);
System.out.println(s);
}
}

4.2 测试截图

1717067323021.png

5. 项目报错解决

5.1 Junit测试

1717068350765.png

提示信息显示Junit测试包不存在,但是可能会有手动在lib中添加Junit包的情况出现这个报错:

1717067702432.png

但是我们发现手动添加的和框架添加的会有不同,框架自动添加的会在项目目录中出现如下:

1717067767063.png

只有在项目目录中出现这个库的时候我们才能后正常的执行测试,这里就需要自己在项目中手动的添加这个依赖框架:

1717067899816.png

右键项目选择Properties,按照图中手动添加测试框架:

1717067991566.png

这样在项目中就会出现Junit测试框架并且可以正常的运行测试类。

5.2 对象无法映射

1717068301426.png

没有对象结果输出,通过了解左侧的报错得知,查询到的结果没有结果映射。

这个错误信息表明在尝试从数据库查询数据并将其映射到pojo.student类时,MyBatis找不到与[java.lang.Integer, java.lang.String, java.lang.String]参数匹配的构造函数。这里查看发现是在实体类中没有编写空参构造器,这样导致student对象无法创建,解决办法在其中添加上空参构造器就可以解决。