Spring整合hibernate

今天学习了Spring整合hibernate的简单应用:

2、案例(Springhibernate整合使用到hibernate的核心配置文件hibernate.cfg.xml

2.1、创建User

 public class User {
private Integer id;
private String uname;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
private String password;
}

2.2、创建user.hbm.xml映射文件

 <hibernate-mapping>
<class name="xb.cn.domain.User" table="user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="uname" />
<property name="password" />
</class>
</hibernate-mapping>

2.3、创建UserDao接口

 public interface UserDao {
public void save(User user);
public void update(User user);
public void delete(User user);
public User findById(Integer id);
public List<User> findAll();
}

2.4、创建UserDaoImpl实现类

//继承HibernateDaoSupport,会自动的生成模板,必须提供sessionFactory
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
/* //提供Hibernate模板
private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
*/
@Override
public void save(User user) {
this.getHibernateTemplate().save(user);
}


@Override
public void update(User user) {
this.getHibernateTemplate().update(user);
}


@Override
public void delete(User user) {
this.getHibernateTemplate().delete(user);
}


@Override
public User findById(Integer id) {
return this.getHibernateTemplate().get(User.class, id);
}


@SuppressWarnings("unchecked")
@Override
public List<User> findAll() {
return (List<User>) this.getHibernateTemplate().find("from User");
}

}


 

2.5、创建UserService接口

 public interface UserService {
public void saveUser(User user);
public void updateUser(User user);
public void deleteUser(User user);
public User findUserById(Integer id);
public List<User> findUserAll();
}

2.6、创建UserServiceImpl实现类

  public class UserServiceImpl implements UserService{
private  UserDao useDao;
public void setUseDao(UserDao useDao) {
this.useDao = useDao;
}
@Override
public void saveUser(User user) {
this.useDao.save(user);
}


@Override
public void updateUser(User user) {
this.useDao.update(user);
}


@Override
public void deleteUser(User user) {
this.useDao.delete(user);
}


@Override
public User findUserById(Integer id) {
return this.useDao.findById(id);
}


@Override
public List<User> findUserAll() {
return this.useDao.findAll();
}


}


 

2.7、在Spring的配置文件applicationContext.xml中配置相关信息

2.7.1、配置sessionFactory工厂

2.7.2、在sessionFactory工厂里加载Hibernate的核心配置文件

2.7.3UserDao需要用到模板,所以配置Hibernate模板

2.7.4、在hibernate模板里面添加sessionFactory,即通过工厂获得session,操作Dao

2.7.5、配置Dao

2.7.6、在配置的Dao里面添加需要的hibernate模板

2.7.7、配置Service

2.7.8、在配置的service里面添加需要使用到的Dao

2.7.9、配置事务管理器

2.7.10、在配置的事务管理器中添加要管理的对象,即sessionFactory

2.7.11、配置通知,增强事务

2.7.12、在配置的通知里面添加相应的方法,即可以理解为切点,即方法

2.7.13、配置切面

2.7.14、在配置切面里面,即把通知与切入点联系起来

 <!-- 加载properties文件 -->
<context:property-placeholder location="classpath:c3p0_db.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<!--1、 配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 1.1、配置数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 其他的一些配置 。注意:要使用hibernate的全属性名,如果hibernate.不要使用省略-->
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hbm2ddl.auto">update</prop>
<prop key="javax.persistence.validation.mode">none</prop>
<prop key=""></prop>
</props>
</property>
<!-- 配置映射文件 -->
<!-- 
mappingDirectoryLocations:设置目录,加载目录下所有的hbm.xml文件
例如:classpath:xb/cn/domain
mappingJarLocations:加载架包中的映射文件
mappingLocations:指定加载哪一些hbm.xml文件
例如:classpath:xb/cn/domain/user.hbm.xml
classpath:xb/cn/domain/*.hbm.xml,即加载这个包下的所有的.hbm.xml文件
mappingResources:直接加载src下的内容
例如:xb/cn/domain/user.hbm.xml
-->
<property name="mappingResources" value="xb/cn/domain/User.hbm.xml"></property>
</bean>

<!-- 配置Dao -->
<bean id="userDao" class="xb.cn.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置Service -->
<bean id="userService" class="xb.cn.service.impl.UserServiceImpl">
<property name="useDao" ref="userDao"></property>
</bean>
<!-- 事务管理 -->
<!-- 1、事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 2、通知,增强事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" />
<tx:method name="update*" />
<tx:method name="delete*" />
<tx:method name="find*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 3、切面,将切入点与通知关联 -->
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(*  xb.cn.service..*.*(..))" />
</aop:config>
</beans>



 

 

2.8、创建测试类

 public class TestApp {
@Test
public void demo1() {
User user = new User();
user.setUname("xuebiao");
user.setPassword("123456");
String xmlPath = "applicationContex.xml";
@SuppressWarnings("resource")
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
@SuppressWarnings("unused")
UserService userService = (UserService) applicationContext.getBean(
"userService", UserService.class);

System.out.println(userService.findUserById(1).getUname());

}
}

在上面的案例中我们还可以不需要使用Hibernate的核心配置文件,可以直接在applicationContext.xml文件里面直接配置替代原来的Hibernate.cfg.xml里面的内容。其方式如下:

注意记得这添加c3p0_db.properties文件。

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///ssh_data
jdbc.user=root
jdbc.password=123456

这便是刚接触的Spring整合hibernate的方式。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值