目录
1.注入属性-内部 bean
(1)一对多关系:部门和员工
(2)在实体类之间表示一对多关系
(3)在Spring 配置文件中进行配置
2.注入属性-级联赋值
(1)第一种写法类似外部bean注入
(2)第二种写法:
因为是先创建对象,get拿到对象再赋值了,这才是级联赋值
1.注入属性-内部 bean
前提引入:数据库表与表之间有着不同的关系【一对多,一对一,多对多】
(1)一对多关系:部门和员工
一个部门可以有多个员工,一个员工属于一个部门
(2)在实体类之间表示一对多关系
步骤:首先新建一个bean包,专门做以上操作
在bean包中,我们创建两个类
一个是Department 部门类,代码如下:
package com.lbj.spring5.bean;/*** 部门类*/
public class Department {private String dname;public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return "Department{" +"dname='" + dname + '\'' +'}';}
}
一个是Employee 员工类,代码如下:
package com.lbj.spring5.bean;/*** 员工类*/
public class Employee {private String ename;private String gender;public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;}//简单写一个测试方法public void add(){System.out.println(ename+"::"+gender+"::"+department);}
}
目前两个类并没有关系,需要表示他们之间的关系
现在,一个部门里面有多个员工,问题是:我们如何表示"多个"?
办法:用一个集合表示
操作:员工表示所属部门,使用对象类型属性进行表示
代码如下:
package com.lbj.spring5.bean;/*** 员工类*/
public class Employee {private String ename;private String gender;//员工属于某一个部门,使用对象形式表示private Department department;public void setDepartment(Department department) {this.department = department;}public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;}//简单写一个测试方法public void add(){System.out.println(ename+"::"+gender+"::"+department);}
}
(3)在Spring 配置文件中进行配置
为了便于区分,我们再次创建一个新的xml文件,bean3.xml
在bean3.xml中完成Department和Employee的操作
而且,因为上面的员工类和部门类 存在内部类的关系,接下来我们就在xml文件中实现 注入内部 bean
方法:在一个bean里面可以嵌套再定义另外一个对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--内部bean--><bean id="employeee" class="com.lbj.spring5.bean.Employee"><!--设置两个普通的属性--><property name="ename" value="杰克"></property><property name="gender" value="男"></property><!--设置对象的类型属性,使用的是内部嵌套的方法--><property name="department"><bean id="department" class="com.lbj.spring5.bean.Department"><property name="dname" value="后台部门"></property></bean></property></bean></beans>
在TestBean测试类中进行测试:
package com.lbj.spring5.testdemo;import com.lbj.spring5.bean.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBean {@Testpublic void testBean3(){//1.加载spring配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean3.xml");//2.获取配置创建的对象,通过context得到对象Employee employee=context.getBean("employeee", Employee.class);//4.通过employee调用add()方法employee.add();}
}
测试结果:
2.注入属性-级联赋值
(1)第一种写法类似外部bean注入
其实第一步我们做的内部嵌套,注入内部 bean 就是一种 级联赋值
为了方便起见,我们再次新建一个新的bean4.xml配置文件来进行 级联赋值 操作【类似外部bean注入】
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--注入属性-级联赋值--><bean id="employeee" class="com.lbj.spring5.bean.Employee"><!--设置两个普通的属性--><property name="ename" value="杰克"></property><property name="gender" value="男"></property><!--前两个属性没变化,第三个属性有变化--><property name="department" ref="department"></property></bean><bean id="department" class="com.lbj.spring5.bean.Department"><property name="dname" value="后台部门"></property></bean>
</beans>
测试效果:
(2)第二种写法:
员工类中有三个属性,ename和gender都属于字符串类型的属性
然而department是一个对象,这个对象的属性名字是dname
department.dname表示向department对象中设置dname属性的值
写完后我们发现,红色框框内是报错的
为什么会报错呢?
因为现在要向Employee类的department对象中设置值,那么这个department对象是不是要先得到才可以去用
解决:需要生成department的get方法
报错消失:
测试结果: