Ibatis学习总结+ibatis与hibernate简单比较+示例
2012-05-11 10:44
357 查看
Ibatis学习总结
昨天用了一天的时间初步简单的学习了一下ibatis框架。由于这个框架比较小,所以学习的速度比较快,学了这一天,基本上就可以用到项目开发过程中了。
一、是什么
iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
它的核心思想是将sql语句与项目代码分离,使得sql语句的灵活性大大加强。
参考的资料:《ibatis in action》《sql map》、ibatis官网
Ibatis框架:
1、只有一个jar:ibatis.jar
2、需要两个配置文件:sqlMapConfig.xml和sqlMap.xml
其中sqlMapConfig.xml文件一般名字不改,而且只有一个,主要是配置数据源,类似于hibernate中的hibernateConfig.xml文件。
sqlmap.xml文件的文件名并不是固定的,可以由用户自定义,也不是必须唯一的,可以是多个,类似于hibernate中的hbm.xml文件,且需要将其配置到sqlMapConfig.xml中。
二、与hibernate简单比较
网上经常看到Hibernate和ibatis作比较,我也只是大概了解了一点。很多人说到ibatis的性能好一些。究竟性能高体现到哪里的具体的测试我并没有做过, 但是可以从理论上得到:
1、ibatis支持批处理,也就是ibatis支持批量更新数据,而hibernate是不支持的,理论上ibatis在这一点上的性能大大高于hibernate。
2、ibatis要程序员自己手写sql语句,而hibernate是hibernate框架生成sql,那么系统一个是直接执行sql,一个是要先经过hibernate N层复杂的框架,理论上,ibatis的性能要高。
然而ibatis框架确实很小,功能尚缺,与hibernate相比,hibernate可以从实体类直接生成数据库,也可以从数据库直接生成映射实体类,开发过程更加完善统一。而ibatis则需要必须首先建立数据库。并且ibatis现在支持的数据库较少。
Hibernate的映射机制是实体类对应数据库表,采用注解或者配置文件来映射,相当于一对一直接映射。而ibatis的映射机制是在sqlmap.xml文件中的sql语句中实现映射。如下图:
Hibernate的映射:
Ibatis映射:
三、示例
下面的示例中讲解了大部分ibatis中的内容,当然也不全面,比如rowhandler部分、动态sql、事务管理等就没有写到这个示例中:
步骤:
1、建立数据库
2、新建java project
3、引入相关jar:ibatis.jar和数据库驱动jar
4、编写配置文件sqlMapConfig.xml
5、编写sqlMap.xml
6、编写测试代码
代码:
1、entity class:
2、sqlMapConfig :
3、sqlMap.xml
4、test class
昨天用了一天的时间初步简单的学习了一下ibatis框架。由于这个框架比较小,所以学习的速度比较快,学了这一天,基本上就可以用到项目开发过程中了。
一、是什么
iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
它的核心思想是将sql语句与项目代码分离,使得sql语句的灵活性大大加强。
参考的资料:《ibatis in action》《sql map》、ibatis官网
Ibatis框架:
1、只有一个jar:ibatis.jar
2、需要两个配置文件:sqlMapConfig.xml和sqlMap.xml
其中sqlMapConfig.xml文件一般名字不改,而且只有一个,主要是配置数据源,类似于hibernate中的hibernateConfig.xml文件。
sqlmap.xml文件的文件名并不是固定的,可以由用户自定义,也不是必须唯一的,可以是多个,类似于hibernate中的hbm.xml文件,且需要将其配置到sqlMapConfig.xml中。
二、与hibernate简单比较
网上经常看到Hibernate和ibatis作比较,我也只是大概了解了一点。很多人说到ibatis的性能好一些。究竟性能高体现到哪里的具体的测试我并没有做过, 但是可以从理论上得到:
1、ibatis支持批处理,也就是ibatis支持批量更新数据,而hibernate是不支持的,理论上ibatis在这一点上的性能大大高于hibernate。
2、ibatis要程序员自己手写sql语句,而hibernate是hibernate框架生成sql,那么系统一个是直接执行sql,一个是要先经过hibernate N层复杂的框架,理论上,ibatis的性能要高。
然而ibatis框架确实很小,功能尚缺,与hibernate相比,hibernate可以从实体类直接生成数据库,也可以从数据库直接生成映射实体类,开发过程更加完善统一。而ibatis则需要必须首先建立数据库。并且ibatis现在支持的数据库较少。
Hibernate的映射机制是实体类对应数据库表,采用注解或者配置文件来映射,相当于一对一直接映射。而ibatis的映射机制是在sqlmap.xml文件中的sql语句中实现映射。如下图:
Hibernate的映射:
Ibatis映射:
三、示例
下面的示例中讲解了大部分ibatis中的内容,当然也不全面,比如rowhandler部分、动态sql、事务管理等就没有写到这个示例中:
步骤:
1、建立数据库
2、新建java project
3、引入相关jar:ibatis.jar和数据库驱动jar
4、编写配置文件sqlMapConfig.xml
5、编写sqlMap.xml
6、编写测试代码
代码:
1、entity class:
public class Account { private int userid; private String username; private String password; private String groupname; public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getGroupname() { return groupname; } public void setGroupname(String groupname) { this.groupname = groupname; } }
2、sqlMapConfig :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="sqlmap.properties"/> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property value="com.mysql.jdbc.Driver" name="JDBC.Driver"/> <property value="mysql://localhost/demo1" name="JDBC.ConnectionURL"/> <property value="root" name="JDBC.Username"/> <property value="root" name="JDBC.Password"/> </dataSource> </transactionManager> <sqlMap resource="userAccount.xml"/> </sqlMapConfig>
3、sqlMap.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap> <select id="getAllUsers" resultClass="com.air.Account"> SELECT * FROM USER_ACCOUNT order by USERID </select> <!-- 无映射 --> <select id="getAllUsers1" resultClass="com.air.Account" parameterClass="string"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- 内联映射->实体类 --> <select id="getAllUsers2" resultClass="com.air.Account" parameterClass="string"> SELECT USERID as userid, USERNAME as username, PASSWORD as password, GROUPNAME as groupname FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- 内联映射->MAP类 --> <select id="getAllUsers3" resultClass="hashmap" parameterClass="string"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- 显示映射->实体类 --> <resultMap id="accoutResult" class="com.air.Account"> <result property="userid" column="USERID" /> <result property="username" column="USERNAME" /> <result property="password" column="PASSWORD" /> <result property="groupname" column="GROUPNAME" /> </resultMap> <select id="getAllUsers4" resultMap="accoutResult" parameterClass="string"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- 显示映射->MAP类 --> <resultMap id="mapResult" class="hashmap"> <result property="userid" column="USERID" /> <result property="username" column="USERNAME" /> <result property="password" column="PASSWORD" /> <result property="groupname" column="GROUPNAME" /> </resultMap> <select id="getAllUsers5" resultMap="mapResult" parameterClass="string"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- XML --> <select id="selectXML" parameterClass="string" resultClass="xml" xmlResultName="log"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <select id="getOneUser" resultClass="com.air.Account" parameterClass="string"> SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName# </select> <!-- 自动参数映射 --> <insert id="insertOneUser1" parameterClass="com.air.Account"> INSERT INTO USER_ACCOUNT ( USERNAME, PASSWORD, GROUPNAME )VALUES( #username#,#password#,#groupname# ) </insert> <!-- 内联参数映射 --> <insert id="insertOneUser2" parameterClass="com.air.Account"> INSERT INTO USER_ACCOUNT ( USERNAME, PASSWORD, GROUPNAME )VALUES( #username:VARCHAR#, #password:VARCHAR#, #groupname:VARCHAR# ) </insert> <!-- 外联参数映射 --> <parameterMap id="parameterMapEx" class="com.air.Account"> <parameter property="username" jdbcType="VARCHAR"/> <parameter property="password" jdbcType="VARCHAR"/> <parameter property="groupname" jdbcType="VARCHAR"/> </parameterMap> <insert id="insertOneUser3" parameterMap="parameterMapEx"> INSERT INTO USER_ACCOUNT ( USERNAME, PASSWORD, GROUPNAME )VALUES( ?,?,? ) </insert> <!-- 自动生成的键 --> <insert id="insertOneUser4" parameterClass="com.air.Account"> INSERT INTO USER_ACCOUNT ( USERID,USERNAME, PASSWORD, GROUPNAME )VALUES( #userid#, #username#, #password#, #groupname# ) <selectKey keyProperty="userid" resultClass="int"> SELECT LAST_INSERT_ID() </selectKey> </insert> <!-- 存储过程 --> <parameterMap id="pro" class="java.util.Map"> <parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN"/> </parameterMap> <procedure id="pro_insert" parameterMap="pro"> {call new_proc(?)} </procedure> </sqlMap>
4、test class
public class Demo1 { /** * @param args * @throws SQLException */ @SuppressWarnings({ "unchecked", "unchecked" }) public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub String resource = "./SqlMapConfig.xml"; Reader reader; try { reader = Resources.getResourceAsReader(resource); SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); //List list = sqlMap.queryForList("selectXML", "NBA"); // for (int i = 0; i < list.size(); i++) { // Account cc = (Account) list.get(i); // System.out.println(cc.getUserid() + " " + cc.getUsername() // + " " + cc.getPassword() + " " + cc.getGroupname()); // } // for (int i=0;i<list.size();i++){ // Map m=(Map)list.get(i); // System.out.print((String)m.get("userid").toString()+" "); // System.out.print((String)m.get("username")+" "); // System.out.print((String)m.get("password")+" "); // System.out.print((String)m.get("groupname")+" "); // System.out.println(); // } // for (int i = 0; i < list.size(); i++) { // String s = (String) list.get(i); // System.out.println(s); // } // Account ac=(Account)sqlMap.queryForObject("getOneUser","IBM"); // System.out.println(ac.getUserid()); //selectkey // Account iac=new Account(); // iac.setUsername("ALEXhhhh"); // iac.setPassword("DALIAN"); // iac.setGroupname("MS"); // // Integer returnValue=(Integer)sqlMap.insert("insertOneUser4",iac); // // System.out.println(returnValue.intValue()); // //显示插入后的结果 // @SuppressWarnings("unchecked") // List list = sqlMap.queryForList("getAllUsers1","MS"); // // for (int i = 0; i < list.size(); i++) { // Account cc = (Account) list.get(i); // System.out.println(cc.getUserid() + " " + cc.getUsername() // + " " + cc.getPassword() + " " + cc.getGroupname()); // } //调用存储过程 // @SuppressWarnings("unchecked") // Map m=new HashMap(1); // // m.put("name", new String("LISI")); // sqlMap.update("pro_insert",m); // //Integer i=(Integer)sqlMap.queryForObject("pro_insert",m); // // System.out.println("call procedure ok!"); //批处理 // Account c1=new Account(); // c1.setUsername("ZHOUQI"); // c1.setPassword("QINGDAO"); // c1.setGroupname("CN"); // // Account c2=new Account(); // c2.setUsername("WANGWU"); // c2.setPassword("NANJING"); // c2.setGroupname("CN"); // // sqlMap.startBatch(); // // sqlMap.insert("insertOneUser3",c1); // sqlMap.insert("insertOneUser3",c2); // // sqlMap.executeBatch(); //显示插入后的结果 // @SuppressWarnings("unchecked") // List ls = sqlMap.queryForList("getAllUsers1","CN"); // // for (int i = 0; i < ls.size(); i++) { // Account cc = (Account) ls.get(i); // System.out.println(cc.getUserid() + " " + cc.getUsername() // + " " + cc.getPassword() + " " + cc.getGroupname()); // } //RowHandle生产XML // XmlRowHandler rh=new XmlRowHandler(); // sqlMap.queryWithRowHandler("getAllUsers1", "CN", rh); // String xmlDoc=rh.getXmlDocument(); // // System.out.println(xmlDoc); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- ibatis学习总结
- IBatis学习总结之动态拼sql
- Ibatis学习总结+ibatis与hibernate简单比较+示例
- IBatis学习总结
- ibatis入门和学习总结
- ibatis学习总结
- ibatis学习总结
- Ibatis学习总结2--SQL Map XML 配置文件
- iBatis2学习笔记:SqlMap的配置总结(18条)
- Ibatis学习总结5--动态 Mapped Statement
- Ibatis学习总结6--使用 SQL Map API 编程
- Ibatis学习总结
- ibatis学习总结一
- 传智播客JAVA培训2010614 ibatis学习总结
- Struts+ibatis-学习总结二
- IBatis学习总结
- iBatis2学习笔记:SqlMap的配置总结(18条)
- IBatis学习总结
- iBatis2学习笔记:总结与思考
- ibatis学习总结