Mybatis框架回顾
在上篇博客中讲解了搭建Mybatis环境的几点注意事项,因为遵守3、4、5点,所以直接使用dao接口的代理对象来对数据库执行操作,我们直接通过xml配置文件配置即可,不需要再创建dao接口的实现类,其实使用实现类也可以完成,接下来就演示通过dao接口的实现类来完成对数据库的操作
既然使用实现类来完成对数据库的操作,那么就不需要使用代理对象来执行相应的方法了,
这是现在的目录结构,UserDaoImpl是UserDao接口的实现类,现在只需要对UserDaoImpl和MybatisTest进行修改即可
MybatisTest中获取接口UserDao接口的代理对象的代码就可以删除
UserDao mapper = sqlSession.getMapper(UserDao.class);
删除之后使用sqlSession对象来执行查询所有记录的方法,这个方法应该在UserDao接口的实现类中执行
可以在UserDaoImpl中获取在MybatisTest中创建的工厂,通过工厂获取sqlSession对象,让该对象执行查找所有记录的方法
selectList方法可以执行相应的SQL语句并且将查询到的结果封装到一个集合中
但是这个方法需要一个参数,就是要执行的SQL语句,需要对SQL语句进行定位,UserDaoImpl中的完整代码为
package com.qjz.dao.impl;
import com.qjz.dao.UserDao;
import com.qjz.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDaoImpl implements UserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory){
this.factory = factory;
}
public List<User> findAll() {
SqlSession sqlSession = factory.openSession();
List<User> list = sqlSession.selectList("com.qjz.dao.UserDao.findAll");
return list;
}
}
MybatisTest的内容为:
package com.qjz.test;
import com.qjz.dao.impl.UserDaoImpl;
import com.qjz.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
public static void main(String[] args) throws IOException {
//加载文件
InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
//构建者模式创建工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
UserDaoImpl userDao = new UserDaoImpl(factory);
List<User> all = userDao.findAll();
for (User user : all) {
System.out.println(user);
}
in.close();
}
}
运行主方法
查询成功
注解实现
处理上述讲解的通过接口的实现类来实现数据库中数据的查询,还可以使用注解来开发
使用注解直接在dao的接口上面添加注解就可以实现给接口创建代理
在接口的方法上添加注解
package com.qjz.dao;
import com.qjz.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface UserDao {
@Select("select * from stu")
List<User> findAll();
}
通过注解提供了代理类在原接口的方法上加强的语句,可以直接删除UserDao.xml
此时项目的目录结构为
因为没有了UserDao.xml,就需要对主配置文件中的内容进行相应的修改
<mappers>
<mapper class="com.qjz.dao.UserDao"/>
</mappers>
运行测试类中的主方法
查询成功,以后可以使用注解来方便我们开发