ibatis和Spring整合的详细例子

14年前

ibatis和Spring整合的详细例子

ibatis和Spring整合的详细例子,数据库用的是mysql,开发环境是Eclipse3.2:

        1.首先把用到的包导入进来,此例用的是spring-framework-1.2.7,iBATIS_DBL-2.1.7.597,mysql的数
  据库连接包用的是mysql-connector-java-5.0.3-bin.jar.

        2.建POJO类,在此我们用的是一个Student类.
 

  1. package cn.itcast;   
  2.     
  3.  public class Student {   
  4.   private Integer id;   
  5.     
  6.   private String firstname;   
  7.     
  8.   private String lastname;   
  9.     
  10.   public String getFirstname() {   
  11.    return firstname;   
  12.   }   
  13.     
  14.   public void setFirstname(String firstname) {   
  15.    this.firstname = firstname;   
  16.   }   
  17.     
  18.   public Integer getId() {   
  19.    return id;   
  20.   }   
  21.     
  22.   public void setId(Integer id) {   
  23.    this.id = id;   
  24.   }   
  25.     
  26.   public String getLastname() {   
  27.    return lastname;   
  28.   }   
  29.     
  30.   public void setLastname(String lastname) {   
  31.    this.lastname = lastname;   
  32.   }   
  33.  }  

 

        3.POJO的映射文件Student.xml,在这里面只有两个功能,即根据student的id检索出一个Student对象,另一
  个就是向数据库插入一条记录(一个Student对象),注意:此应用程序中所有的配置文件(xml文件和properties文件都放在configfile包下面).

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">  
  3. <!--这是POJO映射文件的根元素-->  
  4. <sqlMap namespace="Student">  
  5.  <!--select元素的id属性用来标识此元素,resultClass属性的值是Java类的全限定名(即包括类的包名)。   
  6.  resultClass属性可以让您指定一个Java类,根据ResultSetMetaData将其自动映射到JDBC的ResultSet。   
  7.  只要是Java Bean的属性名称和ResultSet的列名匹配,属性自动赋值给列值。   
  8.  parameterClass属性是参数的类型,此属性的值是Java类的全限定名(即包括类的包名)。   
  9.  它是可选的,但强烈建议使用。它的目的是 限制输入参数的类型为指定的Java类,并   
  10.  优化框架的性能。-->  
  11.  <select id="getStudentById" resultClass="cn.itcast.Student" parameterClass="int">  
  12.   select id,firstname,lastname from student where id=#value#   
  13.  </select>  
  14.     
  15.  <insert id="insertStudent" parameterClass="cn.itcast.Student">  
  16.   insert into student(firstname,lastname) values(#firstname#,#lastname#)   
  17.  </insert>  
  18. </sqlMap>  

 

        4.建一个SqlMap的配置文件sql-map-config.xml,sqlMap元素的resource属性告诉Spring去哪找POJO映射文件.

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMapConfig   
  3. PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"   
  4. "http://www.ibatis.com/dtd/sql-map-config-2.dtd">  
  5. <sqlMapConfig>  
  6.  <sqlMap resource="configfile/Student.xml" />  
  7. </sqlMapConfig>  

 

        5.jdbc.properties文件,存储数据库连接的driver,url,username,password等信息,

  1. jdbc.driver=com.mysql.jdbc.Driver   
  2. jdbcjdbc.url=jdbc:mysql://localhost/itcast   
  3. jdbc.username=root  
  4. jdbc.password=  

 


        6.Spring配置文件applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3.   
  4. <beans>  
  5.   
  6.  <!--此bean告诉Spring去哪找数据库的配置信息,因为有此Bean才出现下面用${}标记来取变量的语句-->  
  7.  <bean id="propertyConfig"  
  8.   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  9.   <property name="location">  
  10.    <value>configfile/jdbc.properties</value>  
  11.   </property>  
  12.  </bean>  
  13.   
  14.  <!--配置一个数据源,根据上面propertyConfig指定的location去找数据库连接的配置信息-->  
  15.  <bean id="dataSource"  
  16.   class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  17.   <property name="driverClassName">  
  18.    <value>${jdbc.driver}</value>  
  19.   </property>  
  20.   <property name="url">  
  21.    <value>${jdbc.url}</value>  
  22.   </property>  
  23.   <property name="username">  
  24.    <value>${jdbc.username}</value>  
  25.   </property>  
  26.   <property name="password">  
  27.    <value>${jdbc.password}</value>  
  28.   </property>  
  29.  </bean>  
  30.   
  31.  <!--根据dataSource和configLocation创建一个SqlMapClient-->  
  32.  <bean id="sqlMapClient"  
  33.   class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  34.   <property name="configLocation">  
  35.    <value>configfile/sql-map-config.xml</value>  
  36.   </property>  
  37.   <property name="dataSource">  
  38.    <ref bean="dataSource" />  
  39.   </property>  
  40.  </bean>  
  41.   
  42.  <!--根据sqlMapClien创建一个SqlMapClient模版类-->    
  43.  <bean id="sqlMapClientTemplate"  
  44.   class="org.springframework.orm.ibatis.SqlMapClientTemplate">  
  45.   <property name="sqlMapClient">  
  46.    <ref bean="sqlMapClient" />  
  47.   </property>  
  48.  </bean>  
  49.     
  50.  <!--将上面的模版类织入到我们的DAO对象中-->  
  51.  <bean id="studentDao" class="cn.itcast.StudentDaoSqlMap">  
  52.   <property name="sqlMapClientTemplate">  
  53.    <ref bean="sqlMapClientTemplate" />  
  54.   </property>  
  55.  </bean>  
  56.   
  57. </beans>  

 

        7.StudentDaoSqlMap 是一个DAO,它负责和数据库的交互,在这里实现了查询单条记录和插入单条记录的功能.

  1. package cn.itcast;   
  2.   
  3. import org.springframework.orm.ibatis.SqlMapClientTemplate;   
  4.   
  5. public class StudentDaoSqlMap {   
  6.  private SqlMapClientTemplate sqlMapClientTemplate;   
  7.   
  8.  public SqlMapClientTemplate getSqlMapClientTemplate() {   
  9.   return sqlMapClientTemplate;   
  10.  }   
  11.   
  12.  public void setSqlMapClientTemplate(   
  13.    SqlMapClientTemplate sqlMapClientTemplate) {   
  14.   this.sqlMapClientTemplate = sqlMapClientTemplate;   
  15.  }   
  16.   
  17.  //此方法的返回值与Student.xml的select元素的resultClass对应.   
  18.  public Student getStudent(Integer id) {   
  19.   return (Student) sqlMapClientTemplate.queryForObject("getStudentById",id);   
  20.   //注意:queryForObject方法返回一个Object,第一个参数与Student.xml的select元素   
  21.   //的id属性值对应,第二个参数的类型与Student.xml的select元素的parameterClass   
  22.   //属性值对应.   
  23.  }   
  24.   
  25.  public Object insertStudent(Student student) {   
  26.   return sqlMapClientTemplate.insert("insertStudent", student);   
  27.  }   
  28. }  

 

        8.下面写一个带main函数的类来测试上面的代码.代码非常简单就不再解释了.
 

  1. package cn.itcast;   
  2.     
  3.  import org.springframework.context.ApplicationContext;   
  4.  import org.springframework.context.support.ClassPathXmlApplicationContext;   
  5.     
  6.  public class Client {   
  7.     
  8.   public static void main(String[] args) {   
  9.    ApplicationContext factory = new ClassPathXmlApplicationContext(   
  10.      "applicationContext.xml");   
  11.     
  12.    StudentDaoSqlMap studentDao = (StudentDaoSqlMap) factory   
  13.      .getBean("studentDao");   
  14.       
  15.    //插入一个student   
  16.    Student student = new Student();   
  17.    student.setFirstname("tian");   
  18.    student.setLastname("xiangdong");   
  19.    studentDao.insertStudent(student);   
  20.     
  21.    //查询出id是1的Student对象.   
  22.    //Student student = studentDao.getStudent(1);   
  23.    //System.out.println(student.getId());   
  24.    //System.out.println(student.getFirstname());   
  25.    //System.out.println(student.getLastname());   
  26.   }   
  27.     
  28.  }