`
2277259257
  • 浏览: 515390 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring----整合JDBC / Hibernate-----增删改查

 
阅读更多

spring对数据库访问的支持:
1、对DAO提供以下支持:
 一致的异常处理DataAccessException
 一致的DAO抽象类DaoSupport、Template


2、整合JDBC

 定义数据库连接池dataSource;
 不继承JdbcDaoSupport类时,手动在xml文件中将dataSource属性引入到访问数据库bean组件,在DaoImp类中给JdbcTemplate注入dataSource后使用;
 继承JdbcDaoSupport类,可直接使用JdbcTemplate)
   使用的API:
 jdbcDaoSupport------用于提供编写DAO组件的支持
 jdbcTemplate--------用于增删改查操作
 update()------------增删改操作
 query()、queryForObject()、queryForInt等-----查询操作
 execute()-----------其他语句,如:建表、修改表结构语句
 其他操作------------批处理、返回自动增长主键值
    XML配置:
 定义连接池<bean  id="dataSource"/>-------->将dataSource注入给所有DAO组件 

 

例子:
---》导入架包:commons-dbcp.jar连接池、commons-collections.jar、commons-pool.jar(连接池组件:管理connection对象的创建、销毁和控制其数量)
---》创建数据库
---》在applicationContext.xml中配置连接池(dataSource以<bean>组件的形式配置):包括连接池的定义 + 属性注入到调用bean组件
     注意:只能写dataSource ,别的名字不行
 <bean  id="jdbcUserDao"  class="JdbcUserDao"> 
   <property  name="dataSource"  ref="dataSource"> </property>
 </bean>
---》接口UserDao的实现类(此类需要访问数据库)中注入dataSource连接池:
 1、不继承JdbcDaoSupport类的实现方法(用set方法注入dataSource):
     public class JdbcUserDao  implements  UserDao{
     private  JdbcTemplate  template;
  public  void  setDataSource(DataSource  dataSource){
     template = new  JdbcTemplate(dataSource);
  }

  public  void save(User user){
     String  sql="insert into d_user(email,name,password,code,time,ip) values(?,?,?,?,?,?)";
     template.update(sql,new Object[]{user.getEmail(),....user.getIp()});
  }
    .
    .
    .
     }
 
 <bean  id="jdbcUserDao"  class="JdbcUserDao"> 
   <property  name="dataSource"  ref="dataSource"> </property>
 </bean>

 2、继承JdbcDaoSupport类的实现方法(Spring框架可以帮助我们完成dataSource的注入):
    public class JdbcUserDao  extends JdbcDaoSupport  implements  UserDao{
     public  void save(User user){
     String  sql="insert into d_user(email,name,password,code,time,ip) values(?,?,?,?,?,?)";
     this.getJdbcTemplate().update(sql,new Object[]{user.getEmail(),....user.getIp()});
  }
  public  void update(User user){
     String  sql="update d_user set email=?,name=?,password=?,code=?,time=?,ip=? where id=?";
     this.getJdbcTemplate().update(sql,new Object[]{user.getEmail(),....user.getIp()});
  }
  public  void deleteById(int id){
     String  sql="delete from  d_user  where  id=?";
     this.getJdbcTemplate().update(sql,new Object[]{id});
  }


  public  User findById(int id){
     String  sql="select * from  d_user  where  id=?";
     return  (User)this.getJdbcTemplate().queryForObject(sql,new Object[]{id},new UserMapper());
  }
  public  List<User> findAll(){
     String  sql="select * from  d_user";
     List    list=this.getJdbcTemplate().query(sql,new UserMapper());
     return  list;
  }
  public  int  count(){
     String  sql="select count(*) from  d_user";
     return  this.getJdbcTemplate().queryForInt(sql);
  }
    }
 //查询方法需要额外定义映射类:完成结果集字段值与User属性之间的映射关系
 //UserMapper实现RowMapper接口,覆盖方法mapRow完成从结果集中解析出结果做操作
  public  class UserMapper  implements  RowMapper{
     public  Object  mapRow(ResultSet rs, int index) throws SQLException{
   User  user = new User();
   user.setId(rs.getInt("id"));
   user.setEmail(rs.getString("email"));
   user.setName(rs.getString("name"));
    .
    .
    .
   return  user;
     }
  //改进版:
     private  static final String ID="id";
     public  Object  mapRow(ResultSet rs, int index) throws SQLException{
   User  user = new User();
   user.setId(rs.getInt(ID));
   if(rs.getString("email") != null){ //为防止rs.getString(XXX)取出null值后直接放入user,加if判断
      user.setEmail(rs.getString("email"));
   }
   user.setName(rs.getString("name"));
    .
    .
    .
   return  user;
     }

  }

 

 

3、整合Hibernate

定义数据库连接池dataSource;定义sessionFactory;将dataSource、表映射javaBean.xml、hibernateProperties引入到sessionFactory中;
 不继承HibernateDaoSupport类时,手动在xml文件中将sessionFactory属性引入到访问数据库bean组件,在DaoImp类中给HibernateTemplate注入sessionFactory后使用;
 继承HibernateDaoSupport类,可直接使用HibernateTemplate
   使用的API:
 HibernateDaoSupport------提供编写DAO组件的支持
 HibernateTemplate--------提供了增删改查操作
 save()-------------------保存
 update()-----------------更新
 delete()-----------------删除
 find()-------------------查询
 使用HibernateDaoSupport提供的this.getSession()获取Session对象-------分页查询
    XML配置:
 首先配置连接池dataSource----->配置SessionFactory------>将SessionFactory注入给所有DAO组件
 
例子:
------》倒入Hibernate架包(框架整合时,会遇到jar包冲突的问题;Spring对Hibernate的整合是在JDBC之上的)
------》配置数据源dataSource:定义dataSource <bean>组件
------》配置SessionFactory:定义sessionFactory <bean>组件;
       <bean  id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <property  name="dataSource" ref="dataSource"></property> ----引入连接池属性
          <property  name="mappingResources">    ----引入映射文件属性
                  <list>
                       <value>...User.hbm.xml  </value>
                 </list>
         </property>

         <property  name="hibernateProperties">   ----引入配置Hibernate配置
                 <props>
                        <prop  key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                       <prop  key="hibernate.show_sql">true</prop>
                       <prop  key="hibernate.format_sql">true</prop>
               </props>
         </property>
  </bean>
 
------》配置映射文件 + 映射文件对应的javaBean类(Hibernate的标配)
------》接口UserDao的实现类(此类需要访问数据库)中:
1、不继承HibernateDaoSupport类的实现方法(用set方法注入SessionFactory):
     public class JDBCUserDao  implements  UserDao{
     private  HibernateTemplate  template;
  public  void  setSessionFactory(SessionFactory  sessionFactory){
     template = new  HibernateTemplate(sessionFactory);
  }

  public  void save(User user){
     template.save(user);
  }
    .
    .
    .
     }

 <bean  id="hibernateUserDao"  class="HibernateUserDao">
    <property  name="sessionFactory"  ref="sessionFactory"></property>
 </bean>
2、继承HibernateDaoSupport类的实现方法(Spring框架可以帮助我们完成SessionFactory的注入):
 public class HibernateUserDao  extends HibernateDaoSupport  implements  UserDao{

     public  void save(User user){
     this.getHibernateTemplate().save(user);
  }
     public  void update(User user){
     this.getHibernateTemplate().update(user);
  }
     public  void deleteById(int id){
     User  user = findById(id);
     this.getHibernateTemplate().delete(user);
  }
     public  User findById(int id){
     String  hql="from  d_user  where  id=?";
     List    list=this.getHibernateTemplate().find(hql, new Object[]{id});
     if(!list.isEmpty()){
   return  (User)list.get(0);
     }
     return  null;
  }
     public  List<User> findAll(){
     String  hql="from  d_user";
     return  this.getHibernateTemplate().find(hql);
  }
     public  int  count(){
     String  hql="select count(*) from  d_user";
     List    list=this.getHibernateTemplate().find(hql);
     return  Integer.valueOf(list.get(0).toString());
  }
 }

分享到:
评论

相关推荐

    Spring与Hibernate整合实例(博客用户登录增删改查)

    在这个“Spring与Hibernate整合实例(博客用户登录增删改查)”中,我们将探讨如何将这两个强大的框架——Spring和Hibernate——结合起来,以实现一个博客系统的用户管理功能,包括用户登录、注册、信息修改以及数据...

    Spring+Hibernate工具类所有增删改查

    标题"Spring+Hibernate工具类所有增删改查"暗示了这是一个集合了Spring和Hibernate框架中用于基本数据库操作的工具类库。这些工具类通常包含了一系列静态方法,用于执行常见的数据库CRUD(创建、读取、更新、删除)...

    Spring+Hibernate 增删改查等基本操作

    在"Spring+Hibernate 增删改查等基本操作"这个主题中,我们主要探讨的是如何整合这两个框架来实现数据持久化。以下是一些关键的知识点: 1. **Spring**: - **依赖注入(DI)**:Spring的核心特性之一,通过XML...

    spring_mvc_+hibernate_实现对学生信息的增删改查功能

    ### 使用Spring MVC与Hibernate实现学生信息管理系统的增删改查功能 #### 一、项目背景与目标 在当前的工作环境中,快速掌握并应用新技术是非常重要的技能之一。本案例旨在通过结合Spring MVC与Hibernate来实现一...

    springmvc+hibernate+spring学生表增删改查.zip

    该压缩包文件"springmvc+hibernate+spring学生表增删改查.zip"涉及到的是一个基于Java技术栈的Web应用程序开发示例,主要利用Spring MVC、Hibernate和Spring框架来实现学生信息表的CRUD(创建、读取、更新、删除)...

    Spring3+Hibernate4+Struts2 jar包 SSH框架

    spring 3.2.0+hibernate ...可以实现最基本的对数据库的增删改查。 文件上传,拦截器,操作的数据库是Mysql, 如果操作的数据库是oracle或者是其他, 将mysql-connector-java-5.1.20-bin.jar 改为相应的驱动包即可。

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    9. **单元测试与集成测试**:为了确保封装的功能正确无误,项目可能包含了一些测试类,使用JUnit或其他测试框架对BaseDao的增删改查及分页功能进行验证。 通过以上知识点的介绍,我们可以看出这个项目提供了一个...

    Maven+spring+ struts2+ Ibatis+mysql整合增删改查

    Ibatis与MySQL的结合,使得开发者能够方便地执行SQL查询,实现数据的增删改查操作。 整合这五个技术的关键在于配置。在Maven的pom.xml文件中,需要定义所有依赖项,确保所有组件的版本兼容。在Spring的配置文件中,...

    SSH整合代码附单表增删改查

    在“SSH整合代码附单表增删改查”项目中,用户.sql文件很可能包含了数据库的初始脚本,用于创建单表的结构和可能的数据填充。在实际开发中,开发者会根据这个脚本来建立与Hibernate实体类对应的数据库表。通过Struts...

    springboot 入门以及数据库的增删改查

    在本教程中,我们将深入探讨SpringBoot入门及其与MySQL数据库的整合,进行基础的增删改查操作。 首先,SpringBoot的核心优势在于其自动配置特性。通过引入starter-pom依赖,如`spring-boot-starter-web`和`spring-...

    SSH三大框架登录小实例,以及spring的登录增删改查实例测试

    在这个实例中,我们将探讨如何利用这三个框架实现一个简单的登录功能,并通过Spring进行登录、增、删、改、查的完整操作。 首先,Struts2作为MVC模式中的Controller层,负责处理用户请求并转发到相应的Action。在...

    springMVC+hibernate+spring4.3 jar包整合

    5. 实现业务逻辑:在Service层使用Spring的依赖注入获取SessionFactory,通过Session进行数据库操作,利用Hibernate的CRUD方法完成数据的增删改查。 6. 创建控制器:在Spring MVC的Controller类中,定义处理HTTP...

    Struts+Spring+Hibernate框架样例+数据库(含增、删、改、查)

    这个"Struts+Spring+Hibernate框架样例+数据库(含增、删、改、查)"的项目,旨在提供一个完整的示例,帮助开发者理解和实践这三大框架的集成使用以及与数据库的交互。 1. **Struts框架**:Struts是基于MVC(Model-...

    SSH案例(增删改查)

    在实际的"SSH案例(增删改查)"项目中,开发者可能还使用了JDBC或者Spring的JdbcTemplate进行数据库交互,这些工具可以帮助简化数据库操作。同时,为了增强用户体验,界面可能使用了JSP(Java Server Pages)和HTML...

    Spring整合Hibernate

    // 其他增删改查方法... } ``` 通过这种方式,Spring和Hibernate的整合使我们可以轻松地处理数据库操作,同时保持代码的简洁和可测试性。这个网上书城的例子就是这样一个基础的应用,它演示了如何在Spring中配置和...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    此外,Hibernate提供了一套Session API,用于管理事务和对象的状态,方便进行数据的增删改查。 **Spring** 是一个全面的企业级应用开发框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问/集成...

    struts2.1.8 + spring2.5.6 + hibernate3.3.2整合

    ### Struts2.1.8 + Spring2.5.6 + Hibernate3.3.2整合... - 编写简单的增删改查操作来测试整合是否成功。 通过以上步骤,可以实现Struts2、Spring和Hibernate的整合,为开发复杂的Java Web应用提供强大的技术支持。

    基于SSH2的增删改查及分页完整项目

    这个"基于SSH2的增删改查及分页完整项目"提供了一个全面的示例,帮助开发者理解如何在实际应用中实现数据的增、删、改、查操作以及分页功能。 **Struts2** 是一个MVC(Model-View-Controller)框架,负责处理HTTP...

    struts2+hibernate增删改查

    在"struts2+hibernate增删改查"的应用中,我们将看到以下关键知识点: 1. **整合配置**:首先,需要配置Struts2和Hibernate的整合,包括在`struts.xml`中配置Action,指定Action的类和结果视图;在`hibernate.cfg....

    springboot集成hibernate实现增删改查

    在本教程中,我们将探讨如何将Spring Boot与Hibernate整合,以实现数据库的增删改查操作。Spring Boot简化了配置,而Hibernate则作为强大的对象关系映射(ORM)框架,帮助我们处理数据库交互。让我们逐步解析这个...

Global site tag (gtag.js) - Google Analytics