Spring使用HibernateDaoSupport、HibernateTemplate和JdbcTemplate实现CURD

spring提供两种方式操作数据库,一种就是jdbc另一种就是hibernate。

而Hibernate又分为两种方式 HibernateDaoSupport和HibernateTemplate(下文简写hds和ht)

  • HibernateTemplate

没有HibernateDaoSupport的情况下,如果dao层想要操作数据库就需要dao类有HibernateTemplate成员对象和HibernateTemplate的setter方法,当然在变量上使用注解可以省略setter方法,然后在配置文件中向dao类注入ht,然而使用ht前需要先向ht中注入sessionFactory。

/*** 
 * hibernateTemplate的转配模式 
 */  
public class CustomerDaoImpl implements CustomerDao {  
    // 设置hibernateTemplate属性  
    private HibernateTemplate hibernateTemplate;  

    // 必须设置set方法  
    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {  
        this.hibernateTemplate = hibernateTemplate;  
    }  

    // 插入方法  
    @Override  
    public void insert(Customer entity) {  
        hibernateTemplate.save(entity);  
    }  

    // 删除方法(删除实体对象)  
    @Override  
    public void delete(Customer entity) {  
        hibernateTemplate.delete(entity);  

    }  

    // 删除方法,按id删除  
    @Override  
    public void deleteById(Serializable id) {  
        hibernateTemplate.delete(this.selectById(id));  
    }  

    // 查询所有记录  
    @Override  
    public List<Customer> selectAll() {  
        // TODO Auto-generated method stub  
        List<Customer> entities = hibernateTemplate.find("from Customer");  
        return entities;  
    }  

    // 按照id查找记录  
    @Override  
    public Customer selectById(Serializable id) {  
        // TODO Auto-generated method stub  
        List<Customer> entitise = hibernateTemplate  
                .find("from Customer where id=" + id);  
        if (entitise.size() > 0) {  
            Customer entity = entitise.get(0);  
            return entity;  
        }  
        return null;  
    }  

    // 更新方法  
    @Override  
    public void update(Customer entity) {  
        // TODO Auto-generated method stub  
        hibernateTemplate.update(entity);  
    }  

}  

XML相关配置如下:

<context:property-placeholder location="jdbc.properties" />  

<!-- c3p0数据源 -->  
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">  
    <!-- 驱动程序 -->  
    <property name="driverClass">  
        <value>${jdbc.driverClass}</value>  
    </property>  

    <!-- 连接的url地址 -->  
    <property name="jdbcUrl">  
        <value>${jdbc.url}</value>  
    </property>  

    <!-- 连接的用户名 -->  
    <property name="user">  
        <value>${jdbc.user}</value>  
    </property>  

    <!-- 连接的密码 -->  
    <property name="password">  
        <value>${jdbc.password}</value>  
    </property>  

    <!-- 最大池数 -->  
    <property name="maxPoolSize">  
        <value>${c3p0.pool.max}</value>  
    </property>  

    <!-- 最小池数 -->  
    <property name="minPoolSize">  
        <value>${c3p0.pool.min}</value>  
    </property>  
    <!-- 默认初始化的池数 -->  
    <property name="initialPoolSize">  
        <value>${c3p0.pool.init}</value>  
    </property>  
</bean>  

<bean id="sessionFactory"  
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
   <!-- 设置数据源 -->  
   <property name="dataSource" ref="dataSource" />  
   <!-- 属性设置 -->  
   <property name="hibernateProperties">  
       <props>  
           <prop key="hibernate.show_sql">${hibernate.show_sql}
           </prop>  
           <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  
           </props>  
    </property>  
    <!-- 映射文件配置 -->  
    <property name="mappingResources">  
        <list>  
            <value>cn/csdn/domain/Customer.hbm.xml</value>  
        </list>  
</property>  

</bean>  


<!-- hibernate模板 -->  
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">  
    <property name="sessionFactory" ref="sessionFactory" />  
</bean>

<!-- dao的操作的bean -->  
<bean id="customerDaoImpl" class="cn.csdn.dao.CustomerDaoImpl">  
    <!-- 注入依赖模板 -->  
    <property name="hibernateTemplate" ref="hibernateTemplate" />  
</bean>  
  • HibernateDaoSupport

使用HibernateDaoSupport的情况:dao类继承HibernateDaoSupport后就只需向dao类中注入sessionFactory, hds会判断如何hibernateTemplate属性为空,就使用注入的sessionFactory创建一个HibernateTemplate 然后通过getHibernateTemplate()方法获取HibernamteTemplate,使用HibernaTemplate的方法操作数据库。

  • JdbcTemplate

这种方法适合那些不喜欢hibernate的save,delete等方法,喜欢自己写。有时候jdbcTemplate查询的效率会很高。这可能是跟jdbc有关吧。

public class JdbcTemplateCreate {  

    //获取数据源(设置为static 是因为该jdbc多次被调用)  
    static JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());  

    public static void main(String[] args) {  
        User user = new User();   
        user.setId(10);  
        user  = query(8);  
        if (user == null) {  
            System.out.println("查询失败");  
        }else {  
            System.out.println("查询成功");  
        }  
    }  

    //插入,增加  
    public static void insert(User user) {  
        String sql = "insert into user(name,birthday,money)values(?,?,?)";  
        Object args[] = {user.getName(),user.getBirthday(),user.getMoney()};  
        int temp = jdbc.update(sql, args);  
        if (temp > 0) {  
            System.out.println("插入成功!");  
        }else{  
            System.out.println("插入失败");  
        }  
    }  

    //删除  
    public static void delete(int id) {  
        String sql = "delete from user where id = ?";  
        Object args[] = new Object[]{id};  
        int temp = jdbc.update(sql,args);  
        if (temp > 0) {  
            System.out.println("删除成功");  
        }else {  
            System.out.println("删除失败");  
        }  
    }  

    //更新  
    public static void update(User user) {  
        String sql = "update user set name = ? where id = ?";  
        Object args[] = new Object[]{user.getName(),user.getId()};  
        int temp = jdbc.update(sql,args);  
        if (temp > 0) {  
            System.out.println("更新成功");  
        }else {  
            System.out.println("更新失败");  
        }  

    }  

    //查询  
    public static User query(int id) {  
        String sql = "select * from user where id = ?";  
        Object args[] = new Object[]{id};  
        //使用spring的JdbcTemplate查询数据库,获取List结果列表,数据库表字段和实体类自动对应,可以使用BeanPropertyRowMapper。注意:自动绑定,需要列名称和Java实体类名字一致
        Object  user = jdbc.queryForObject(sql,args,new BeanPropertyRowMapper(User.class));  
        return (User)user;  
    }  

}  

XML配置如下:

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

在类中set方法JdbTemplate就可以了,spring中的配置跟sessionFactory基本一样。个人来说还是喜欢JdbTemplate,原因一方面是能熟悉数据库语言,另一方面能快速注入配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值