Mybatis步步进阶(四)——Mybatis框架流程及核心配置详解
来源:互联网 发布:如何购买已备案域名 编辑:程序博客网 时间:2024/04/28 22:38
Mybatis框架的主要作用是让程序的主要精力都放在sql上,通过my提供的映射,半自动化的生成sql操作数据。通过想PrepareStatement中输入的参数自动进行输入映射,将结果集ResultSet映射成java对象作为输出映射。
一、Mybatis运行流程及相关核心类
1、SqlMapConfig.xml是Mybatis的全局配置文件,类似于Hibernate中的hibernate.cfg.xml,主要用于配置数据源、事务、加载实体mapper.xml配置文件(同上图Config.xml)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><configuration> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 ,由mybatis管理 --> <dataSource type="POOLED"> <property name ="driver" value ="com.mysql.jdbc.Driver" /> <property name ="url" value ="jdbc:mysql://127.0.0.1:3306/mybatisdemo?characterEncoding=utf-8"/> <property name ="username" value ="root" /> <property name ="password" value ="dannyhoo" /> </dataSource> </environment> </environments> <!-- 使用resource方式加载映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers></configuration>
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文件
<properties resouce=”db.properties”/>
.................
<dataSource type="POOLED">
<property name ="driver" value ="${jdbc.dirver}" />
<property name ="url" value ="${jdbc.url"/>
<property name ="username" value ="${jdbc.username}" />
<property name ="password" value ="${jdbc.password}" />
</dataSource>
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)自定义别名
<typeAliases> <typeAliase type=”cn.max.po.User” alias=”user”/></typeAliases>在resultType中引用别名
<!-- 查询--> <select id="findUserById" parameterType="int" resultType="user"> select * from user where id=#{id} </select>
2)批量定义别名
<typeAliases> <!--自动扫描包中的类,为每一个类定义别名,别名==类名--> <package name=”cn.max.po”/> <package name=”cn.max.server”/> <package name=”cn.max.en”/></typeAliases>
4、typeHandlers类型处理器
Mybatis自动提供多中类型处理器,主要用于处理输入、输出映射、参数java类型和jdbc数据类型的映射。、
5、mapper映射
1)通过resouce加载单个pojo映射文件
<mapper resource="mapper/UserMapper.xml"/>
2)通过mapper接口class加载
<mapper class=”cn.max.po.UserMapper”/>
通过class加载的好处在于可以直接写到包名,如class=“cn.max.po”,则po包下的所有mapper.java接口都会被加载,但这要求mapper.java接口和mapper.xml配置文件在同一目录下且名称一致,通过mapper代理可找到该映射信息。
3)通过url加载
<mapper url=”file:///d:\work\map\User.xml”/>-本地全路径
- Mybatis步步进阶(四)——Mybatis框架流程及核心配置详解
- Mybatis步步进阶(五)——Mybatis输入输出映射及动态SQL Review
- Mybatis步步进阶(二)——SQL的基本配置与执行
- Mybatis步步进阶(三)——1:N关系配置 && 动态SQL拼接
- Mybatis步步进阶(二)——SQL的基本配置与执行
- Mybatis步步进阶(三)——1:N关系配置 && 动态SQL拼接
- Mybatis步步进阶(六)——Mybatis Mapper代理和逆向工程
- Mybatis步步进阶(七)——Mybatis实体关联映射
- Mybatis步步进阶(八)——Mybatis延迟加载和缓存机制
- Mybatis步步进阶(一)——环境搭建+创建数据库连接
- Mybatis步步进阶(一)——环境搭建+创建数据库连接
- 电商平台学习笔记(四)——Spring配置Mybatis简化DAO层省略Mybatis核心配置文件
- MyBatis工作流程及配置
- mybatis系列(四)--mybatis的核心:sql的执行流程(深入源码)
- mybatis框架(二)——核心组件及其作用
- 深入理解MyBatis(四)—MyBatis的Select操作执行流程
- MyBatis框架核心之(四)Mapper文件使用resultMap及多表查询
- springmvc+mybatis框架搭建流程详解
- Leetcode 138. Copy List with Random Pointer
- CentOS7安装openjdk、tomcat和mysql流程介绍
- 面试题
- SQL注入攻防入门详解
- 如何在Linux下编译Cocos2dx3.11项目(主要是添加源文件喇~)
- Mybatis步步进阶(四)——Mybatis框架流程及核心配置详解
- 一文读懂卷积神经网络
- Longest Chain
- 正则表达式多行修饰符m的问题
- win10下jdk8的安装配置
- Android Studio官方文档之基本开发工作流程(Workflow Basics)篇
- Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
- 欢迎使用CSDN-markdown编辑器
- vitamio5.x的简单使用