Spring中Dao 的支持类可以有好多,如: JdbcDaoSupport , HibernateDaoSupport ,JdoDaoSupport等,下面对最常用的HibernateDaoSupport与JdbcDaoSupport做一小总结:
1、借助类JdbcDaoSupport的简约化实现:
借助这个类不需要HIbernate框架,也不需要有ORM的对象关联映射。但它和HibernateDaoSupport很类似,有JdbcTemplate来实现增、删、改、查操作。
public class PersonDaoJdbcTest { public static void main(String[] args) throws Exception { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); PersonDao pd=(PersonDao) ctx.getBean("persondao"); pd.createPerson(new PersonBean("abdaslf",34)); System.out.println(pd.findPersonsByName("yan")); System.out.println("finished!"); } } public class PersonDaoJdbc extends JdbcDaoSupport implements PersonDao{ public void createPerson(PersonBean p) throws Exception { Object[] args={p.getName(),new Integer(p.getAge())}; this.getJdbcTemplate().update("insert into person(p_name,p_age) values(?,?)", args); } public void deletePerson(int id) throws Exception { Object [] args={new Integer(id)}; this.getJdbcTemplate().update("delete from person where id=?",args); } } public List findPersonsByName(String name) throws Exception { // TODO Auto-generated method stub return this.getJdbcTemplate().query("select * from person where p_name like '%"+name+"%'", new PersonRowMapper()); }
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入DataSource,如下:
applicationContext.xml:
<!-- 数据源配置 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property> <property name="url" value="jdbc:mysql://localhost:3306/persondatabase"> </property> <property name="username" value="root"></property> <property name="password" value="123456"></property> </bean> <bean id="persondao" class="yan.dao.jdbc.PersonDaoJdbc"> <!-- 为dao实例注入所需的DataSource --> <property name="dataSource"> <ref local="dataSource"/> </property> </bean>
Spring负责链接数据库,程序无须访问具体的Statement和PreparedStatement,Spring负责创建Statement对象。DAO部分通过JdbcTemplate的方法,就可完成绝大部分数据库的CRUD操作,通过RowMapper接口的支持,可以将ResultSet自动包装成值对象。通过Spring的DaoSupport来实现DAO,程序更加简洁、同一。
2、借助类HibernateDaoSupport的简约化实现:
借助这个类必须需要HIbernate框架,用到HIbernate里提供的HibernateTemplate模板,从而进行增、删、改、查操作。
TestA.java:
public class TestA extends HibernateDaoSupport{
public void test(){
HibernateTemplate template = this.getHibernateTemplate();
List list = template.find("from User");
for(int i=0;i<list.size();i++){
User u = (User)list.get(i);
System.out.println(u.getUserid()+" "+u.getEmail());
}
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
TestA t = (TestA)ctx.getBean("testa");
t.test();
}
}
需要在Spring的配置文件applicationContext.xml中控制反转用到连接数据库中的类是注入SessionsFactory,如下:
applicationContext.xml:
<bean id="testa" class="com.sun.demo.TestA">
<property name="sessionFactory">
<ref bean="mySessionFactory"/>
</property>
</bean>