ssh之雇员管理系统(7)-spring可以启用注解的方式来配置属性+解决懒加载问题...

本文介绍了如何在Spring框架中使用注解方式配置Bean,包括如何在ApplicationContext中启用注解扫描,以及如何在实体类中使用@Resource注解。此外,还讨论了在使用一对多关系映射时如何解决懒加载问题,通过配置opensessioninview方法来优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六、spring可以启用注解的方式来配置属性

  1. 重新这样配置bean,这个是原先的employeeService

        <!-- 添加实现逻辑对象 -->
        <bean id="employeeService" class="com.wang.service.imp.EmployeeService">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>

    这个是配置后的

        <!-- 使用注解的方式配置逻辑对象 -->
        <bean id="employeeService" class="com.wang.service.imp.EmployeeService" />

    2.添加下面的话在ApplicationContext中启用注解

        
        <!--  启用注解扫描:-->
        <context:annotation-config />

    3. 在EmployeeService中添加@Resource,javax.annotation.Resource

    public class EmployeeService implements EmployeeServiceInter {
    
        @Resource
        private SessionFactory sessionFactory ;//这里的sessionFactory 必须和ApplicationContext中的bean对应上,名字相同
    
        public void setSessionFactory(SessionFactory sessionFactory) {
            System.out.println("使用注解的方式@Resource实现bean的调用");
            this.sessionFactory = sessionFactory;
        }

    4. 同样的方法 action也可以用注解的方式来配置bean

    ========================================================================================

1. 解决懒加载问题,以下先介绍下hibernate中关系映射问题

2. 我们增加一个部门Department,那么雇员-》部门就是多对一,部门-》雇员就是一对多的问题

  • Department.java
    package com.wang.domain;
    
    import java.util.Set;
    
    public class Department {
    
        private Integer id;
        private String name;
        
        //由于一个部门下面有很多雇员,所以这里用set集合
        private Set<Employee> emps;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Set<Employee> getEmps() {
            return emps;
        }
        public void setEmps(Set<Employee> emps) {
            this.emps = emps;
        }
    }
    View Code

     

  • Department.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     <hibernate-mapping package="com.wang.domain">
         <class name="Department" table="department">
         <!-- 主键策略 -->
         <id name="id" type="java.lang.Integer">
             <generator class="native" />
         </id>
         <property name="name" type="java.lang.String">
             <column name="name" length="32"></column>
         </property>
         
         <!-- 一对多的配置 -->
         <set name="emps">
             <key column="department_id"></key>
             <one-to-many class="com.wang.domain.Employee"/>
         </set>
         </class>
     </hibernate-mapping>
    View Code

     

  • Employee.hbm.xml中添加
         
         <!-- 多对一雇员到部门的配置 -->
         <many-to-one name="department" column="department_id" />
  • Employee.java中添加这个部门字段,并且实现他的set和get方法
    //employee->department
         private Department department;

3. 用spring提供opensessioninview的方法来解决懒加载

    <!--提供了opensessioninview的方法来解决懒加载  -->
    <filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4. 在页面出调用通过用之前的setattribute的loginuser即${loginuser.department.name}可将部门调出来

 

转载于:https://www.cnblogs.com/wang3680/archive/2013/05/14/3078007.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值