(05)String类型的集合映射
2016-07-10 08:03
211 查看
基本的需求是:用户购买东西,有多个地址。
这篇文章关注的是String类型的Set、List和Map数据如何与数据库中的表建立映射关系,在下一篇文章中,会String类型进一步修改为用户自定义的类型。这篇文章的重点是学习.hbm.xml中映射的写法。
User.java
在User.java中,有Set、List和Map三种类型的数据,它的基础类型是String
User.hbm.xml,这里是学习的重点:Set、List和Map三种类型是如何进行映射的
App.java,这里主要是写代码进行测试
这篇文章关注的是String类型的Set、List和Map数据如何与数据库中的表建立映射关系,在下一篇文章中,会String类型进一步修改为用户自定义的类型。这篇文章的重点是学习.hbm.xml中映射的写法。
User.java
package com.rk.hibernate.f_collections; import java.util.List; import java.util.Map; import java.util.Set; public class User { private int uid; private String username; private Set<String> addressSet; private List<String> addressList; private Map<String, String> addressMap; public Map<String, String> getAddressMap() { return addressMap; } public void setAddressMap(Map<String, String> addressMap) { this.addressMap = addressMap; } public List<String> getAddressList() { return addressList; } public void setAddressList(List<String> addressList) { this.addressList = addressList; } public Set<String> getAddressSet() { return addressSet; } public void setAddressSet(Set<String> addressSet) { this.addressSet = addressSet; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
在User.java中,有Set、List和Map三种类型的数据,它的基础类型是String
private Set<String> addressSet; private List<String> addressList; private Map<String, String> addressMap;
User.hbm.xml,这里是学习的重点:Set、List和Map三种类型是如何进行映射的
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.rk.hibernate.f_collections" auto-import="true"> <class name="User" table="T_Users"> <id name="uid" column="id"> <generator class="native"></generator> </id> <property name="username" column="name" type="string"></property> <!-- set集合属性的映射 name 指定要映射的set集合的属性 table 集合属性要映射到的表 key 指定集合表(t_address)的外键字段 element 指定集合表的其他字段 type 元素类型,一定要指定 --> <set name="addressSet" table="T_addressSet"> <key column="uid"></key> <element column="address" type="string"></element> </set> <!-- list集合映射 list-index 指定的是排序列的名称 (因为要保证list集合的有序) --> <list name="addressList" table="T_AddressList"> <key column="uid"></key> <list-index column="idx"></list-index> <element column="address" type="string"></element> </list> <!-- map集合的映射 key 指定外键字段 map-key 指定map的key element 指定map的value --> <map name="addressMap" table="T_AddressMap"> <key column="uid"></key> <map-key column="shortName" type="string"></map-key> <element column="address" type="string"></element> </map> </class> </hibernate-mapping>
App.java,这里主要是写代码进行测试
package com.rk.hibernate.f_collections; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App { private static SessionFactory sf; static { sf = new Configuration().configure().addClass(User.class).buildSessionFactory(); } // 保存set @Test public void testSaveSet() { Session session = sf.openSession(); session.beginTransaction(); // 用户对象 User u = new User(); u.setUsername("小刚"); // 添加地址 Set<String> addressSet = new HashSet<String>(); addressSet.add("北京"); addressSet.add("上海"); u.setAddressSet(addressSet); // 保存 session.save(u); session.getTransaction().commit(); session.close(); System.out.println("执行结束!"); } // 保存list @Test public void testSaveList() { Session session = sf.openSession(); session.beginTransaction(); // 用户对象 User u = new User(); u.setUsername("小蓝"); // 添加地址 List<String> list = new ArrayList<String>(); list.add("石家庄"); list.add("保定"); u.setAddressList(list); // 保存 session.save(u); session.getTransaction().commit(); session.close(); System.out.println("执行结束!"); } // 保存map @Test public void testSaveMap() { Session session = sf.openSession(); session.beginTransaction(); // 用户对象 User u = new User(); u.setUsername("小花"); // 添加地址 Map<String, String> map = new HashMap<String, String>(); map.put("京", "北京"); map.put("冀", "河北"); u.setAddressMap(map); // 保存 session.save(u); session.getTransaction().commit(); session.close(); System.out.println("执行结束!"); } // 获取 @Test public void testGetList() { Session session = sf.openSession(); session.beginTransaction(); // 获取 User u = (User) session.get(User.class, 5);// 及时加载 System.out.println(u.getUid()); System.out.println(u.getUsername()); // 当查询用户,同时可以获取用户关联的list集合的数据 (因为有正确映射) // 当使用到集合数据的使用,才向数据库发送执行的sql语句 (懒加载) System.out.println(u.getAddressList()); session.getTransaction().commit(); session.close(); System.out.println("执行结束!"); } }
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Java的Hibernate框架中的继承映射学习教程
- Hibernate实现批量添加数据的方法
- Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示