对比学习Hibernate,ibaties框架的学习思路:
1、与Hibernate的区别:Hibernate中的实体类与一个表相对应,而ibatis映射的是SQL查询结果集进行映射,就是说不是把一个表建立为一个实体类,而是把sql中的参数作为一个实体类。Hibernate会自动生成SQL语句,而ibatis需要我们自己编写SQL语句写好后,根据我们的映射调用相应语句执行。
2、主要操作的类与接口
3、ORM关系映射或者配置的XML
4、进行小测试
测试ibaties过程:
1、ibaties环境的搭建:创建一个java工程,导入ibaties相关的jar包,ibaties版本号.jar,以及数据库的驱动包
2、在src目录下创建一个.xml的映射文件,保存数据库中的一些信息,例如创建一个MySqlMapConfig.xml
<sqlMapConfig>
//如果你将数据库的一些配置信息放在sqlMapConfig.properties
//中,则需要写上properties表示加载配置信息,在下面引用即可
<properties resource="sqlMapConfig.properties"/>
//数据库中的优化一些配置信息,缓存、懒加载等
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
//用一个类型别名代替
<typeAlias alias="book" type="cn.com.ibatis.pojo.Book"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
//引用sqlMapConfig.properties中的值信息
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
//引用实体类的映射文件
<sqlMap resource="cn/com/ibatis/pojo/ebook.xml" />
</sqlMapConfig>
3、写上相对应的实体和实体的映射文件,只是这个映射文件不再是Hibernate中的实体类相对应的映射文件,而是实体中相对应的SQL语句中的参数的映射,只是SQL语句中的相对应的字段要和实体类中的属性相对应
实体类:
public class Book{
private int b_id;
private String b_name;
private float b_price;
生成相对应的set和get方法。
}
<!-- SlqMap映射文件 映射文件包括 SQL 语句和参数对象和结果对象的映射 -->
<sqlMap>
//一个查询的结果集对应一个类,将要关联的表的字段作为属性放在
//这个类中,当涉及多张表的字段的时候,将涉及的字段全写在一个
//类中,而不要每张表建立一个实体类,因为ibaties关联的是SQL的结果集
<select id="getBook" resultClass="cn.com.ibatis.pojo.Book,">
select
name as b_name(属性名),
id as b_id,
price as b_price
from book
where id = #b_id(属性名)#
</select>
<update id="updateBook" parameterClass="cn.com.ibatis.pojo.Book">
update book set name = #b_name# where id = #b_id#
</update>
<insert id="insertBook" parameterClass="cn.com.ibatis.pojo.Book">
insert into book values(#b_id#,#b_name#,#b_price#)
</insert>
<delete id="deleBook">
delete from book where id = #b_id#
</delete>
</sqlMap>
4、编写测试代码,其中有一个很关键的类:SqlMapClient,相当于Hibernate中的session,执行的各种增删查改的方法都封装到这个类中
public static void testSelect()throws Exception{
SqlMapClient client = null;// session
//读取MySqlMapConfig.xml中的配置信息
Reader reader = Resources.getResourceAsReader("MySqlMapConfig.xml");
client = SqlMapClientBuilder.buildSqlMapClient(reader);
//getBook是实体类映射文件中的查询语句中的id号
Object obj = client.queryForObject("getBook",6);
Book book = (Book)obj;
System.out.println(book.getB_name());
}
public static void main(String[] args)throws Exception{
// TODO Auto-generated method stub
testSelect();
}