自定义mybatis工具类
由上一篇文章《mybatis入门》演变到这一篇文章
1.我们看一下原始的mybatis框架使用过程
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1.读取mybatis配置文件
String config = "com/itheima/mybatis/mybatis-config.xml"; //定义mybatis配置文件路径
InputStream inputStream = Resources.getResourceAsStream(config);
//2.创建SqlSessionFactoryBuilder对象,并创建SqlSessionFactory对象,接着获取SqlSession对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.执行SQL语句
String sqlId = "com.itheima.mybatis.PersonDao.findAll";
List<Person> list = sqlSession.selectList(sqlId);
for (Person person : list) {
System.out.println("person = " + person);
}
//4.关闭sqlSession
sqlSession.close();
}
}
------------------------------------------------------分隔符------------------------------------------------------
看以上mybatis执行的过程,代码量比较大,真正与业务挂钩的就这么一小段。
//3.执行SQL语句
String sqlId = "com.itheima.mybatis.PersonDao.findAll";
List<Person> list = sqlSession.selectList(sqlId);
这一段代码,可以根据业务的需求,进行增删该查的功能,如果每进行一次新业务的操作,前面业务无关的代码都要写一遍,造成代码量大,代码耦合部分较多,代码看上去不简洁,
同时会降低开发的效率,给程序员浪费不必要的时间。
为了解决这个问题,我们可以把前面与业务无关的代码封装起来,程序员进行业务操作的时候,需要sqlSession对象,可以直接调用封装类的方法获取就行了。
调用方法获取到sqlSession对象后,只需要进行业务开发就行了。
2.自定义mybatis工具类
/**
* 自定义mybatis工具类
*
*
*/
public class MybatisConfig {
public static SqlSession getSqlSession(){
//1.读取mybatis配置文件
String config = "com/itheima/mybatis/mybatis-config.xml"; //定义mybatis配置文件路径
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(config);
} catch (IOException e) {
e.printStackTrace();
}
//2.创建SqlSessionFactoryBuilder对象,并创建SqlSessionFactory对象,接着获取SqlSession对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//返回SqlSession对象
return sqlSession;
}
}
3.创建测试类
public class MybatisTest2 {
//查询所有Person数据
@Test
public void findAll(){
//1.获取SqlSession对象
SqlSession sqlSession = MybatisConfig.getSqlSession();
//2.执行SQL语句
String sqlId = "com.itheima.mybatis.PersonDao.findAll";
List<Person> list = sqlSession.selectList(sqlId);
list.forEach(person -> System.out.println("person = " + person)); //lambda表达式
//3.关闭sqlSession对象
sqlSession.close();
}
//根据id查询Person数据
@Test
public void findById(){
//1.获取SqlSession对象
SqlSession sqlSession = MybatisConfig.getSqlSession();
//2.执行SQL语句
String sqlId = "com.itheima.mybatis.PersonDao.findById";
Person person = sqlSession.selectOne(sqlId,1); //这个方法里的第二个参数是SQL映射接口方法里传入的Id参数
System.out.println("person = " + person);
//3.关闭sqlSession对象
sqlSession.close();
}
}
观察以上代码,都是与业务相关的代码,mybatis创建sqlSession对象的过程都用工具类解决了,只需要调用就行了,代码显得很简洁舒服,方法之间的代码耦合部分很少。
4.@Test测试方法,执行SQL查询,查询控制台信息(查询的数据库表中数据)