mybatis框架实验
时间: 2024-12-29 16:18:00 浏览: 5
### MyBatis 框架实验教程
#### 创建项目结构并引入依赖
为了使用 MyBatis 进行开发,首先需要设置好项目的环境。确保项目中包含了必要的 Maven 或 Gradle 依赖项来支持 MyBatis 的运行[^1]。
对于 Maven 用户来说,在 `pom.xml` 文件内添加如下依赖:
```xml
<dependencies>
<!-- MyBatis core library -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- Database driver, here we use H2 as an example -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Other dependencies like Spring Boot can be added based on project requirements -->
</dependencies>
```
#### 编写配置文件 mybatis-config.xml
接下来要创建一个名为 `mybatis-config.xml` 的全局配置文件用于指定数据源和其他属性。此文件通常位于资源目录下(src/main/resources),并且应该包含类似于下面的内容[^2]:
```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="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:testdb"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
```
#### 定义 DAO 接口与 Mapper XML 文件
DAO 接口定义了操作数据库的方法签名;而对应的 Mapper XML 则提供了具体的 SQL 查询语句以及参数映射规则。这里给出一个简单的例子——假设有一个 User 表,则可以这样设计 UserDao.java 和 UserMapper.xml:
**UserDao.java**
```java
public interface UserDao {
int addUser(User user);
}
```
**UserMapper.xml**
```xml
<mapper namespace="UserDao">
<insert id="addUser" parameterType="User">
INSERT INTO users(name, email) VALUES(#{name}, #{email})
</insert>
</mapper>
```
#### 使用工具类简化 Session 管理
为了避免每次都需要重复打开关闭 SqlSession 的过程,可以通过编写辅助函数来进行封装。例如,可以在 MyBatisUtil 类里加入静态方法 getSession() 来获取新的会话实例,并提供 closeSession 方法负责释放资源[^3].
```java
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class MyBatisUtil {
private static final SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
public static void closeSession(SqlSession sqlSession){
if(sqlSession != null){
sqlSession.close();
}
}
}
```
#### 测试一级缓存效果
最后一步就是验证 MyBatis 提供的一些特性是否正常工作。比如想要了解一级缓存的行为模式,那么可以根据给定的场景执行两次相同的查询请求看是否会命中缓存[^5]. 下面是一个简单的单元测试案例展示如何做这件事:
```java
@Test
void testFirstLevelCacheBehavior() throws Exception{
// First query
try (SqlSession sessionOne = MyBatisUtil.getSession()) {
UserDao userDao = sessionOne.getMapper(UserDao.class);
List<User> firstResult = userDao.getAllUsers();
// Second identical query within the same session scope should hit cache.
List<User> secondResult = userDao.getAllUsers();
assertEquals(firstResult.size(), secondResult.size());
assertTrue(sessionOne.isClosed()); // This line is not necessary but shows that session has been closed automatically after using it with 'try-with-resources'
}
}
```
阅读全文