1.MyBatis简介
MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。
2.setting配置
设置项 | 描述 | 允许值 | 默认值 |
cacheEnabled | 对在此配置文件下的所有cache 进行全局性开/关设置。 | true | false | true |
lazyLoadingEnabled | 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。 | true | false | true |
aggressiveLazyLoading | 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 | true | false | true |
multipleResultSetsEnabled | 允许和不允许单条语句返回多个数据集(取决于驱动需求) | true | false | true |
useColumnLabel | 使用列标签代替列名称。不同的驱动器有不同的作法。参考一下驱动器文档,或者用这两个不同的选项进行测试一下。 | true | false | true |
useGeneratedKeys | 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 | true | false | false |
autoMappingBehavior | 指定MyBatis 是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL 将自动映射所有复杂的结果。 | NONE, PARTIAL, FULL | PARTIAL |
defaultExecutorType | 配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时 | 正整数 | Not Set (null) |
例子:
<settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="false" /> <setting name="aggressiveLazyLoading" value="true" /> <setting name="multipleResultSetsEnabled" value="false" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="true" /> <setting name="autoMappingBehavior" value="FULL" /> <setting name="defaultExecutorType" value="BATCH" /> <setting name="defaultStatementTimeout" value="25000" /> </settings>
3.基本配置元素
cache – 配置给定模式的缓存
cache-ref – 从别的模式中引用一个缓存
resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
sql – 一个可以被其他语句复用的SQL 块
insert – 映射INSERT 语句
update – 映射UPDATE 语句
delete – 映射DELEETE 语句
select - 映射SELECT语句
4.简单配置示例
<?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="com.accp.mybatis.model.Blog"> <!--可重用的SQL代码段--> <sql id="blog_column">id,title,author_id as authorId</sql> <select id="selectBlog_as_map" parameterType="int" resultType="hashmap"> select <include refid="blog_column"/> from Blog where id = #{id} </select> <insert id="insertBlog" parameterType="Blog"> insert into Blog (id,title,author_id) values (#{id},#{title},#{authorId}) </insert> <insert id="insertBlog" parameterType="Blog" > <selectKey keyProperty="studentID" resultType="String" order="BEFORE"> select nextval('id') </selectKey> insert into Blog (id,title,author_id) values (#{id},#{title},#{authorId}) </insert> <update id="updateBlog" parameterType="Blog"> UPDATE Blog SET title = #{title}, author_id = #{author.id}, WHERE id = #{id}; </update> <delete id="deleteBlog" parameterType="Blog"> DELETE FROM BLOG WHERE ID = #{id} </delete> </mapper>