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,读者可以通过切换分支来查看本文的示例代码。
在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/6 21:54:08