zoukankan      html  css  js  c++  java
  • Mybatis使用

    1,核心对象的生命周期

    SqlSessionFactoryBuilder(方法局部[ Method ]):只是用来构建SqlSessionFactory的,构建完了它就没用了,所以它的生命周期在方法的局部
    SqlSessionFactory(应用级别[ Application ]):用来创建SqlSession的,每次应用程序访问数据库都需要创建一个会话,所以它应该存在于引用的这个生命周期中,创建SqlSession只需要一个实例来做就好了,否则会产生混乱和浪费资源,所以我们采用单例模式。
    SqlSession(请求和操作[ request/method ]):是一个会话,因为它不是线程安全,不能在线程间共享,所以我们在请求开始的时候创建它,在结束的时候要及时关闭它。
    Mapper(方法[ method ]):实际上是一个代理对象,是从SqlSession中获取的。

    2,核心配置文件

        1,根标签:configuration:对应着Mybtis最重要的类Configuration。它贯穿mybatis执行的每一个流程
            tips:Mybatis全局配置文件的里面标签顺序是固定的,否则会报错。
        2,一级属性标签:
            * properties:配置参数信息,比如最常见的数据库连接信息。
            * settings:mybatis中的一些核心配置。
                cacheEnabled:是否使用缓存,默认 true。
                lazyLoadingEbabled:控制全局是否使用延迟加载 (association、collection)。当有 特殊关联关系需要单独配置时,可以使 用 fetchType 属性来覆盖此配置。
                aggressiveLazyLoading:开启时,无论调用什么方法加载某个对 象,都会加载该对象的所有属性,关闭 之后只会按需加载。默认 false。
                defaultExecutorType:有三种执行器:SIMPLE 为普通执行器; REUSE 执行器会重用与处理语句; BATCH 执行器将重用语句并执行批量 更新。
                logImpl:指定 MyBatis 所用日志的具体实现,未 指定时将自动查找。
            * typeAliases:类型的别名,比如mapper文件中,参数类型和返回类型都可能用到我们的bean,这时候我们给bean指定一个别名,就可以不用写那么多,Mybatis里面有系统预定义的别名,在TypeAliasRegistry中。
            * typeHandlers:因为java类型和数据库类型是不一致的,通过typeHandlers我们可以实现java对象类型与数据库类型的转换。Mybatis内置了很多TypeHandler,他们全部注册在TypeHandlerRegistry中,他们都继承了BaseTypeHandler。
            * objectFactory:数据库返回结果转为实体对象的时候,我们调用DefaultObjectFactory的instantiateClass()方法来创建对象,是通过反射来实现的,如果想要修改对象工厂在初始化实体类的行为,就可以通过继承DefaultObjectFactory来实现。
            * plugins:mybatis的预留插件接口。可以拦截这四大对象的这些方法。
            Executor:update,query,flushStatements,commit,rollback,getTransaction,close,isClosed
            ParameterHandler:getParameterObject,setParameters
            ResultSetHandler:handleResultSets,handleOutputParameters
            StatementHandler:prepare,parameterize,batch,update,query
            * environments、environment:environments管理数据库环境,例如开发环境,测试环境,每一个environment代表一个数据源,里面有一个事务管理器,一个数据源
                    transactionManager:如果配置的是JDBC,则会使用jdbc的事务相关操作,commit rollback,如果配置的是MANAGED,则会把事务交给容器来管理。
                    dataSource:在跟spring集成的时候,事务和数据源都会交给spring管理。
            * mappers:映射器,配置 SQL 映射文件的位置,告知 MyBatis 去哪里加载 SQL 映射文件。       

    3,Mybatis实践

        3.1 动态标签  

            主要有四类,if,choose(when,otherwise),trim(where,set),foreach。
            if:需要判断的时候,条件写在test中。       
            choose(when,otherwise):需要选择一个条件。
            trim(where,set):需要去掉where,and,逗号之类的符号的时候。
            foreach:需要遍历的集合

        3.2 批量操作

        3.3 翻页

            逻辑翻页(利用RowBounds,里面主要有offset和limit参数)和物理翻页(数据库sql层面的分页,插件如PageHelper)

        3.4 通用Mapper

            当我们的表字段发生变化时,我们就需要重新生成mapper,实体类等文件,如果文件已经被修改过,维护会很麻烦。
            解决方法:
                1,因为Mybatis的mapper是可以继承的,所以我们可以针对一个mapper生成两个文件,一个是mbg生成的,另一个继承它,我们维护修改的都在这里面改,那么如果表字段发生变化我们只需要改变mgb生成的那个就好。缺点就是文件数量过多。(只能继承statement,不能继承sql,resultMap等标签)。
                3,编写通用mapper接口,使用泛型,将实体类作为参数传给它。这个接口中定义大量的基础方法,没有的我们就在自己的mapper里面写就行。

        3.5 Mybatis-Plus

            是原生的Mybatis的一个增强工具,可以在使用原生的mybatis的所有功能上,使用plus特有的功能。
            核心功能有:
            通用CRUD:定义好mapper接口后,只需要继承BaseMapper<?>接口,就可以获得通用的增删改查功能。
            条件构造器:通过EntityWrapper<T>,可以用于拼接sql语句,并且支持排序,分组查询等复杂sql。
            代码生成器:支持一系列的策略配置和全局配置,另外Mybatis-plus也有分页的功能





  • 相关阅读:
    Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
    DLL反编译,DLL反编译成C#代码, 有些不良同学会用到哦!
    各种分享按钮代码
    ASP.NET 计划任务(不使用外接程序,.net内部机制实现)
    工厂模式{C#描述}
    FI:Customize FBL3N Layout
    简单工厂 工厂模式 抽象工厂C#
    URL, URI 和 URN 之间的区别转
    resize属性,使textarea在ff(火狐)中禁止拉伸
    UML类图几种关系的总结转
  • 原文地址:https://www.cnblogs.com/gaojf/p/12868013.html
Copyright © 2011-2022 走看看