• 02、MyBatis XML 全局配置文件


    MyBatis-全局配置文件

      在MyBatis中全局配置文件有着重要的地位,里面有9类行为信息;如果我们要想将MyBatis运用的熟练,配置全局配置文件是必不可少的步骤,所以我们一定要啃下这一块硬骨头。该文章是结合MyBatis配置文件网页加个人理解做的笔记,如果有的地方写的不够好或者有错误。恳请大家多多给我指出,因为我也是在摸索中进步。下面将对9大行为信息和属性信息配置进行解释.

    1. MyBatis配置

     

    注:MyBatis的标签是有顺序的,如果不按照顺序会出现The content of element type "configuration" must match 错误.标签的顺序为:

     

    Eclipse中引入XML的dtd约束文件,方便编写XML的时候有提示

     

     1)属性(properties)

      (1)dbconfig.properties 

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=root123
    

     (2)properties属性 

    	<!-- properties:引入外部properties配置文件的内容 -->
    	<!-- url:引入网络路径或者磁盘路径下的资源 -->
    	<!-- resource:引入类路径下的资源 -->
    	<properties resource="dbconfig.properties" ></properties>
    

    (3)使用properties配置mybatis-config.xml

    	<!-- properties:引入外部properties配置文件的内容 -->
    	<!-- url:引入网络路径或者磁盘路径下的资源 -->
    	<!-- resource:引入类路径下的资源 -->
    	<properties resource="dbconfig.properties" ></properties>
    	
    	<environments default="development">
    		<environment id="development">
    			<transactionManager type="JDBC" />
    			<dataSource type="POOLED">
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    

    2)设置(settings)

       (1)mapUnderscoreToCamelCase

    	<!-- settings:包含很多设置项 -->
    	<!-- setting:用来选择设置中各项设置 -->
    	<!-- name:设置项名 -->
    	<!-- value:设置项取值 -->
    	<settings>
    		<setting name="mapUnderscoreToCamelCase" value="true"/>
    	</settings>
    

    3)类型别名(typeAliases)

     

      注意:MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,我们在起别名的时候千万不要占用已有的别名。

     我们目前最新的mybatis推荐使用全限定类名书写。

    	<!-- typeAliases:别名处理器,可以为java类型起别名.别名不区分大小写 emp 和 Emp是一样的 -->
    	<!-- typeAlias:为java类型起别名  -->
    		<!-- type:指定要起别名的类型全类名;默认别名就是类名小写 -->
    		<!-- alias:指定新的别名 -->
    	<!-- package:指定一个包名,为该包下所有类批量起别名  -->
    	<!-- 批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 如:@Alias("empp") 起别名为empp-->
    	<typeAliases>
    		<!--  <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/>  -->
    		<package name="com.atguigu.mybatis.bean" />
    	</typeAliases>
    

    4)类型处理器(typeHandlers)

      无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。

     

      • 日期和时间的处理,JDK1.8以前一直是个头疼的问题。我们通常使用JSR310规范领导者Stephen Colebourne创建的Joda-Time来操作。1.8已经实现全部的JSR310规范了。

      • 日期时间处理上,我们可以使用MyBatis基于JSR310(Date and Time API)编写的各种日期时间类型处理器。

      • MyBatis3.4以前的版本需要我们手动注册这些处理器,以后的版本都是自动注册的

     

     5)对象工厂(objectFactory)

    6)插件(plugins)

      插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行。 

    7)环境配置(environments)

    <!-- environments:配置多种环境;default标签可以指定使用的环境,可以达到快速切换环境的效果 -->
    	<!-- environment 配置一个具体的环境信息;id代表当前环境的唯一标识;必须有两个标签transactionManager/type -->
    		<!-- transactionManager:事务管理器 -->
    			<!-- type:事务管理器的类型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)|自定义事务管理器(实现TransactionFactory接口.type指定为全类名) -->
    				<!-- JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围  -->	
    				<!-- MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文) -->
    				<!-- 自定义:实现TransactionFactory接口,type=全类名/别名 -->	
    		<!-- dataSource:数据源 -->	
    			<!-- type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)|自定义数据源(实现DataSourceFactory接口,type是全类名) -->
    				<!-- UNPOOLED:不使用连接池 -->
    				<!-- POOLED:使用连接池 -->
    				<!-- JNDI: 在EJB 或应用服务器这类容器中查找指定的数据源 -->
    				<!-- 自定义:实现DataSourceFactory接口,定义数据源的获取方式 -->
    	<!-- 实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置 -->
    	<environments default="development">
    		<environment id="test">
    			<transactionManager type="JDBC" />
    			<dataSource type="">	
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    
    		<environment id="development">
    			<transactionManager type="JDBC" />
    			<dataSource type="POOLED">
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    

    8)数据库厂商标识(databaseIdProvider)

      MyBatis 可以根据不同的数据库厂商执行不同的语句.

     (1)添加select

    	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" >
    		select * from tbl_employee where id = #{id}
    	</select>
    	
    	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="mysql" >
    		select id,email from tbl_employee where id = #{id}
    	</select>
    	
    	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="oracle">
    		select * from tbl_employee where id = #{id}
    	</select>
    

    (2)添加databaseIdProvider

    	<!-- databaseIdProvider:持多数据库厂商 -->
    		<!-- type="DB_VENDOR":VendorDatabaseIdProvider -->
    		<!-- type:得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql -->
    	<databaseIdProvider type="DB_VENDOR">
    		<!-- 为不同的数据库厂商起别名 -->
    		<property name="MySQL" value="mysql"/>
    		<property name="Oracle" value="oracle"/>
    		<property name="SQL Server" value="sqlserver"/>
    	</databaseIdProvider>
    

    (3)配置properties(数据库链接信息)

    #Mysql
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=root123
    
    #Oracle
    orcl.driver=oracle.jdbc.OracleDriver
    orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
    orcl.username=scott
    orcl.password=123456
    

    (4)配置environments

    	<environments default="dev_mysql">
    		<environment id="dev_mysql">
    			<transactionManager type="JDBC"></transactionManager>
    			<dataSource type="POOLED">
    				<property name="driver" value="${jdbc.driver}" />
    				<property name="url" value="${jdbc.url}" />
    				<property name="username" value="${jdbc.username}" />
    				<property name="password" value="${jdbc.password}" />
    			</dataSource>
    		</environment>
    	
    		<environment id="dev_oracle">
    			<transactionManager type="JDBC" />
    			<dataSource type="POOLED">
    				<property name="driver" value="${orcl.driver}" />
    				<property name="url" value="${orcl.url}" />
    				<property name="username" value="${orcl.username}" />
    				<property name="password" value="${orcl.password}" />
    			</dataSource>
    		</environment>
    	</environments>
    

    9)映射器(mappers)

     

     (1)mybatis-config.xml

    	<!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
    	<!-- 将我们写好的sql映射文件<EmployeeMapper.xml>一定要注册到全局配置文件中 -->
    	<!-- mappers:将sql映射注册到全局配置中 -->
    		<!-- mapper:注册一个sql映射 -->
    			<!-- resource(使用相对于类路径的资源引用):引用类路径下的sql映射文件  org/mybatis/builder/AuthorMapper.xml-->
    			<!-- url(使用完全限定资源定位符):引用网路路径或者磁盘路径下的sql映射文件 file:///var/mappers/AuthorMapper.xml -->
    			<!-- class(使用映射器接口实现类的完全限定类名):引用(注册)接口 org.mybatis.builder.AuthorMapper -->
    				<!-- 存在sql映射文件:映射文件名必须和接口同名,需配置文件与接口文件同一目录下(com.atguigu.mybatis.dao.EmployeeMapper.java)和(com.atguigu.mybatis.dao.EmployeeMapper.xml -->
    				<!-- 不存在sql映射文件:所有的sql都是利用注解写在接口上(com.atguigu.mybatis.dao.EmployeeMapperAnnotation) -->
    		<!-- package:批量注册sql映射 -->
    	<mappers>
    		<!-- <mapper resource="com/batis/mapper/EmployeeMapper.xml" /> --> 
    		<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
    		<package name="com.atguigu.mybatis.dao"/>
    	</mappers>
    

    (2)select注解

    public interface EmployeeMapperAnnotation {
    	@Select("select * from tbl_employee where id=#{id}")
    	public Employee getEmpById(Integer id);
    }
    

    参考文档:https://mybatis.org/mybatis-3/zh/configuration.html

  • 相关阅读:
    【OpenCV学习笔记1】OpenCV 编程简介[轉]
    latex与word比较
    【C/C++语法外功】传值&传引用&传指针
    ellen 纽奥良大学演讲
    华侨大学50年校庆校长讲话
    【专题】工业相机接口
    【C/C++参考手册】C++资源之不完全导引[轉]
    比尔盖茨_哈佛演说
    拉里.埃里森_耶鲁大学演讲
    【OpenCV学习笔记2】OpenCV 完全安装 新增VS2010+OpenCV2.1,新增VS2010+OpenCV2.3.1
  • 原文地址:https://www.cnblogs.com/HOsystem/p/13111194.html
Copyright © 2020-2023  润新知