zoukankan      html  css  js  c++  java
  • Mybatis开篇之CRUD~~封装继承实现

    今天开始学习Mybatis,环境搭建一步步遇到问题,一点点解决,还可以,在学到CRUD的时候,发现对于SqlSession每次都需要创建一个,最后释放,很是麻烦,于是想一想该怎么优化代码,同时可以满足开闭原则呢?OK话不多说,let's think about it;

    对于Mybatis的使用,从最开始最基本的类有三个,参考官方文档,如下:

    整个过程实际上就是:由建造者建造工厂>由工厂生产Session【建造者模式-》工厂模式】

    (建造者)->(工厂)->(对象)

    通过建造者模式构建的工厂建造者构建工厂,工厂创建实例。

     OK,最主要的需要谈一谈CRUD代码,对于在Mapper中写方法名,在xml中写实现这些没必要在这里讨论了,很简单,对于调用的时候,我发现每次都是这几个步骤,是不是很恶心啊?每次都要写重复的代码:

          //开启
         SqlSession sqlSession=MybatisUtils.getSqlSessionFactory();
            try {
                UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                //业务代码
                User user=new User(0,"小库","23");
                int insertCount = mapper.addUser(user);
                sqlSession.commit();
            }
            catch (Exception e){
                e.printStackTrace();
            }
            finally {
                //释放
                sqlSession.close();
            }        

    于是思考一下,对于这种首先创建链接,然后个人操作,最后关闭这个流程不就是模板方法模式的设计思想吗?

    同时考虑一下我构建一个SqlTemplate的话,这个类中可以执行很多其他的方法,因此最好不要定义成静态的,因为我们只需要Session不同就可以啦,所以呢,只要一个SqlTemplate即可,OK,那就把它构建成单例模式

    ok,let's write code;

    首先定义个接口,代表我们自己需要执行的逻辑代码:

    public interface SqlOperate<T> {
          void Operate(T mapper);
    }

    然后嘞,就是最重要的SqlTemplate了(其中的MybatisUtils是官网有示例,自己写的一个工具类,这个想必大家都知道,只不过这是我自己起的名字)

    public class MybatisUtils {
        private static SqlSessionFactory sqlSessionFactory;
        //放在静态代码块,编译器加载
        static {
            try {
                //第一步,获取sqlSessionFactory工厂对象
                //通过SqlSessionFactoryBuilder工厂建造者构建工厂
                String resource = "mybatis-config.xml";
                InputStream inputStream = null;
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
        // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
        public static SqlSession getSqlSessionFactory() {
            return sqlSessionFactory.openSession();
        }
    }
    MybatisUtils
    /**
     * 宁新杰:创建sql模板,完成封装
     * 使用了单例+模板
     */
    public class SqlTemplate {
        private SqlTemplate(){};
        private static class InnerClass {
            private static SqlTemplate sqlTemplate = new SqlTemplate();
        }
        public static SqlTemplate getInstance(){
            return InnerClass.sqlTemplate;
        }
    
        public  void run(Class mapperClass, SqlOperate sqlOperate) {
            SqlSession sqlSession = MybatisUtils.getSqlSessionFactory();
            try {
                Object mapper = sqlSession.getMapper(mapperClass);
                sqlOperate.Operate(mapper);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                sqlSession.close();
            }
        }
    }

    OK,,调用呢?

     SqlTemplate.getInstance().run(UserMapper.class, new SqlOperate<UserMapper>() {
                @Override
                public void Operate(UserMapper mapper) {
                    mapper.deleteById(new User(4));
                }
            });

    是不是非常简洁啊!perfect!

    哦,对了,提醒大家一下,构建泛型的时候,如果不太熟练,首先使用具体的类来构建,比如这里的我实际上是使用具体的【UserMapper 】来构建的,构建好了之后,再替换的泛型的。

    OK啦,每天进步一点点,继续加油!逐梦~~~

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/13339037.html
Copyright © 2011-2022 走看看