Hibernate(五)映射集合属性及排序
2015-07-14 20:49
645 查看
这里先将集合Set在数据库中的存储。就是新建一个表,新建的表的主键对应另一张的外键,而集合的每个值对应一条记录,以同一个set的数据以主键值相同的记录区分。
set集合是其它几种集合的基础,所以要了解List、Map、Bag、Array在数据库中的存储先了解Set
测试几种集合
HashSet
TreeSet
LinkedHashSet
映射文件的配置也是重点
主文件配置基本相同。
查看数据库由代码生成的表,注意映射关系
看看数据在表中的存储:
原文出处:http://blog.csdn.net/lindonglian/article/details/46883225
set集合是其它几种集合的基础,所以要了解List、Map、Bag、Array在数据库中的存储先了解Set
package test.hibernate.set; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; public class User { private Integer id; private String name; private Set<String> addressSet = new HashSet<String>(); private List<String> addressList = new ArrayList<String>(); private String[] addressArray;// 数组 private Map<String, String> addressMap = new HashMap<String, String>(); private List<String> addressBag = new ArrayList<String>(); 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<String> getAddressSet() { return addressSet; } public void setAddressSet(Set<String> addressSet) { this.addressSet = addressSet; } public List<String> getAddressList() { return addressList; } public void setAddressList(List<String> addressList) { this.addressList = addressList; } public String[] getAddressArray() { return addressArray; } public void setAddressArray(String[] addressArray) { this.addressArray = addressArray; } public Map<String, String> getAddressMap() { return addressMap; } public void setAddressMap(Map<String, String> addressMap) { this.addressMap = addressMap; } public List<String> getAddressBag() { return addressBag; } public void setAddressBag(List<String> addressBag) { this.addressBag = addressBag; } public static void main(String[] args) { // Set<String> set = new HashSet<String>(); // Set<String> set = new TreeSet<String>(); Set<String> set = new LinkedHashSet<String>(); set.add("kk"); set.add("aa"); set.add("bb"); set.add("cc"); set.add("dd"); System.out.println(set); } }
测试几种集合
HashSet
TreeSet
LinkedHashSet
package test.hibernate.set; import java.lang.reflect.Array; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.Test; public class App { private static SessionFactory sessionFactory = new Configuration()// .configure()// .addClass(User.class)// 添加Hibernate实体类(加载对应的映射文件) .buildSessionFactory(); @Test public void testSave() throws Exception { Session session = sessionFactory.openSession(); session.beginTransaction(); // -------------------------------------------- // 构建对象 User user = new User(); user.setName("李明"); Set<String> set = new TreeSet<String>(); set.add("cc"); set.add("dd"); set.add("aa"); set.add("bb"); user.setAddressSet(set); user.getAddressList().add("浙江省"); user.getAddressList().add("上海市"); user.getAddressList().add("上海市"); user.setAddressArray(new String[] { "广东省", "深圳市", "福田区", "福田区" }); user.getAddressMap().put("省份", "浙江"); user.getAddressMap().put("家庭", "深圳"); user.getAddressBag().add("浙江省"); user.getAddressBag().add("上海市"); user.getAddressBag().add("上海市"); // 保存 session.save(user); // -------------------------------------------- session.getTransaction().commit(); session.close(); } @Test public void testGet() throws Exception { Session session = sessionFactory.openSession(); session.beginTransaction(); // 获取数据 User user = (User) session.get(User.class, 10); // 显示数据 System.out.println(user.getId()); System.out.println(user.getName()); System.out.println(user.getAddressSet()); System.out.println(user.getAddressList()); System.out.println(Arrays.toString(user.getAddressArray())); System.out.println(user.getAddressMap()); System.out.println(user.getAddressBag()); session.getTransaction().commit(); session.close(); } }
映射文件的配置也是重点
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="test.hibernate.set"> <class name="User" table="t_user"> <id name="id"> <generator class="native"></generator> </id> <property name="name" /> <!-- addressSet属性是Set类型,集合元素不可重复 --> <!-- 只有无限的set才能用sort方法进行排序,且初始化时要 用SortedSet,也就是有序的集合类型 sort属性:"unsorted|natural|comparatorClass"。默认为unsorted sort="natural" order-by属性:写的是order by子句,是SQL语句,是操作的集合表, 默认为升序asc,desc降序 这里sort通过在内存中对地址排序,order-by查询的时候通过select子句排序, 效率比用sort方法高 --> <set name="addressSet" table="user_addressSet" order-by="address desc"> <key column="userId"></key> <element type="string" column="address"></element> </set> <!-- 集合元素有序 --> <list name="addressList" table="user_addressList"> <!-- 集合外键的列名 --> <key column="userId"></key> <!-- 索引 --> <list-index column="idx"></list-index> <element type="string" column="address"></element> </list> <!-- array数组,与list基本相同,注意定义的子元素顺序不能变 --> <array name="addressArray" table="user_addressArray"> <key column="userId"></key> <list-index column="idx"></list-index> <element type="string" column="address"></element> </array> <!-- map键值对映射 --> <map name="addressMap" table="user_addressMap"> <key column="userId"></key> <map-key type="string" column="key_"></map-key> <element type="string" column="address"></element> </map> <!-- bay集合,与set集合基本相同,无序,只不过元素可重复 --> <bag name="addressBag" table="user_addressBag"> <key column="userId"></key> <element type="string" column="address"></element> </bag> </class> </hibernate-mapping>
主文件配置基本相同。
查看数据库由代码生成的表,注意映射关系
看看数据在表中的存储:
原文出处:http://blog.csdn.net/lindonglian/article/details/46883225
相关文章推荐
- 第二周编程作业 时间换算
- NSArray, NSNumber, NSValue, NSSet, 数组排序
- 如何自己编写Makefile
- C语言程序设计4、5章
- 行为型模式-解释器
- UVA 6859 Points
- 素材网站
- leetcode 031 —— Next Permutation
- Permutations
- 【Android】AudioRecord--录音并将 PCM文件转为WAV
- 记sql语句空格带来的问题
- SqlCommand.DeriveParameters failed
- Linux通过脚本绑定dhcp地址
- JFinal所集成的插件们
- solr中Zookeeper指令
- SqlCommand.DeriveParameters failed
- UI基础(二)-图层
- IOS开发UI篇--一个侧滑菜单SlidingMenu
- button的type属性
- ESP8266学习笔记4:ESP8266的SmartConfig