zoukankan      html  css  js  c++  java
  • 自定义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查询,查询控制台信息(查询的数据库表中数据)

     

  • 相关阅读:
    uGUI知识点剖析之RectTransform
    C#中的结构体要使用new来实例化吗?
    LOL数值分析
    【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则
    AnimationCurve
    Unity3D 自动添加Fbx Animation Event
    unity 代码添加AnimationEvent
    untiy AnimationEvent添加返回参数
    Windows CreateEvent,SetEvent,WaitForSingleObject的用法
    C++ Socket编程步骤
  • 原文地址:https://www.cnblogs.com/w1440199392/p/13966980.html
Copyright © 2011-2022 走看看