从iBatis
到MyBatis
,不只是名称上的变化,MyBatis
提供了更为强大的功能
使用它们开发的准备工作
添加相对应的jar包依赖
创建全局配置文件---config.xml
创建sql映射文件---map.xml
mybatis和ibatis的区别he
1. 首先它们配置文件方式不同----》config.xml
ibatis中的congig.xml配置文件
mybatis中的congig.xml配置文件
总结:它们的根标签发生了变化
它们的<settings>标签使用方式发生了变化
它们的配置事物管理器和数据源不一样
它们指向sql的映射文件的标签方式不一样
2. 它们在map.xml文件当中使用的常见怎删改差标签不同
mybatis当中使用具体的sql关键字标签 例如<select><insert><delete><update>..
ibatis当中可以使用<statement>万能标签
3. 它们进行传参使用的关键字不同
mybatis当中必须有namespacce这个属性,而ibatis当中可以没有这个属性
mybatiis当中传入关键字parementType(可省略不写) 传出的关键字resultType或者resultMap
ibatis传入关键字parementClass 传出的关键字resultClass
4. 它们使用占位符的写法方式不同
mybatis当中的写法方式#{}和${} 一般使用#{}
ibatis当中的写法方式#字段#和$字段$
5. 它们使用动态sql语句时不同
mybatis中有if、where、foreach 动态sql标签 注意<if>标签test里面是判断条件
<!-- 练习:动态sql语句 if -->
<!-- 根据员工的薪资查询员工信息 -->
<select id="findbySal" resultType="cn.tedu.pojo.Emp">
select * from emp
where 1=1
<if test="minsal!=null">
and salary > #{minsal}
</if>
<if test="maxsal!=null">
and salary < #{maxsal}
</if>
</select>
<!-- 练习:动态sql语句 where -->
<select id="findbySal2" resultType="cn.tedu.pojo.Emp">
select * from emp
<where>
<if test="minsal!=null">
salary > #{minsal}
</if>
<if test="maxsal!=null">
and salary < #{maxsal}
</if>
</where>
</select>
练习foreach标签
<!-- 练习:动态sql语句 foreach -->
<!-- 练习4:根据员工id批量删除员工信息id[]数组ids[] ids={1,3,5,7}; -->
<delete id="deleteByIds">
delete from emp where id in
<foreach collection="list" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 练习:根据员工id批量跟新员工薪资 id数组 int[] ids={2,4,6,8} 1000; map.put(,id); map.put(money,1000); -->
<update id="updatebyids">
update emp set salary=salary+#{money}
where id in
<foreach collection="Ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</update>
// 练习mybatis中的动态sql语句foreach
@Test
private void testfindbysa3() {
// int [] ids= {1,3,5,7};
// session.delete("EmpMapper.daletebyids",ids);
ArrayList list = new ArrayList();
list.add(2);
list.add(4);
list.add(6);
list.add(8);
session.delete("EmpMapper.daletebyids", list);
}@Test
public void testupdatebyids() {
int[] ids = { 2, 4, 6, 8 };
Double money = 1000.0;
Map map = new HashMap();
map.put("Ids", ids);
map.put("money", 1000);
session.update("EmpMapper.updatebyids", map);
}
<foreach>标签中参数介绍
collection:如果传过来的是数组(或者集合),collection的值就用arrsy(或者list)表示
如果传过来的是用map集合封装了,collection的值就用map集合的key表示
open属性:指定所生成SQL片段的起始符号,通常是左圆括号 (
close属性:指定所生成SQL片段的结束符号,通常是右圆括号 )
item属性:指定占位符中的名称
separator属性:指定占位符中间的分隔符, 通常是逗号 ,
ibatis当中的动态sql标签有<itereat> 这个标签可以遍历整个集合
prepend 属性- 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property 属性- 类型为java.util.List的用于遍历的元素 指定占位符中的名称(必选)
open 属性- 指定所生成SQL片段的起始符号,通常是左圆括号 ( (可选)
close 属性-指定所生成SQL片段的结束符号,通常是右圆括号 )(可选)
conjunction 属性 - 指定占位符中间的分隔符, 通常是逗号 ,也可是AND或者OR(可选)
主要出发点其实并不是使得 MyBatis 功能更为强大,而是使配置更为合理,让开发者更容易阅读和理解。