目录
Ibatis的两大配置文件
1.sql-map-config.xml
2.*.xml
Ibatis中sqlMapConfig.xml配置
settings:配置的一些参数设置的信息
sqlMap resource:通过它去包含相关的.xml文件
注意:在进行查询返回结果集的时候,ibatis是根据字段名找到其在resultClass中指定的实体类的属性名,然后对其赋值。
要保证字段名和实体属性名一致,如果查询的字段名和属性名不一致,通过给字段名起别名来进行解决.
Hibernate Ibatis Jdbc 三者区别
Hibernate属于全自动, Ibatis属于半自动,Jdbc属于手动,
从开发效率上讲hibernate较高,ibatis居中,jdbc较低,
从执行效率上讲hibernate较低,ibatis居中,jdbc较高,
因为jdbc是手工写sql语句,程序员对sql的控制能力更大,可以根据业务需要进行优化,而ibatis虽然也可以对sql进行优化,但是他里面将resultset封装为实体的过程中采用了反射机制所以一定程度上影响了性能,而hibernate因为高度封装所以开发效率相对较高,但正因为这个原因,所以程序员在对sql语句的控制和优化方面相对比较弱,而且在将resultset封装成实体的过程中也采用了反射机制,所以在性能方面较低。
Hibernate和Ibatis配置的区别
Hibernate | Ibatis |
1.dao层继承HibernateDaoSupport | 1.dao层继承SqlMapClientDaoSupport
|
2.在spring-common.xml中配置sesssionFactory | 2.在spring-common.xml中配置SqlMapClient |
3.加载hibernate.cfg.xml | 3.加载sql-map-config.xml |
4.在spring-dao.xml中注入是sesssionFactory | 4.在spring-dao.xml中注入是SqlMapClient
|
5.在hibernate.cfg.xml配置文件中引入的是 *.hbm.xml文件,里面包含个各种对应及其映射关系 | 5.在sql-map-config.xml中引入的是*.xml 里面配置的都是sql语句 |
Ibatis之所以称为半自动化;
是因为你需要手工写SQL语句,
但不需要完成结果集resultset到实体类
的转换
dao层:
首先它要先继承一个类:SqlMapClientDaoSupport
:结构化查询映射交给dao层 ,dao层支持这样的查询
getSqlMapClientTemplate : 获取结构化查询映射的模板 意思是把ibatis.Xml看作是一个模板,获取模板的方法就可以得到结果
这里有几个注意事项:
1:获取总条数的时候要用Integer强转 不能用int 因为Integer是类型 强转之后Integer类型才能自动拆箱成int
2:批量删除的时候传一个list结合,所以需要把id字符串变成一个集合注意使用方法:List<String> list = Arrays.asList(id.split(“,”));
Ibatis的xml文件解读:
1:首先是它的根元素:<sqlMap namespace=”user”>
如果总文件中useStatementNamespaces="true" 在dao调的方法名前面要加一个 user.getCount
2:ibatis的总文件包含了许多子文件,多表以后一个bean对应一个xml
3:我想可以把xml看做一个工具类,调用方法的时候传一个方法名和另外一个参数
4:<typeAlias/>这个标签引入bean
5:<resultMap id=”” class=””/>两个属性的意思class引入type(类型)id和resultMap一起使用指返回值的类型 返回指的类型的另一种写法是 resultClass=””
6:模糊查询需要使用一个标签<isNotNUll> 他的引用<include refid=””/>
7:每次使用sql语句的时候 注意参数 id:方法名称 parmeterClass:传进来的参数类型 resultMap和resultClass:返回值的参数类型
8:批量删除的需要引入标签 <iterate conjunction="," open="(" close=")"> #[]# </iterate>
ibatis批量删除在配置文件中进行
1、传入ID字符串的list即可
<delete id="Del" resultMap="Select" parameterClass="list">
delete
from SYS_TABLE
where id in
<iterate conjunction="," open="(" close=")">
#[]#
</iterate>
</delete>
容易出错的:
1:就是那四个参数 id parmeterClass resultMap resultClass这四个参数的设置 必须正确
2:SQL语句是否正确 这个可以复制到数据库查询一下
Ibatis动态条件查询标签
dynamic
prepend
非空判断
<isNotEmpty prepend="and" property="bookName">
</isNotEmpty>
大于判断
<isGreaterThan prepend="and" property="minPrice" compareValue="0">
</isGreaterThan>
小于判断
<isLessThan prepend="and" property="minPrice" compareValue="0">
</isLessThan>
封装重复的sql语句
<sql id="bookWhere"></sql>
结合使用
<include refid="bookWhere"/>
动态条件的嵌套使用
<isGreaterThan prepend="and" property="maxAge"
compareValue="0">
<isGreaterThan prepend="and" property="maxAge"
compareProperty="minAge">
bookPrice <= #maxPrice#
</isGreaterThan>
</isGreaterThan>
注意:
1.compareValue是和一个具体的值比较,而compareProperty和另外一个属性比较
2.在xml中<要替换为<
3.可以通过 <![CDATA[employeeAge <= #maxAge#]]> 对其特殊字符进行转义
在ibatis中如何获取外键的id值
对于mysql:
对于oracle:
Ibatis中*.xml文件的配置
1.根标签为:sqlMap
2.typeAlias
3.增加对应的标签为insert
4.查询select标签
注意:在进行查询返回结果集的时候,ibatis是根据字段名找到其在resultClass中指定的实体类的属性名,然后对其赋值。
要保证字段名和实体属性名一致,如果查询的字段名和属性名不一致,通过给字段名起别名来进行解决.