【Hibernate持续更新】映射组件关系
来源:互联网 发布:java按层次遍历二叉树 编辑:程序博客网 时间:2024/06/05 15:22
知识准备:hibernate将对象分为二种类型
1. 含有OID的对象:实体类型
2. 不含OID的对象:值类型
案例:客户和公司地址和家庭地址
声明:客户和地址是整体与部分的关系,在数据库中只需要建立一个表Users
第一步,创建表:
use db3;drop table if exists users;create table if not exists users(id int primary key auto_increment,name varchar(10),salary double,com_privince varchar(10),com_city varchar(10),com_area varchar(10),home_privince varchar(10),home_city varchar(10),home_area varchar(10));查看users表结构(desc user):
mysql> use db3;Database changedmysql> desc users;+---------------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(10) | YES | | NULL | || salary | double | YES | | NULL | || com_privince | varchar(10) | YES | | NULL | || com_city | varchar(10) | YES | | NULL | || com_area | varchar(10) | YES | | NULL | || home_privince | varchar(10) | YES | | NULL | || home_city | varchar(10) | YES | | NULL | || home_area | varchar(10) | YES | | NULL | |+---------------+-------------+------+-----+---------+----------------+9 rows in set (0.01 sec)
第二步:建立实体类并配置映射文件
User.java
package cn.lsh.web.hibernate.domain;public class User {private Integer id;//编号private String name;//姓名private Double salary;//薪水private Address comAddress;//公司地址private Address homeAddress;//家庭地址public User() {}public User(String name, Double salary) {super();this.name = name;this.salary = salary;}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 Double getSalary() {return salary;}public void setSalary(Double salary) {this.salary = salary;}public Address getComAddress() {return comAddress;}public void setComAddress(Address comAddress) {this.comAddress = comAddress;}public Address getHomeAddress() {return homeAddress;}public void setHomeAddress(Address homeAddress) {this.homeAddress = homeAddress;}}
User.java类所对应的映射文件:
User.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.lsh.web.hibernate.domain"> <class name="User" table="users" > <id name="id" column="ID" type="integer"> <generator class="native"/> </id> <property name="name" column="NAME" type="string"/> <property name="salary" column="SALARY" type="double"/> <!-- component专用于映射组件类型 --> <component name="comAddress" class="Address"> <property name="province" column="COM_PRIVINCE" type="string"/> <property name="city" column="COM_CITY" type="string"/> <property name="area" column="COM_AREA" type="string"/> </component> <component name="homeAddress" class="Address"> <property name="province" column="HOME_PRIVINCE" type="string"/> <property name="city" column="HOME_CITY" type="string"/> <property name="area" column="HOME_AREA" type="string"/> </component> </class> </hibernate-mapping>
Address.java
//部分方、无id属性,值类型public class Address {private String province;//省private String city;//市private String area;//区public Address(){}public Address(String province, String city, String area) {super();this.province = province;this.city = city;this.area = area;}//省略set/get方法}
需求1:保存客户和地址
第三步:建立ComponentDao.java(使用junit)
//添加客户@Testpublic void addUser(){Address comAddress = new Address("湖南省","长沙市","雨花区");Address homeAddress = new Address("湖南省","长沙市","望城区");User user = new User("王五",9000D);//设置整体和部分的关系user.setComAddress(comAddress);user.setHomeAddress(homeAddress);Session session = HibernateUtils.getSession();Transaction t = session.getTransaction();try{t.begin();session.save(user);t.commit();}catch(Exception e){e.printStackTrace();t.rollback();}finally{session.close();}}
</pre><pre>
需求2:更新客户和地址
//更新客户@Testpublic void updateUser(){Session session = HibernateUtils.getSession();Transaction t = session.getTransaction();try{t.begin();User user = (User)session.get(User.class, 2);user.getComAddress().setArea("白云区");user.getHomeAddress().setArea("花都区");session.save(user);t.commit();}catch(Exception e){e.printStackTrace();t.rollback();}finally{session.close();}}
需求3:删除客户和地址
//删除客户@Testpublic void deleteUser(){Session session = HibernateUtils.getSession();Transaction t = session.getTransaction();try{t.begin();User user = (User)session.get(User.class, 3);session.delete(user);t.commit();}catch(Exception e){e.printStackTrace();t.rollback();}finally{session.close();}}查询结果如下:
select * from users;
Hibernate关于映射组件关系(关键部分代码):
<!-- component专用于映射组件类型 --> <component name="comAddress" class="Address"> <property name="province" column="COM_PRIVINCE" type="string"/> <property name="city" column="COM_CITY" type="string"/> <property name="area" column="COM_AREA" type="string"/> </component> <component name="homeAddress" class="Address"> <property name="province" column="HOME_PRIVINCE" type="string"/> <property name="city" column="HOME_CITY" type="string"/> <property name="area" column="HOME_AREA" type="string"/> </component>
0 0
- 【Hibernate持续更新】映射组件关系
- hibernate 组件关联映射关系
- Hibernate关系映射——组件映射
- Hibernate基础------》关系映射---》组件映射(component)
- 10-hibernate组件关联关系映射
- Hibernate关系映射(6)_联合组件映射
- Hibernate教程09_关系映射之组件映射
- MongoDB 与 SQL 语句映射关系(持续更新中)
- Hibernate 第十讲 表关联关系(六)组件映射
- 【Hibernate框架开发之六】Hibernate中Annotation的关系映射&&组件映射!
- 10hibernate hibernate的关系映射之联合主键和组件映射
- Hibernate高级映射 --- 组件映射
- hibernate映射关系一对一映射
- Hibernate组件映射
- hibernate中的组件映射
- hibernate之映射组件
- Hibernate组件映射
- Hibernate组件映射
- RabbitMQ学习(八)之spring-amqp的重要类的认识
- 键盘退出
- Handler、Looper消息传递机制
- handle句柄
- Hadoop常用命令及常见问题
- 【Hibernate持续更新】映射组件关系
- 解读Unity中的CG编写Shader系列三
- 自动装箱、拆箱与遍历循环(Foreach循环)
- as中的证书指纹SHA1
- JHipster使用前的环境配置-JHipster学习(一)
- RMI浅尝辄止
- css-border:0;和border:none;
- 传智播客视频--junit测试架构的学习记录
- 如何评价 React Native?