Mybatis步步进阶(四)——Mybatis框架流程及核心配置详解

     Mybatis框架的主要作用是让程序的主要精力都放在sql上,通过my提供的映射,半自动化的生成sql操作数据。通过想PrepareStatement中输入的参数自动进行输入映射,将结果集ResultSet映射成java对象作为输出映射。

一、Mybatis运行流程及相关核心类 

 Mybatis步步进阶(四)——Mybatis框架流程及核心配置详解_第1张图片

1、SqlMapConfig.xml是Mybatis的全局配置文件,类似于Hibernate中的hibernate.cfg.xml,主要用于配置数据源、事务、加载实体mapper.xml配置文件(同上图Config.xml)




    
        
            
            
            
            
                
                
                
                
            
        
    
    
    
        
    

2、SqlSessionFactory:会话工厂 是每一个MyBatis Application必有的,根据config配置文件创建,它主要用于创建Sqlsession会话,由sqlSessionBuilder通过new 的方式创建,SessionFatoryBuider可直接当作一个工具类使用,不需要使用单例进行管理,而由它创建的SqlSessionFactory是最好通过单例模式来创建,保证工厂一旦创建一次,就使用一个SqlSessionFactory实例。并且SqlSessionFactory的作用范围是应用程序级的,在一个application中可仅有一个SqlSessionFactory,所以用单例控制SqlSessionFactory的创建。

3、Sqlsession:会话工厂创建出Sqlsession会话后,回话方可执行DB操作,执行sql语句、事务控制等,执行后可commit提交到数据库;SqlSession的作用范围和生命周期需要开发人员特别注意,因为它不是线程安全的,除了操作方法之外,还有数据属性。所以它的作用范围最好界定到方法级别,定义为方法的局部变量,也就是一个方法独有一个SqlSession实例。

     Exucutor:Mybatis在Sqlsession中提供了Exucutor类(执行器),是SqlSession用于执行sql操作数据库的接口类

     Mapped Statement:另外Mapped Statement是底层封装对象,对操作数据库的参数进行封装,包括sql语句、输入参数、输出参数

二、SqlMapConfig.xml属性详解

1、properties  

1)以JDBC为例,如果将上面datasource属性灵活可配置,例如换一个数据库连接,可将value参数值以${}变量的形式传入

抽象db.properties文件如下

     jdbc.driver=com.mysql.jdbc.Driver

     jdbc.url=jdbc:mysql://localhost:3306/max?characterEncoding=utf-8

     jdbc.username=rootjdbc.password=123456

修改datasource 标签,同时在SqlMapConfig.xml中加载db.properties文件     

     

          .................

     

         

         

         

         

     

2)配置读取优先级问题

     如果在db中有一个username参数,同时,在user实体的mapper映射中也有一个username参数,则my存在一个读取配置优先级问题,properties元素体内定义的属性优先于properties元素中的resource或url加载的属性,最后读取parameterType传递的属性。如果出现同属性名,则后面读取的属性值会覆盖前面已经读取的相同属性名的值。

     针对这个问题,首先保证properties resource加载的文件中属性名具有一定特殊性,如jdbc.username;其次,不要再properties元素体内添加其他属性值,均将它定义到.properties文件中,统一加载。

2、settings

Mybatis的全局配置参数,用于添加延迟加载、缓存配置信息。后面详细介绍

3、aliase

     别名的使用场景也非常广泛,例如在输入、输出映射中,如果输入pojo类型,则需要填写这个pojo的全路径,这时可以把这些pojo类使用别名标记,简化开发;

1)自定义别名


          
在resultType中引用别名

 
    

2)批量定义别名


     
     
     
     

4、typeHandlers类型处理器

     Mybatis自动提供多中类型处理器,主要用于处理输入、输出映射、参数java类型和jdbc数据类型的映射。、

5、mapper映射

1)通过resouce加载单个pojo映射文件

     

2)通过mapper接口class加载

     通过class加载的好处在于可以直接写到包名,如class=“cn.max.po”,则po包下的所有mapper.java接口都会被加载,但这要求mapper.java接口和mapper.xml配置文件在同一目录下且名称一致,通过mapper代理可找到该映射信息。

3)通过url加载

-本地全路径


你可能感兴趣的:(Mybatis)