- 浏览: 176063 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Caelebs:
RMI及其调试(JDK1.6) -
walker2009:
...
svn如何使用import目录作为工作拷贝+我的svn学习笔记(转) -
ygsilence:
请问,怎么linux版本的xampp怎么整合现有tomcat, ...
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续] -
witcheryne:
zrong 写道skanion 写道VIMweejulius ...
svn + vim + ant + linux 竟然完全替代了eclipse -
zrong:
skanion 写道VIMweejulius 写道怎么重构用V ...
svn + vim + ant + linux 竟然完全替代了eclipse
Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,它们的特点如下:
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。
首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’(
2. 'id' int(11) NOT NULL,
3. 'setValue' varchar(100) NOT NULL,
4. 'listValue_id' int(11) NOT NULL,
5. 'listValue' varchar(100) NOT NULL,
6. 'arrayValue_id' int(11) NOT NULL,
7. 'arrayValue' varchar(100) NOT NULL,
8. 'mapValue_id' int(11) NOT NULL,
9. 'mapValue' varchar(100) NOT NULL,
10. 'bagValue' varchar(100) NOT NULL
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk
12.
13. CREATE TABLE 'master'(
14. 'id' int(11) NOT NULL auto_increment,
15. 'name' varchar(100) NOT NULL default '',
16. PRIMARY KEY('id')
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk
建立角色的实体类,代码如下:
Java代码
1. import java.io.Serializable;
2. import java.util.List;
3. import java.util.Map;
4. import java.util.Set;
5.
6. @SuppressWarnings({ "unchecked", "serial" })
7. public class Master implements Serializable {
8. private Integer id; //主键ID属性
9. private String name; //姓名name属性
10. private Set setValue;
11. private List listValue;
12. private String[] arrayValue;
13. private Map mapValue;
14. private List bagValue;
15.
16. public Integer getId() {
17. return id;
18. }
19. public void setId(Integer id) {
20. this.id = id;
21. }
22. public String getName() {
23. return name;
24. }
25. public void setName(String name) {
26. this.name = name;
27. }
28. public Set getSetValue() {
29. return setValue;
30. }
31. public void setSetValue(Set setValue) {
32. this.setValue = setValue;
33. }
34. public List getListValue() {
35. return listValue;
36. }
37. public void setListValue(List listValue) {
38. this.listValue = listValue;
39. }
40. public String[] getArrayValue() {
41. return arrayValue;
42. }
43. public void setArrayValue(String[] arrayValue) {
44. this.arrayValue = arrayValue;
45. }
46. public Map getMapValue() {
47. return mapValue;
48. }
49. public void setMapValue(Map mapValue) {
50. this.mapValue = mapValue;
51. }
52. public List getBagValue() {
53. return bagValue;
54. }
55. public void setBagValue(List bagValue) {
56. this.bagValue = bagValue;
57. }
58. }
类Message的Hibernate映射文件Message.hbm.xml如下:
Xml代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse Persistence Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai">
9. <id name="id" type="java.lang.Integer">
10. <column name="id" />
11. <generator class="native"></generator>
12. </id>
13. <property name="name" type="java.lang.String">
14. <column name="name" length="100" not-null="true" />
15. </property>
16. <!--Set类型映射-->
17. <set name="setValue" table="message"> //定义对应的表
18. <key column="id" />
19. <element type="java.lang.String">
20. <column name="setValue" />
21. </element>
22. </set>
23.
24. <!--List类型映射-->
25. <List name="listValue" table="message">
26. <key column="id" />
27. <index column="listValue_id" /> //配置主键
28. <element type="java.lang.String" column="listValue" />
29. </List>
30.
31. <!--Array类型映射-->
32. <array name="arrayValue" table="message">
33. <key column="id"/>
34. <list-index column="arrayValue_id"/>
35. <element type="java.lang.String" column="arrayValue"/>
36. </array>
37.
38. <!--Map类型映射-->
39. <map name="mapValue" table="message">
40. <key column="id" />
41. <!--配置键值对-->
42. <map-key column="mapValue_id" type="java.lang.String" />
43. <element type="java.lang.String" column="mapValue" />
44. </map>
45.
46. <!--Bag类型映射-->
47. <bag name="bagValue" table="message">
48. <key column="id" /> //定义主键
49. <element type="string" column="bagValue" /> //定义元素类型
50. </bag>
51. </class>
52. </hibernate-mapping>
JUnit测试代码如下:
Java代码
1. import java.util.ArrayList;
2. import java.util.HashMap;
3. import java.util.HashSet;
4. import java.util.List;
5. import java.util.Map;
6. import java.util.Set;
7.
8. import org.hibernate.Session;
9.
10. import junit.framework.TestCase;
11.
12. public class MasterTest extends TestCase {
13.
14. public void testSave() {
15. Master master = new Master();
16. master.setName("JavaEye");
17.
18. Set setValue = new HashSet();
19. setValue.add("a");
20. setValue.add("b");
21. master.setSetValue(setValue);
22.
23. List listValue = new ArrayList();
24. listValue.add("c");
25. listValue.add("d");
26. master.setListValue(listValue);
27.
28. String[] arrayValue = new String[]{"e", "f"};
29. master.setArrayValue(arrayValue);
30.
31. Map mapValue = new HashMap();
32. mapValue.put("key_1", "value_1");
33. mapValue.put("key_2", "value_2");
34. master.setMapValue(mapValue);
35.
36. List bagValue = new ArrayList();
37. bagValue.add("h");
38. bagValue.add("i");
39. master.setBagValue(bagValue);
40.
41. Session session = null;
42. try {
43. session = HibernateUtils.getSession();
44. session.beginTransaction();
45. session.save(c);
46. session.getTransaction().commit();
47. }catch(Exception e) {
48. e.printStackTrace();
49. session.getTransaction().rollback();
50. }finally {
51. HibernateUtils.closeSession(session);
52. }
53. }
54. }
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。
首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’(
2. 'id' int(11) NOT NULL,
3. 'setValue' varchar(100) NOT NULL,
4. 'listValue_id' int(11) NOT NULL,
5. 'listValue' varchar(100) NOT NULL,
6. 'arrayValue_id' int(11) NOT NULL,
7. 'arrayValue' varchar(100) NOT NULL,
8. 'mapValue_id' int(11) NOT NULL,
9. 'mapValue' varchar(100) NOT NULL,
10. 'bagValue' varchar(100) NOT NULL
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk
12.
13. CREATE TABLE 'master'(
14. 'id' int(11) NOT NULL auto_increment,
15. 'name' varchar(100) NOT NULL default '',
16. PRIMARY KEY('id')
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk
建立角色的实体类,代码如下:
Java代码
1. import java.io.Serializable;
2. import java.util.List;
3. import java.util.Map;
4. import java.util.Set;
5.
6. @SuppressWarnings({ "unchecked", "serial" })
7. public class Master implements Serializable {
8. private Integer id; //主键ID属性
9. private String name; //姓名name属性
10. private Set setValue;
11. private List listValue;
12. private String[] arrayValue;
13. private Map mapValue;
14. private List bagValue;
15.
16. public Integer getId() {
17. return id;
18. }
19. public void setId(Integer id) {
20. this.id = id;
21. }
22. public String getName() {
23. return name;
24. }
25. public void setName(String name) {
26. this.name = name;
27. }
28. public Set getSetValue() {
29. return setValue;
30. }
31. public void setSetValue(Set setValue) {
32. this.setValue = setValue;
33. }
34. public List getListValue() {
35. return listValue;
36. }
37. public void setListValue(List listValue) {
38. this.listValue = listValue;
39. }
40. public String[] getArrayValue() {
41. return arrayValue;
42. }
43. public void setArrayValue(String[] arrayValue) {
44. this.arrayValue = arrayValue;
45. }
46. public Map getMapValue() {
47. return mapValue;
48. }
49. public void setMapValue(Map mapValue) {
50. this.mapValue = mapValue;
51. }
52. public List getBagValue() {
53. return bagValue;
54. }
55. public void setBagValue(List bagValue) {
56. this.bagValue = bagValue;
57. }
58. }
类Message的Hibernate映射文件Message.hbm.xml如下:
Xml代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse Persistence Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai">
9. <id name="id" type="java.lang.Integer">
10. <column name="id" />
11. <generator class="native"></generator>
12. </id>
13. <property name="name" type="java.lang.String">
14. <column name="name" length="100" not-null="true" />
15. </property>
16. <!--Set类型映射-->
17. <set name="setValue" table="message"> //定义对应的表
18. <key column="id" />
19. <element type="java.lang.String">
20. <column name="setValue" />
21. </element>
22. </set>
23.
24. <!--List类型映射-->
25. <List name="listValue" table="message">
26. <key column="id" />
27. <index column="listValue_id" /> //配置主键
28. <element type="java.lang.String" column="listValue" />
29. </List>
30.
31. <!--Array类型映射-->
32. <array name="arrayValue" table="message">
33. <key column="id"/>
34. <list-index column="arrayValue_id"/>
35. <element type="java.lang.String" column="arrayValue"/>
36. </array>
37.
38. <!--Map类型映射-->
39. <map name="mapValue" table="message">
40. <key column="id" />
41. <!--配置键值对-->
42. <map-key column="mapValue_id" type="java.lang.String" />
43. <element type="java.lang.String" column="mapValue" />
44. </map>
45.
46. <!--Bag类型映射-->
47. <bag name="bagValue" table="message">
48. <key column="id" /> //定义主键
49. <element type="string" column="bagValue" /> //定义元素类型
50. </bag>
51. </class>
52. </hibernate-mapping>
JUnit测试代码如下:
Java代码
1. import java.util.ArrayList;
2. import java.util.HashMap;
3. import java.util.HashSet;
4. import java.util.List;
5. import java.util.Map;
6. import java.util.Set;
7.
8. import org.hibernate.Session;
9.
10. import junit.framework.TestCase;
11.
12. public class MasterTest extends TestCase {
13.
14. public void testSave() {
15. Master master = new Master();
16. master.setName("JavaEye");
17.
18. Set setValue = new HashSet();
19. setValue.add("a");
20. setValue.add("b");
21. master.setSetValue(setValue);
22.
23. List listValue = new ArrayList();
24. listValue.add("c");
25. listValue.add("d");
26. master.setListValue(listValue);
27.
28. String[] arrayValue = new String[]{"e", "f"};
29. master.setArrayValue(arrayValue);
30.
31. Map mapValue = new HashMap();
32. mapValue.put("key_1", "value_1");
33. mapValue.put("key_2", "value_2");
34. master.setMapValue(mapValue);
35.
36. List bagValue = new ArrayList();
37. bagValue.add("h");
38. bagValue.add("i");
39. master.setBagValue(bagValue);
40.
41. Session session = null;
42. try {
43. session = HibernateUtils.getSession();
44. session.beginTransaction();
45. session.save(c);
46. session.getTransaction().commit();
47. }catch(Exception e) {
48. e.printStackTrace();
49. session.getTransaction().rollback();
50. }finally {
51. HibernateUtils.closeSession(session);
52. }
53. }
54. }
发表评论
-
(转)postgreSQL 实现按月按年,按日统计 分组统计
2011-12-26 18:11 3838--按年分组查看 select to_char ... -
(转)aop:pointcut expression解析
2011-12-26 14:20 1168execution(* com.aptech.jb.epet. ... -
(转)SQL语句中,为什么where子句不能使用列别名,而order by却可以
2011-12-05 10:34 2102sqlserver查询的执行顺序是: (1)FROM < ... -
postgresql 导入和导出数据
2011-09-22 10:59 6237自oracle自收购sun以来,牵起了对java的种种纠纷, ... -
JSP页面跳转方法荟萃
2011-09-19 14:23 14361. response.sendRedirct("跳 ... -
如何同时启动多个Tomcat服务器(转)
2011-09-16 10:05 812前些时日,出于某种需要,需要同时启动多个Tomcat服务器,在 ... -
在浏览器查看svn中代码的解决方案(转)
2011-09-15 15:38 5211重新安装svn+apache以后,发现一个问题,比如java源 ... -
如何让svnserve.exe在WINDOWS中自动运行
2011-09-15 14:50 1154将svn设置成为系统服务自动运行就行了。 方法: 在Windo ... -
[原创]SS FrameWork For PHP 4.0 (专注于extjs和flex的PHP MVC核心框架)
2011-09-15 13:28 3549这是我以前写的PHP MVC 框架核心, 麻雀虽小五脏俱全,完 ... -
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续]
2011-09-15 13:18 5571在笔者拙作 xampp(apache+mod_jk)整合现有 ... -
Bat脚本中带ANT命令,会忽略ANT后面的命令?
2011-09-14 15:47 1925如题, bat中带有ant -debug 则后面的命令没有执行 ... -
xampp(apache+mod_jk)整合现有的tomcat
2011-09-14 12:15 52131. Xampp官网 http://www.apach ... -
svn + vim + ant + linux 竟然完全替代了eclipse
2011-09-14 09:18 3079很难想象, 一个公司只用 svn + vim + ant + ... -
Ant <Delete> 如何只删掉文件夹下所有文件和文件夹(转)
2011-09-13 18:20 3484用fileset 来过滤要删掉的目录和文件 <dele ... -
ANT的安装/配置笔记(转)
2011-09-13 14:38 722内容摘要: ant是一个基 ... -
windows 安装tomcat服务
2011-09-13 14:16 989D:\usr\tomcat\bin>service.ba ... -
struts 1 中 <html:form>
2011-09-13 12:03 11677来看看 使用 ActionForm 这个主题,当时使用了一个静 ... -
关于struts标签bean:message(转)
2011-09-13 11:55 1218bean:message标签用来从指 ... -
Servlet中的filter(转)
2011-09-13 11:21 985Filter:Filter 技术是servlet 2.3 新增 ... -
Filter的用处与种类
2011-09-13 11:19 1189Filter有如下几个用处。 •在HttpServletRe ...
相关推荐
Hibernate常见集合映射(Set,List_Array,Map,Bag)
NULL 博文链接:https://lijunabc.iteye.com/blog/443381
hibernate集合的映射 集合的映射 set list array map
Hibernate容器映射技术(Set、List、Map)
Hibernate映射集合属性List,用于映射集合属性 List Hibernate 自动生成表 不需sql
NULL 博文链接:https://lijunabc.iteye.com/blog/443278
NULL 博文链接:https://lijunabc.iteye.com/blog/443353
2,建立表的hibernate支持,生成tb_user类和对应的配置文件 3,修改配置文件使之和相应的类对应, 4,修改tb_user类,创建一个set类型的字段emailes,生成它的set和get方法 5,写测试类,对以上内容进行测试。 二、...
NULL 博文链接:https://lijunabc.iteye.com/blog/443305
-Hibernate容器-Hibernate容器映射技术(Set、List、Map)(1)映射技术-Hibernate容器映射技术(Set、List、Map)(1)(Set、List、Map)(1)
适合初学者了解在hibernate中配置set,list,map,bag等集合映射
student与Score的Map集合关系 student与class的多对一 一对多映射
JAVA培训-HIBERNATE的集合映射.doc
hibernate 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结
Hibernate Map 多对多映射
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
NULL 博文链接:https://lijunabc.iteye.com/blog/443317
Hibernate对象关系映射一对多 很基础等文档
便于同学们更好的学习hibernate,其中包含了hibernate的七种映射管、关系
Hibernate_容器映射技术笔记Hibernate_容器映射技术笔记Hibernate_容器映射技术笔记Hibernate_容器映射技术笔记