Spring使用HibernateDaoSupport、HibernateTemplate和JdbcTemplate实现CURD
来源:互联网 发布:手机淘宝里的兼职赚钱 编辑:程序博客网 时间:2024/05/22 01:31
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,原因一方面是能熟悉数据库语言,另一方面能快速注入配置。
- Spring使用HibernateDaoSupport、HibernateTemplate和JdbcTemplate实现CURD
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate详解
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- spring的HibernateDaoSupport、HibernateTemplate、jdbcTemplate的区别
- Spring整合hibernate:HibernateTemplate和HibernateDaoSupport实现数据库操作
- 百度java开发面试题(2011-12-XX)【转】
- 判断cxGrid是否获得焦点
- No Free Lunch
- 淘宝北京专场java面试题(2011-12-31)【转】
- 如何启用 Apache 的 PHP-FPM 多实例
- Spring使用HibernateDaoSupport、HibernateTemplate和JdbcTemplate实现CURD
- 每一个软件工程师必须做的几件事儿
- 001
- 差分放大电路的版图绘制
- 【公告】博客专家4月发布原创/翻译奖励发放
- [转]HTTP协议详解,你所不知道的
- 使用json-lib-2.4-jdk15转javabean,报net.sf.ezmorph.bean.MorphDynaBean转换异常
- Maven 集成Tomcat7插件
- 一个简单的jdbc连接封装