当我们遵守以下3条时,我们就不需要写dao接口的实现类:
- mybatis的映射配置文件必须和dao接口的包结构相同
- 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类型
- 映射配置文件的操作(select,update),id属性的取值必须是dao接口的方法名
但我们仍然可以自己写dao接口的实现类,来加深理解使用mybatis,当然这不是一定要这么做的。
在xml项目的基础上稍加更改:
1、在dao包下创建impl.UserDaoImpl.java
1 public class UserDaoImpl implements IUserDao { 2 3 private SqlSessionFactory factory; 4 //由于要用到SqlSessionFactory,所以需要实例化的时候,把参数传递进来 5 public UserDaoImpl(SqlSessionFactory factory){ 6 this.factory = factory; 7 } 8 public List<User> findAll() { 9 //使用工厂创建SqlSession对象 10 SqlSession session = factory.openSession(); 11 //使用session执行查询方法 12 //statement:就是配置文件的namespace+id 13 List<User> users = session.selectList("com.mantishell.dao.IUserDao.findAll"); 14 session.close(); 15 return users; 16 } 17 }
2、修改测试代码
1 //1、读取配置 2 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); 3 //2、创建SqlSessionFactory工厂 4 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//创建工厂 mybatis使用了构建者模式,构建者模式:把对象的创建细节隐藏,使使用者直接调用方法即可拿到对象。 5 SqlSessionFactory factory = builder.build(in);//builder就是构建者 6 //3、使用工厂创建Dao对象 7 IUserDao userDao = new UserDaoImpl(factory); 8 //4、使用代理对象执行方法 9 List<User> users = userDao.findAll(); 10 for (User user : users) { 11 System.out.println(user); 12 } 13 //5、释放资源 14 in.close();