自定义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查询,查询控制台信息(查询的数据库表中数据)

 

 

 

posted @ 2020-11-12 23:24  柯南剧场版  阅读(109)  评论(0编辑  收藏  举报