applicationContext.xml
<!-- 加载db.properties配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 开启注解扫描 @Respostory @Service @Controller-->
<context:component-scan base-package="brooker"/>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 加载连接池 -->
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<value>
hibernate.show_sql=true
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.format_sql=true
</value>
</property>
<!-- 加载注解类 -->
<property name="packagesToScan">
<list>
<value>brooker.domain</value>
</list>
</property>
</bean>
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
User
@Entity
@Table(name="t_user",catalog="sshannotation")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private int age;
UserDao
@Repository("userDao")
public class UserDao extends HibernateDaoSupport implements IUserDao {
/**
* 如何在dao中得到HibernateTemplate对象?
* 设置父类的SessionFactory
* UserDao的父类HibernateDaoSupport,会帮助我们根据SessionFactory来得到HibernateTemplate
* @param sessionFactory
*/
@Autowired
@Qualifier("sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(user);
}
@Override
public User findByid(int id) {
// TODO Auto-generated method stub
return this.getHibernateTemplate().get(User.class, id);
}
UserService
@Service
@Transactional
public class UserService implements IUserService {
@Autowired
@Qualifier("userDao") //相当于获取UserDao中的@Repository("userDao")
private IUserDao userDao;
@Override
public User findByid(int id) {
// TODO Auto-generated method stub
return userDao.findByid(id);
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
userDao.add(user);
}
UserAction
@Controller
@Scope("prototype")
@Namespace("/") // <package namespace="">
@ParentPackage("struts-default") // <package extends="">
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Autowired
@Qualifier("userService")
private IUserService userService;
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
// <action name="user_add"><result name="success">/success.jsp</result>
@Action(value="user_add",results={@Result(name="success",location="/success.jsp")})
public String add() {
userService.add(user);
return SUCCESS;
}
}
延迟加载中解决no session问题:
在web.xml中的struts2配置之前配置openSessionInView
<!-- openSessionInViewFilter -->
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>