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 关键字将查询条件忽略