初学ibatis

来源:互联网 发布:淘宝搜索排行榜 编辑:程序博客网 时间:2024/05/29 16:29

ibatis是一种“半自动化”的ORM实现。所谓“半自动”,是相对于目前主流的ORM的“全自动”,无论Hibernate 还是ApacheOJB都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。 而ibatis并不会为程序员在运行期自动生成SQL 执行。具体的
SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO;

iBatis (http://www.ibatis.com) 下载网址 download下来,看看里面的例子就可以玩了。

下面就是一个Student 简单的增删改查

Student

Code:
  1. package com.donsoft;   
  2.   
  3. public class Student {   
  4.     private int id;   
  5.   
  6.     private String name;   
  7.   
  8.     private String sex;   
  9.   
  10.     private int age;   
  11.        
  12.     public int getAge() {   
  13.         return age;   
  14.     }   
  15.     public int getId() {   
  16.         return id;   
  17.     }   
  18.   
  19.     public String getName() {   
  20.         return name;   
  21.     }   
  22.   
  23.     public String getSex() {   
  24.         return sex;   
  25.     }   
  26.   
  27.     public void setAge(int age) {   
  28.         this.age = age;   
  29.     }   
  30.   
  31.     public void setId(int id) {   
  32.         this.id = id;   
  33.     }   
  34.   
  35.     public void setName(String name) {   
  36.         this.name = name;   
  37.     }   
  38.   
  39.     public void setSex(String sex) {   
  40.         this.sex = sex;   
  41.     }   
  42.   
  43.     @Override  
  44.     public String toString() {   
  45.         String content = "name:" + name + "/tsex:" + sex + "/tage:" + age;   
  46.         return content;   
  47.     }   
  48.   
  49. }   

IStudentDAO

Code:
  1. package com.donsoft;   
  2.   
  3. import java.sql.SQLException;   
  4. import java.util.List;   
  5.   
  6. public interface IStudentDAO {   
  7.     public void insertStudent(Student student);   
  8.     public void insertStudentBySequence(Student student)throws SQLException;   
  9.     public void deleteStudentById(int id) throws SQLException;   
  10.     public void updataStudent(Student student) throws SQLException;   
  11.     public List<Student> queryAllStudent() throws SQLException;   
  12.     public List<Student> queryAllStudentByName(String name) throws SQLException;   
  13.     public Student queryStudnetById(int id) throws SQLException;   
  14. }   

IStudnetDAOImpl

Code:
  1. package com.donsoft;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.Reader;   
  5. import java.sql.SQLException;   
  6. import java.util.List;   
  7.   
  8. import com.ibatis.common.resources.Resources;   
  9. import com.ibatis.sqlmap.client.SqlMapClient;   
  10. import com.ibatis.sqlmap.client.SqlMapClientBuilder;   
  11.   
  12.   
  13. public class IStudentDAOImpl implements IStudentDAO {   
  14.        
  15.        
  16.     private static SqlMapClient sqlMapClient =null;   
  17.        
  18.     static {   
  19.         try {   
  20.             Reader  reader = Resources.getResourceAsReader("com/donsoft/SqlMapConfig.xml");   
  21.             sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);   
  22.             reader.close();   
  23.         } catch (IOException e) {   
  24.             // TODO Auto-generated catch block   
  25.             e.printStackTrace();   
  26.         }   
  27.            
  28.     }   
  29.     @Override  
  30.     public void deleteStudentById(int id) throws SQLException {   
  31.           sqlMapClient.delete("deleteStudentById",id);   
  32.     }   
  33.   
  34.     @Override  
  35.     public void insertStudent(Student student) {   
  36.         // TODO Auto-generated method stub   
  37.         try {   
  38.             sqlMapClient.insert("addStudent",student);   
  39.         } catch (SQLException e) {   
  40.             // TODO Auto-generated catch block   
  41.             e.printStackTrace();   
  42.         }   
  43.     }   
  44.   
  45.     @Override  
  46.     public List<Student> queryAllStudent() throws SQLException{   
  47.         List<Student> studentlist=sqlMapClient.queryForList("selectAllStu");   
  48.         return studentlist;   
  49.     }   
  50.   
  51.     @Override  
  52.     public List<Student> queryAllStudentByName(String name) throws SQLException {   
  53.         List<Student> studentlist = sqlMapClient.queryForList("selectStudentByName",name);   
  54.         return studentlist;   
  55.     }   
  56.   
  57.     @Override  
  58.     public Student queryStudnetById(int id) throws SQLException {   
  59.         // TODO Auto-generated method stub   
  60.         Student student = (Student) sqlMapClient.queryForObject("selectStudentById",id);   
  61.            
  62.         return student;   
  63.     }   
  64.   
  65.     @Override  
  66.     public void updataStudent(Student student) throws SQLException {   
  67.         System.out.print(sqlMapClient.update("updateStudentById",student));   
  68.   
  69.     }   
  70.   
  71.     @Override  
  72.     public void insertStudentBySequence(Student student) throws SQLException {   
  73.         sqlMapClient.insert("selectStudentSequence",student);   
  74.         System.out.println("id="+student.getId());   
  75.     }   
  76.   
  77.     /**  
  78.      * @param args  
  79.      */  
  80.        
  81.   
  82. }   

Studnet.xml

Code:
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMap         
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"         
  5.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  6.   
  7. <sqlMap>  
  8.     <typeAlias alias="Student" type="com.donsoft.Student"/>  
  9.        
  10.     <select id="selectAllStu" resultClass="Student">  
  11.         select * from student   
  12.     </select>  
  13.        
  14.     <insert id="addStudent" parameterClass="Student">  
  15.         INSERT INTO student(id,name,sex,age) VALUES(#id#,#name#,#sex#,#age#)   
  16.     </insert>  
  17.        
  18.        
  19.     <insert id="selectStudentSequence" parameterClass="Student">  
  20.         <selectKey resultClass="int" keyProperty="Student">  
  21.             select studentPKSequence.nextVal   
  22.             from dual   
  23.         </selectKey>  
  24.            
  25.         insert into student(id,name,sex,age) values(#id#,#name#,#sex#,#age#)   
  26.     </insert>  
  27.        
  28.     <select id="selectStudentById" parameterClass="int" resultClass="Student">  
  29.         select * from student where id=#id#   
  30.     </select>  
  31.        
  32.     <delete id="deleteStudentById" parameterClass="int">  
  33.         delete from student where id=#id#   
  34.     </delete>  
  35.        
  36.     <update id="updateStudentById" parameterClass="Student">  
  37.         update student set   
  38.         name=#name#,   
  39.         sex=#sex#,   
  40.         age=#age#   
  41.         where id=#id#   
  42.     </update>  
  43.        
  44.     <select id="selectStudentByName" parameterClass="String" resultClass="Student">  
  45.         select * from student   
  46.         where name like '%$name$%' or sex like '$%sex%$'   
  47.     </select>  
  48. </sqlMap>  

SqlMapConfig.xml

Code:
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMapConfig         
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"         
  5.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
  6. <!-- Ibatis配置文件-->  
  7. <sqlMapConfig>  
  8.         <!-- 加载连接数据库属性文件 -->  
  9.         <properties resource="com/donsoft/SqlMapConfig.properties"/>       
  10.         <transactionManager type="JDBC">  
  11.             <dataSource type="simple">  
  12.                 <property name="JDBC.Driver" value="${driver}"/>  
  13.                 <property name="JDBC.ConnectionURL" value="${url}"/>  
  14.                 <property name="JDBC.Username" value="${username}"/>  
  15.                 <property name="JDBC.Password" value="${password}"/>  
  16.             </dataSource>  
  17.         </transactionManager>  
  18.         <sqlMap resource="com/donsoft/Student.xml"/>  
  19. </sqlMapConfig>  

SqlMapConfig.properties

Code:
  1. driver=com.microsoft.jdbc.sqlserver.SQLServerDriver   
  2. url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testDB;SelectMethod=cursor  
  3. username=sa  
  4. password=123456  

ibatis与hibernate的比较:

hibernate 它是全封闭式的,对数据库的操作提供了完整封装,所有的SQL都是自动生成和执行,开发人员不需要再关注底层的建设,甚至不需要开发人员对SQL的熟练掌握,所有操作都是java对象,而更注重业务逻辑,开发人员只需定义好POJO与数据库的映射(*.hbm.xml),在对数据操作时只需调用hibernate 提供的方法完成数据层的操作,hibernate/OJB 会根据制定的存储逻辑,自动生成相应的SQL并调用JDBC接口完成执行;ibatis 它是半封闭式的,何为半封闭式,这相对hibernate 对比,ibatis的着力点则在于POJO与SQL之间的映射关系,所有的SQL都需要开发人员在映射文件编写,通过这个映射文件的配置,将SQL所需要的参数传入进去和返回的结果字段映射到指定的POJO,而且ibatis最好的一个亮点在于可以操作存储过程。iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。以数据库字段一一对应映射得到的PO和Hibernate这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

原创粉丝点击