本文最后更新于 1803 天前,其中的信息可能已经有所发展或是发生改变。
1. 简介
- 原名叫ibatis
- 底层是对JDBC封装
- 数据访问层框架
2. 使用
- 配置文件
- context.xml 放在MATE-INF目录 负责配置数据库以及数据库连接池
- 可以将鼠标悬停在标签上,可以看到标签的相应语法,?表示0个或一个,顺序也得遵守
- context.xml 放在MATE-INF目录 负责配置数据库以及数据库连接池
- 事务回滚
- 一般操作一个session 只要session没关闭 之前的所有执行的sql都是一个事务 在关闭之前可以进行事务回滚,session.rollback
- 执行sql时 如果发生异常,应执行session.rollback();
- 多条sql操作才需要回滚
3. 动态SQL
- IF
<select id="findActiveBlogLike" parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG WHERE 1=1 //因为if后添加的sql 时and开头 所以这必须加一个条件 (1=1也行)
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
- WHERE
如果where里返回内容 将生成where关键字 如果返回的第一个内容时以and或者or开头的,将自动去掉and或者or
<select id="findActiveBlogLike"parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>
- SWITCH
<select id="findActiveBlogLike" parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG
<where>
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</where>
</select>
- SET
注意语句后面的逗号
- trim
//<where></where>
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
//<set></set>
<trim prefix="SET" suffixOverrides=",">
...
</trim>
- 修改字段
<bind name="money" value="'$'+money"/>
- 模糊查询
<bind name="money" value="'%'+money+'%'"/>
- 批量新增(效率更高)
- FOREACH
- SQL复用
- 缓存
- 同一个session和同一个sql会直接使用缓存
- 同一个SessionFactory 不同session 同一个sql 使用缓存
- 缓存是存储在内存中的statement对象
- throws Exception的意思
在方法声明部分使用,表示该方法可能产生此异常,如果在方法声明处使用了throws声明异常,则该方法产生异常也不必捕获,会直接把异常抛出到调用该方法的地方。 - 在事务回滚时使用
- 在spring中配置声明式事务,(aop)
- 该执行回滚时抛出异常,一直往上抛,不处理
- 抛出异常时spring就会进行回滚了
- 在controller中处理,因为要获取异常信息。