ibatis基础
Ibatis简介:
ibatis是apache的一个开源项目,一个O/R Mapping解决方案,ibatis最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,ibatis是能满足你的要求又足够灵活的最简单的解决方案.官网是:http://ibatis.apache.rog/
搭建环境:
导入相关的jar包
配置文件:
jdbc连接的属性文件
总配置文件
关于每个实体的映射文件(map文件)
读取配置:
基本的CRUD操作:
如果返回结果是List. resultClass的值则是List中的类型
模糊查询:
自动主键selectKey:
使用主键自动生成(数据库生成),需要数据库支持自增长主键. 先在数据库中建立序列
selectKey的作用就是去查找序列,把序列的下一个值返回来赋给java对象的属性
优点:
其他(未验证):
开启事物,提交事物:
try{
sqlMap.startTransaction();
User user = new User();
user.setId(new Integer(1));
user.setName("Erica");
user.setSex(new Integer(1));
sqlMap.update("updateUser",user);
sqlMap.commitTransaction();
finally{
sqlMap.endTransaction();
}
sqlMap.startTransaction();
User user = new User();
user.setId(new Integer(1));
user.setName("Erica");
user.setSex(new Integer(1));
sqlMap.update("updateUser",user);
sqlMap.commitTransaction();
finally{
sqlMap.endTransaction();
}
动态sql:
从以下地方开始,我在编写Ibatis的 sql mapping时并没有这些标签. 不知道是从Ibatis几开始支持的. 不过Mybatis中这些标签是存在并可用的:
iBATIS OGNL 表达式
iBATIS的提供了强大的基于OGNL的表达式来消除其他元素。
-
if 语句
-
choose, when, otherwise 语句
-
where 语句
-
foreach 语句
if语句:
最常见的事情在动态SQL是有条件地包括一个where子句的一部分。例如:
<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'ACTIVE. <if test="title != null"> AND title like #{title} </if> </select>
这条语句会提供功能的可选的文本搜索类型。如果没有传递title,那么所有激活的博客将被退回。但是,如果传递一个标题,它会寻找标题以like 给定的条件。
可以包括多个if条件如下:
最常见的事情在动态SQL是有条件地包括一个where子句的一部分。例如:
<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'ACTIVE. <if test="title != null"> AND title like #{title} </if> <if test="author != null"> AND author like #{author} </if> </select>
choose, when, otherwise 语句:
iBATIS提供了一个选择的元素,它类似于Java的switch语句。这有助于选择很多种情况。
下面的例子将只搜索标题上如果提供,那么只有由作者如果已提供。如果没有提供,让我们只返回精选的博客:
<select id="findActiveBlogWithTitleLike" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'ACTIVE. <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author like #{author} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>
where 语句:
如果我们看一下前面的例子中,如果没有一个条件满足会发生什么事?最终SQL看起来像这样:
SELECT * FROM BLOG WHERE
这会失败,但iBATIS有一个简单的改变一个简单的解决方案,让一切工作正常:
<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 like #{author} </if> </where> </select>
where元素知道只有插入WHERE ,如果有一个由含标签返回的任何内容。此外,如果该内容开头AND或OR,它知道剥离其关闭。
foreach语句:
foreach元素是非常强大的,并允许你指定一个集合,声明可以在元素的体内可用于项目和索引变量。
它也允许你指定打开和关闭的字符串,并添加一个分隔符放置在迭代之间。可以建立一个IN条件如下:
<select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>