乐于分享
好东西不私藏

软件架构技术(Java)之MyBatis核心配置

软件架构技术(Java)之MyBatis核心配置
一、配置文件
MyBatis核心配置文件所涉及的元素标签如下所示:
1、<configuration>元素

<configuration>元素是配置文件的根元素,其他元素都要在<configuration>元素内配置。 

2、<properties>元素

<properties>是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。

       <propertiesresource="db.properties" />
3、<settings>元素

<settings>元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。 

     <!-- 设置 -->     <settings>         <settingname="cacheEnabled"value="true" />         <settingname="lazyLoadingEnabled"value="true" />     </settings>
4、<typeAliases>元素

<typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。

使用<typeAliases>元素配置别名的方法如下:

     <typeAliases>             <typeAlias alias="user" type="com.po.User"/>     </typeAliases>

当POJO类过多时,可以通过自动扫描包的形式自定义别名,具体如下:

     <typeAliases>             <packagename="com.po"/>     </typeAliases>
5、<typeHandler>元素

typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。 

注册一个类的类型处理器

     <typeHandlers>           <typeHandlerhandler="com.type.CustomtypeHandler" />     </typeHandlers>

注册一个包中所有的类型处理器

     <typeHandlers>           <packagename="com.type" />     </typeHandlers>
6、<objectFactory>元素

MyBatis中默认的ObjectFactory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。

7、<plugins>元素

<plugins>元素的作用就是配置用户所开发的插件。

8、<environments>元素

在MyBatis的核心配置文件中,MyBatis通过<environments>元素定义一个运行环境。

  • <environments>元素有<transactionManager>和<daraSource>元素。

  • <transactionManager>元素用于配置运行环境的事务管理器。

  • <dataSource>元素用于配置运行环境的数据源信息。 

<propertiesresource="db.properties" /><environmentsdefault="development">          <environmentid="development">      <transactionManagertype="JDBC" />            <dataSourcetype="POOLED">                   <propertyname="driver"value="${jdbc.driver}" />                   <propertyname="url"value="${jdbc.url}" />                   <propertyname="username"value="${jdbc.username}" />                   <propertyname="password"value="${jdbc.password}" />         </dataSource>          </environment>     </environments>
9、<mappers>元素

<mappers>元素用于引入MyBatis映射文件。

映射文件包含了POJO对象和数据表之间的映射信息,MyBatis通过核心配置文件中的<mappers>元素找到映射文件并解析其中的映射信息。

一般可以使用以下4种方法引入映射器文件,具体如下:

使用类路径引入

<mappers>    <mapperresource="com/mapper/UserMapper.xml"/></mappers>

使用本地文件路径引入

<mappers>    <mapperurl="file:///D:/com/mapper/UserMapper.xml"/></mappers>

使用接口类引入

<mappers>    <mapperclass="com.mapper.UserMapper"/></mappers>

使用包名引入

<mappers>    <packagename="com.mapper"/></mappers>
二、映射文件

在映射文件中,<mapper>元素是映射文件的根元素,其他元素都是它的子元素。 

1、<mapper>元素

<mapper>元素中的namespace属性作用 :

  1. 用于区分不同的mapper,全局唯一。

  2. 绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的全限定名查找到对应的mapper配置来执行SQL语句,因此namespace的命名必须跟接口同名。

<mapper>元素如何区别不同的XML文件?

在不同的映射文件中,<mapper>元素的子元素的id可以相同,MyBatis通过<mapper>元素的namespace属性值和子元素的id联合区分不同的Mapper.xml文件。接口中的方法与映射文件中SQL语句id应一一对应。 

2、<select>元素

<select>元素用来映射查询语句,它可以从数据库中读取出数据,并组装数据给开发人员。

<select id="findCustomerById" parameterType="Integer"            resultType="com.po.Customer">            select * from t_customer where id = #{id}</select>

常用属性说明:

3、<insert>元素

<insert>元素用于映射插入语句,在执行完<insert>元素中定义的SQL语句后,会返回一个表示插入记录数的整数。

<insert>元素的配置示例如下:

<insert      id="addCustomer"      parameterType="com.po.Customer"      flushCache="true"      statementType="PREPARED"      keyProperty=""      keyColumn=""      useGeneratedKeys=""      timeout="20">

<insert>元素的属性与<select>元素的属性大部分相同,但还包含了3个特有属性,这3个属性的描述如下所示。

4、<update>元素

<update>元素用于映射更新语句,它可以更新数据库中的数据。在执行完元素中定义的SQL语句后,会返回更新的记录数量。

<update id="updateCustomer" parameterType="com.po.Customer">       update t_customer        set username=#{username},jobs=#{jobs},phone=#{phone}       where id=#{id}</update>

5、<delete>元素

<delete>元素用于映射删除语句,在执行完<delete>元素中的SQL语句之后,会返回删除的记录数量。

<delete id="deleteCustomer" parameterType="Integer">        delete from t_customer where id=#{id}</delete>

6、<sql>元素

<sql>元素的作用是定义可重用的SQL代码片段,然后在其他语句中引用这一代码片段。

定义一个包含id、username、jobs和phone字段的代码片段如下:

<sql id="customerColumns">id,username,jobs,phone</sql>

上述代码片段可以包含在其他语句中使用,具体如下:

<select id="findCustomerById" parameterType="Integer"            resultType="com.po.Customer">    select <include refid="customerColumns"/>    from t_customer     where id = #{id}</select>

7、<resultMap>元素

<resultMap>元素表示结果映射集,主要作用是定义映射规则、级联的更新以及定义类型转化器等。

<resultMap>元素中包含了一些子元素,它的元素结构如下所示:

<resultMaptype=""id="">       <constructor>    <!-- 类在实例化时,用来注入结果到构造方法中-->             <idArg/>      <!-- ID参数;标记结果作为ID-->             <arg/>          <!-- 注入到构造方法的一个普通结果-->       </constructor>         <id/>                 <!-- 用于表示哪个列是主键-->       <result/>           <!-- 注入到字段或JavaBean属性的普通结果-->       <associationproperty="" />        <!-- 用于一对一关联 -->       <collectionproperty="" />          <!-- 用于一对多关联 -->       <discriminatorjavaType="">      <!-- 使用结果值来决定使用哪个结果映射-->            <casevalue="" />                   <!-- 基于某些值的结果映射 -->       </discriminator></resultMap>

仅用于交流学习!