Mybatis 入门案例-实现类
# 30.Mybatis 入门案例-实现类
我们之前说过,Mybatis 可以创建代理对象,这样我们就不用写实现类了;但如果我们实在想自己实现实现类也是可以的。
# 自定义实现类
新建一个实现类,新建 findAll 方法
package com.peterjxl.dao.impl;
import com.peterjxl.dao.IUserDao;
import com.peterjxl.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
@Override
public List<User> findAll() {
//1.使用工厂创建 SqlSession 对象
SqlSession session = factory.openSession();
//2.使用 session 执行查询所有方法
List<User> users = session.selectList("com.peterjxl.dao.IUserDao.findAll");
session.close();
//3.返回查询结果
return users;
}
}
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
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
这里我们在方法里使用 Session 对象查询数据库,其参数是接口类的全限定类名 + 方法名
# 测试
修改测试类,增加一个新的测试方法:这里去掉了创建代理对象的语句,而是直接创建自定义实现类的对象
/**
* 测试自定义实现类的情况下,查询数据库
* @throws Exception
*/
@Test
public void helloMybatis2() throws Exception{
// 1. 读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 创建 SqlSessionFactory 工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3. 使用工厂创建 dao 对象
IUserDao userDao = new UserDaoImpl(factory);
// 5. 执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
// 6. 释放资源
in.close();
}
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 总结
我们在实际开发中,都是代码越简便越好,所以不管使用 XML 还是注解配置,都是不写 dao 实现类的。但是要知道 Mybatis 它是支持写 dao 实现类的。
本文主要是演示通过全限定类名和方法名,才能定位到唯一一个 SQL 的作用。
本文所有代码已上传到了 GitHub (opens new window) 和 Gitee (opens new window) 上,并且创建了分支 demo3,读者可以通过切换分支来查看本文的示例代码。
上次更新: 2024/10/1 21:14:36