一、Config.xml 全局配置文件
Config.xml的配置关系到系统的性能,配置时需要配置按照顺序配置,配置顺序应该按照如下顺序
- configuration 配置
- properties 属性 (配置属性文件的节点url、username、password、driver)
- settings 设置
- typeAliases 类型命名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
- Environments 环境
- mappers 映射器
一个完整的config.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc/jdbc.properties">
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="password" value="666" />
<property name="username" value="scott"/>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
</properties>
<typeAliases>
<typeAlias type="net.neuedu.mybatis.domain.Sutdent" alias="stu"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/mapper/StudentMapper.xml" />
</mappers>
</configuration>
属性说明:
1.properties全局参数
导入jdbc.properties属性文件 读取属性文件的顺序: 在 properties 元素体内定义的属性首先被读取。 然后会读取resource属性,加载jdbc.properties配置文件中url、username、password、driver,它会覆盖已读取的同名属性。所以最终url、username、password、driver的值是jdbc.properties文件中配置的值。
<properties resource="jdbc/jdbc.properties">
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="password" value="666" />
<property name="username" value="scott"/>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
</properties>
2. settings全局参数
– mybatis框架在运行时可以调整一些运行参数,比如:开启
二级缓存、开启延迟加载等
– 全局参数将会影响mybatis的运行行为。 – 详细参见MyBatist参考手册
3.typeAliases全局参数
在mapper.xml中,定义的statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,方便开发。
<typeAliases>
<typeAlias type="net.neuedu.mybatis.domain.Sutdent" alias="stu"/>
</typeAliases>
那么在mapper.xml配置文文件中的parameterType属性就可使用 刚刚配置的别名了
<select id="queryStudentById" parameterType="int" resultType="stu">
select stu_id,stu_name from tab_student where stu_id=#{stu_id}
</select>
如果不配置别名的情况在是这样:
可以看出配置了列别名方便得多。
<select id="queryStudentById" parameterType="int" resultType="net.neuedu.mybatis.domain.Student">
select stu_id,stu_name from tab_student where stu_id=#{stu_id}
</select>
4.typeHandlers全局参数
mybatis中通过typeHandlers(类型处理器)完成jdbc类型和java类型的转换。通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义
5. environments全局参数
environments主要用于配置数据库相关,而且可以在里面配置多个environment。
- transactionManager
MyBatis中有两种事务管理器类型
JDBC:使用了JDBC的提交和回滚设置。
MANAGED(托管):而它让容器来管理事务的整个生命周期(比如spring、jee应用服务器的上下文) - dataSource
用来配置基本的JDBC数据源连接信息
有三种内建的数据源类型UNPOOLED(非连接池)、POOLED(连接池)、JNDI,和spring整合后 environments配置将废除
mappers全局参数
既然 MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。 但是, 首先我们需要告诉MyBatis到哪里去找到这些语句。既然 MyBatis的行为已经由上述元素配置完了,我们现在要定义SQL映射语句了。 但是, 首先我们需要告诉MyBatis到哪里去找到这些语句。
<mappers>
<mapper resource="mybatis/mapper/DeptMapper.xml"/>
</mappers>
– 这些语句简单告诉了MyBatis去哪里找映射文件。其余的细节就是在每个 SQL映射文件中了。
二、mapper.xml(SQL映射文件)
MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在。SQL映射文件的配置却非常简单对比JDBC 代码使用SQL映射文件配置可以节省95%的代码量。
可以配置的基本元素:
- cache – 配置给定模式的缓存
- cache-ref – 从别的模式中引用一个缓存
- resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
- sql – 一个可以被其他语句复用的SQL 块
- insert – 映射INSERT 语句
- update – 映射UPDATE 语句
- delete – 映射DELEETE 语句
- select - 映射SELECT语句
一下是一个mapper.xml配置文件的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="student">
<!-- queryStudentById(Integer id) -->
<select id="queryStudentById" parameterType="int" resultType="stu">
select stu_id,stu_name from tab_student where stu_id=#{stu_id}
</select>
<insert id="addStudent" parameterType="Stu">
insert into tab_student (stu_id,stu_name) values(#{stu_id},#{stu_name})
</insert>
<delete id="deleteStudentById" parameterType="int">
delete from tab_student where stu_id=#{stu_id}
</delete>
<update id="updateStudent" parameterType="Stu">
update tab_student set stu_name=#{stu_name} where stu_id=#{stu_id}
</update>
</mapper>