spring连结数据库(jdbc , hibernate)

来源:互联网 发布:电脑软件安装 编辑:程序博客网 时间:2024/05/16 04:19

一Spring的数据访问哲学

 

    Spring的目标之一就是遵循Oo原则中的,面向接口编程原则,Spring的数据访问也是如此。

 

1 配置数据源

     (1) 使用JDBC驱动的数据源

              Spring里能够配置的最简单的数据源是通过JDBC驱动定义的,Spring提供了两个这样的数据源。

              DriverManagerDataSource 在每个连接请求时都新建一个连结。

              SingleConnectionDataSource 在每个连接的时候都返回同一个连结。

 

     (2) 使用JDBC模板

 

              Spring的jdbc模板能够承担资源管理和异常处理的工作,从而简化我们的jdbc代码。让我们只需编写从数据库

       读写数据所必须的代码。以下为3个模板类:

            a) JdbcTemplate : Spring 里最基本的JDBC模板,利用JDBC和简单索引参数查询提供对数据库的简单访问。

 

            b) NameParameterJdbcTemplate 能够在执行查询时把值绑定到SQL里的参数名称,而不是使用索引参数。

            c)SimpleJdbcTemplate

 

 

   (3) 实例代码

 


   //配置数据源

  //

 //

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  
   <property name="driverClassName">
     <value>com.mysql.jdbc.Driver</value>
   </property>
  
   <property name="url">
     <value>jdbc:mysql://localhost:3306/login</value>
   </property>
  
   <property name="username">
     <value>root</value>
   </property>
  
   <property name="password">
     <value>root</value>
   </property>
  
   </bean>

   //配置jdbc模板类

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
   <property name="dataSource" ref="dataSource"></property>
   </bean>

     //建立DAO类

   <bean id="roleDAO" class="cn.bupt.duming.pojo.RoleDAO" >
     <property name="jdbcTemplate">
      <ref local="jdbcTemplate"/>
     </property>
   </bean>  

 

 

  实体类  Role  如下:

 

   package cn.bupt.duming.pojo;

public class Role {

     private int id ;
     
     private String name ;
     
     public Role() {
       
    }

    public Role(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }
   
    public void setId(int id) {
        this.id = id;
    }
   
    public String getName() {
        return name;
    }
   
   
    public void setName(String name) {
        this.name = name;
    }
         
}

   RoleDAO 类

 

package cn.bupt.duming.pojo;

import java.sql.Types;

import org.springframework.jdbc.core.JdbcTemplate;

public class RoleDAO {

    private JdbcTemplate jdbcTemplate;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
   
    public void insertRole(Role role){
       
          String sql="insert into role values(?,?)";
            Object[] params=new Object[]{
                     role.getId() ,
                     role.getName()
            };
            int[] types=new int[]{
                    Types.INTEGER ,
                    Types.VARCHAR
            };
            this.getJdbcTemplate().update(sql,params,types);
             
    }   
   
}

 

   测试代码如下:

  BeanFactory factory = new XmlBeanFactory(
                 new FileSystemResource("applicationContext.xml")) ;
       
        RoleDAO roleDAO = (RoleDAO) factory.getBean("roleDAO") ;
        Role role= new Role() ;
        role.setId(333) ;
        role.setName("duming04") ;
        roleDAO.insertRole(role) ;

 

二 spring 结合 hibernate

      1 使用hibernate模板

         <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
          <property name="sessionFactory" ref="sessionFactory"></property>        
        </bean>

 

         2 配置典型的hibernate映射文件

          <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">          
         <property name="dataSource" ref="dataSource"> 
         </property>           
         <property name="hibernateProperties">
               <props>
                  <prop key="hibernate.dialect">${hibernate.dialect}</prop>
               </props>  
         </property>                       
           <property name="mappingResources">
               <list>
                    <value>cn/bupt/duming/vo/Student.hbm.xml</value>   此句完成spring到hibernate得映射                  
               </list>          
           </property>   
    </bean>

 

         3  设置数据源

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 
    <property name="driverClassName">
      <value>com.mysql.jdbc.Driver</value>
    </property>
  
    <property name="url">
      <value>jdbc:mysql://localhost:3306/login</value>
    </property>
  
    <property name="username">
      <value>root</value>
    </property>
  
    <property name="password">
      <value>root</value>
    </property>
 </bean>

 

          4 学生操作数据库类DAO 接口

public interface StudentDAO {
 
    public void saveStudent(Student student) throws Exception;
}

 

   5 DAO实现类

public class StudentDAOImpl implements StudentDAO {

    private HibernateTemplate hibernateTemplate ;
   
     public HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }

    public StudentDAOImpl(){
         
     }        
    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public void saveStudent(Student student) throws Exception {
        this.getHibernateTemplate().saveOrUpdate(student) ;       
    }
}

 

 6 测试类

ApplicationContext ctx = new FileSystemXmlApplicationContext(
        "E:/programme/jsp/HibernateDemo2/src/applicationContext.xml");
    //从工厂获得Knight
    StudentDAOImpl studentDAOImpl = (StudentDAOImpl)ctx.getBean("studentDao") ;
          Student student = new Student() ;
          student.setId(11) ;
          student.setName("duming") ;
       try {
        studentDAOImpl.saveStudent(student);



三 利用Spring提供的DAO支持类

1 建立基于HIbernate的DAO

 

   Spring提供了HibernateDaoSupport ,它能够让我们把会话bean直接装配到dao类。代码如下:

 

   //代码中不需要提供 hibernateTemplate  模板类

    public class StudentDAOSupport extends HibernateDaoSupport implements StudentDAO{

    public void saveStudent(Student student) throws Exception {
        // TODO Auto-generated method stub
        super.getSession().save(student) ;
    }

    public void updateStudent(Student student) throws Exception {
        // TODO Auto-generated method stub
        String hql = "update Student set name = ? where id =?" ;
        Query q = super.getSession().createQuery(hql) ;
        q.setString(0, student.getName()) ;
        q.setInteger(1, student.getId()) ;
        q.executeUpdate() ;   
    }   
}

 

2 修改后的hibernateSupport配置文件

  <bean id="hibernateSupport" class="cn.bupt.duming.db.StudentDAOSupport">
       <property name="sessionFactory" ref="sessionFactory">  
       </property>   
    </bean>

 

 

3 测试类代码

    StudentDAOSupport studentSupport = (StudentDAOSupport)ctx.getBean("hibernateSupport") ;
          Student student = new Student() ;
          student.setId(11) ;
          student.setName("duming is king") ; 
           studentSupport.updateStudent(student) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击