zl程序教程

您现在的位置是:首页 >  后端

当前栏目

MyBatis 配置文件

2023-09-11 14:16:29 时间

MyBatis框架核心配置     

在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<configuration>元素内配置。  

 <properties>是一个配置属性的元素,该元素通常用来将内部的配置外在化,即通过外部的配置来动态的替换内部定义的属性。例如,数据库的连接等属性,就可以通过典型的Java属性文件中的配置来替换 

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

 配置<properties... />属性

<!-- 引入数据库连接配置文件 -->
	<properties resource="db.properties" />

修改配置文件中数据库连接的信息

<dataSource type="POOLED">
    <!-- 数据库驱动 -->
    <property name="driver" value="${jdbc.driver}" />
    <!-- 连接数据库的url -->
    <property name="url" value="${jdbc.url}" />
    <!-- 连接数据库的用户名 -->
    <property name="username" value="${jdbc.username}" />
    <!-- 连接数据库的密码 -->
    <property name="password" value="${jdbc.password}" />
</dataSource>

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

    <settings>
         <setting name="cacheEnabled" value="true" />
         <setting name="lazyLoadingEnabled" value="true" />
         <setting name="multipleResultSetsEnabled" value="true" />
         <setting name="useColumnLabel" value="true" />
         <setting name="useGeneratedKeys" value="false" />
         <setting name="autoMappingBehavior" value="PARTIAL" />
         ...
     </settings>

 <typeAliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。

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

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

POJO类过多时,可以通过自动扫描包的形式自定义别名

     <typeAliases>
             <package name="com.itheima.po"/>
     </typeAliases>

 typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。 
 <typeHandler>元素可以在配置文件中注册自定义的类型处理器,它的使用方式有两种
 注册一个类的类型处理器

      <typeHandlers> 
              <typeHandler handler="com.type.CustomtypeHandler" />
       </typeHandlers>

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

  <typeHandlers> 
          <package name="com.type" />
  </typeHandlers>

   <environments>元素用于对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,我们可以通过<environments>元素配置多种数据源,即配置多种数据库 

     <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>

数据源配置

 

<mappers>元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件

使用类路径引入
   <mappers>
    <mapper resource="com/mapper/UserMapper.xml"/>
</mappers>
使用本地文件路径引入
<mappers>
    <mapper url="file:///D:/com/mapper/UserMapper.xml"/>
</mappers>
使用接口类引入
<mappers>
    <mapper class="com.mapper.UserMapper"/>
</mappers>
使用包名引入
<mappers>
    <package name="com.mapper"/>
</mappers>

映射文件
 

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

 

<sql>元素

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

<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>

<resultMap>元素表示结果映射集,是MyBatis中最重要也是最强大的元素。它的主要作用是定义映射规则、级联的更新以及定义类型转化器等。
        <resultMap>元素中包含了一些子元素,它的元素结构如下所示:

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

#{}和${}区别
 

1:
 #{}  相当于JDBC SQL语句中的占位符?(preparedStatement)
 ${}  相当于JDC SQL语句中的链接符合+(Statement)
2:
 #{}  进行输入映射的时候,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上'')
 ${}  进行输入映射的时候,将参数原样输出到SQL语句中
3
  #{} 如果进行简单类型(String Date 8中国基本类型的包装类) 的输入映射时,#{} 中参数名称可以任意 
  ${} 如果进行简单类型(String Date 8中国基本类型的包装类) 的输入映射时,${} 中参数名称必须是Value
4
  ${} 存在SQL注入问题  使用OR 1=1 关键字将查询条件忽略