1.首先要想使用mybatis需要先搭建环境
需要的环境有mybatis 3.5.2 ,maven,Junit,mysql 。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<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.33</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
当写完UserMapper时,会出现一个资源无法找到问题,这是因为maven的资源过滤(在最终测试时会发现)需要添加一个build
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
然后是在resources 创建一个mybaits的核心配置文件用来连接数据库,以及配置需要加载的Dao层的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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1111111"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/DAO/User-mapper.xml"/>
</mappers>
</configuration>
其中要注意的是 mapper 需要的路径是xml路径,但是是以斜线(易错)表示的
3.写pojo层的实体类User 以及utils工具类
public class mybitsUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybits-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public SqlSession getSqlSession()
{
return sqlSessionFactory.openSession();
}
}
4. 接下来是Dao层的 UserDao 接口 ,然后是重点配置,写UserDao的配置mapper xml
<mapper namespace="org.DAO.UserDao">
<select id="getUserbyId" parameterType="int" resultType="org.pojo.User">
select * from mybatis.user where id=#{id}
</select>
</mapper>
namespace中填写的是 Dao层的UserDao的类路径,id是要UserDao里的想要实现的方法,
parameterType中 是接口需要接收的数据类型,resultType 需要的是查询所对应返回结果的实体类User类路径,sql中的#{id} 要和User 里面的变量一 一对应
5. 黑盒测试
mybitsUtils mybitsUtils = new mybitsUtils();
SqlSession sqlSession = mybitsUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User userbyId = mapper.getUserbyId(1);
System.out.println(userbyId);
遇到的问题
1.昨天写的没问题的项目,今天再打开直接爆红,这是因为缓存导致的,需要invalidate cache(清除缓存数据)
2.当测试增删改的时候需要手动提交事务,否则可以idea不会报错,但数据库不会更新