Hibernate的执行流程和集合的映射关系
Hibernate的执行流程
集合映射
准被hibernate的运行环境
配置hibernate.cfg.xml主配置文件
1、Set集合
写User.java类
package com.gqx.collection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * javaBean的设计 * @author 郭庆兴 * */ public class User { private int userId; private String userName; //一个用户对应多个地址 private Set<String> address; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Set<String> getAddress() { return address; } public void setAddress(Set<String> address) { this.address = address; } }
映射文件User.hbm.xml
<?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.gqx.collection"> <class name="User" table="t_users"> <!-- 主键字段 --> <id name="userId" column="id"> <generator class="native"/> </id> <property name="userName" ></property> <!-- set集合属性的映射,指定要映射的set集合的属性 table 集合属性要映射到的表 key 指定属性集合表(t_address)的外键字段 element 指定集合表的其他字段--> <set name="address" table="t_address"> <key column="uid"></key> <element column="address" type="string"></element> </set> </class> </hibernate-mapping>
测试类如下:
public class App { private static SessionFactory sf; static{ sf=new Configuration().configure().addClass(User.class).buildSessionFactory(); } /** * Set集合 */ @Test public void test() { Session session=sf.openSession(); session.beginTransaction(); //**************保存************ Set<String> addressSet=new HashSet<String>(); addressSet.add("黄石"); addressSet.add("荆州"); User user=new User(); user.setAddress(addressSet); user.setUserName("gqxing"); session.save(user); session.getTransaction().commit(); session.close(); } }
2、List集合User.java
package com.gqx.collection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * javaBean的设计 * @author 郭庆兴 * */ public class User { private int userId; private String userName; //一个用户对应多个地址 private List<String> addressList=new ArrayList<String>(); public void setAddressList(List<String> addressList) { this.addressList = addressList; } public List<String> getAddressList() { return addressList; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
映射文件(User.hbm.xml)
<?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.gqx.collection"> <class name="User" table="t_users"> <!-- 主键字段 --> <id name="userId" column="id"> <generator class="native"/> </id> <property name="userName" ></property> <!-- 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> </class> </hibernate-mapping>
测试类:
/** * List集合 */ @Test public void testSaveList() { Session session=sf.openSession(); session.beginTransaction(); //**************保存************ User user=new User(); user.setUserName("gqxing"); user.getAddressList().add("武汉"); user.getAddressList().add("上海"); session.save(user); session.getTransaction().commit(); session.close(); }
3、Map集合
User.java
package com.gqx.collection; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * javaBean的设计 * @author 郭庆兴 * */ public class User { private int userId; private String userName; //一个用户对应多个地址 private Map<String, String> addressMap=new HashMap<String, String>(); public void setAddressMap(Map<String, String> addressMap) { this.addressMap = addressMap; } public Map<String, String> getAddressMap() { return addressMap; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
映射文件
<?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.gqx.collection"> <class name="User" table="t_users"> <!-- 主键字段 --> <id name="userId" column="id"> <generator class="native"/> </id> <property name="userName" ></property> <!-- map集合映射 key:指定外键字段 map-key:指定map的key element:指定map的value --> <map name="addressMap" table="t_addressMap"> <key column="uid"></key> <map-key type="string" column="shortName"></map-key> <element column="address" type="string"></element> </map> </class> </hibernate-mapping>
测试类
/** * List集合 */ @Test public void testSaveMap() { Session session=sf.openSession(); session.beginTransaction(); //**************保存************ User user=new User(); user.setUserName("gqxing"); user.getAddressMap().put("A002", "黄石"); user.getAddressMap().put("A001", "荆州"); session.save(user); session.getTransaction().commit(); session.close(); }
集合的获取
测试类
/** * 获取 */ @Test public void testGet() { Session session=sf.openSession(); session.beginTransaction(); //获取 User user=(User)session.get(User.class, 2); //及时加载 System.out.println(user.getUserId()); System.out.println(user.getUserName()); //当查询用户,可以获取与亲关联的list集合的数据(因为有正确的映射) //当遇到到集合数据的使用时,才向数据库发送执行的sql语句(懒加载) System.out.println(user.getAddressList()); session.getTransaction().commit(); session.close(); }
js:substring方式实现文字伸缩效果
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>substring实现文字伸缩</title> <style> #div1 { width: 200px; min-height: 20px; border: 1px #000 solid; } </style> </head> <body> <input type="button" value="展开"> <input type="button" value="收缩"> <div id="div1"></div> <script> var aInput = document.getElementsByTagName('input'); var oDiv = document.getElementById('div1'); var str = 'Enjoy your youth. You’ll never be younger than you are at this very moment. 尽情享受你的青春,你永远不会比此刻更年轻了。'; var timer = null; var iNow=0; aInput[0].onclick=function () { clearInterval(timer); timer=setInterval(function () { var val=str.substring(0,++iNow); oDiv.innerHTML=val; if (val==str) { clearInterval(timer); } },30) } aInput[1].onclick=function () { clearInterval(timer); timer=setInterval(function () { var val=str.substring(0,--iNow); oDiv.innerHTML=val; if (val=='') { clearInterval(timer); } },30) } </script> </body> </html>
Hibernate的执行流程和集合的映射关系的更多相关文章
- Hibernate的执行流程
Hibernate框架的工作流程 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的&l ...
- mybatis - 基于拦截器修改执行语句中的ResultMap映射关系
拦截器介绍 mybatis提供了@Intercepts注解允许开发者对mybatis的执行器Executor进行拦截. Executor接口方法主要有update.query.commit.rollb ...
- Hibernate执行流程和关系映射
一.Hibernate的执行流程 hibernate作为一个ORM框架,它封装了大量数据库底层的sql语句操作的方法,这样在执行hibernate的过程中理解hibernate的执行流程很有必要. 由 ...
- 【Hibernate步步为营】--最后的集合映射
上篇文章具体讨论了组合对象映射的原理.它事实上指的是怎样将对象模型中的组合关系映射到关系模型中,它是通过使用Hibernate提供的<component>标签来实现的,并须要在该标签中加入 ...
- Hibernate注解方式一对多自关联关系映射
MySQL版数据库表结构 DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE ) NOT NULL, ...
- Hibernate第四篇【集合映射、一对多和多对一】
前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的-因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址. 数据库表 我们一般如下图一样设计数 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)
One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...
- hibernate(四) 双向多对多映射关系
序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
随机推荐
- Linux安装Oracle 11g Grid Infrastructure 出现OUI-10182错误解决办法
已确保安装的ORACLE_BASE目录是属于grid:oinstall 但安装时总是报:OUI-10182 The effective user ID does not match the own ...
- VS2008 + QGIS1.7.1试验
今天试验了一下.结果算是成功了吧.显示Generate done,生成了.但是提示了一个“SVN version不明确”的错误提示,应该无大碍吧.但是打开Build成的.sln也没看出有啥不妥. 用C ...
- web-day15
第15章WEB15-AJAX和JQuery案例篇 今日任务 使用AJAX完成用户名的异步校验 使用JQuery完成用户名异步校验 使用JQuery完成商品信息模糊显示 使用JQuery完成省市联动效果 ...
- SRM465
250pt: 给定50个整数点,范围-500-500之间.然后在这些点上选2个点作为中心,画边长为整数的正方形,并且正方形不能重叠(可以不平行),而且而且边长不同为不同方案.求有多少种方案.. 思路: ...
- Python自动化开发 - 常用模块(一)
本节内容 1.模块介绍 2.time&datetime模块 3.random模块 4.os模块 5.sys模块 6.json&pickle模块 7.logging模块 一.模块介绍 模 ...
- ora-12154 TNS:无法处理服务名疑难处理
折腾了几天的PLSQL,终于解决这个问题,在此分享给需要的朋友 服务器:WindowsServer2008(64位操作系统).Win7(64位操作系统) Oracle版本:10.2.0 问题:安装完O ...
- 二、基于kubernetes构建Docker集群环境实战
kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...
- IIS伪静态配置,使用URLRewriter实现伪静态
前段时间开发公司官网,用到了URLRewriter实现伪静态,在VS调试模式下没有任何问题,部署到IIS上后总是提示404的错误,查了很久才知道IIS需要做相应的配置才能实现动态跳转的功能,现将IIS ...
- WPF学习笔记(4):获取DataGridTemplateColumn模板定义的内容控件
在之前的DataGrid的DataGridTemplateColumn列中,自定义了一个TextBox控件,但是在C#代码中提示找不到这个控件,导致无法对该控件进行操作.在网上搜索后,发现一些处理方法 ...
- JQuery Mobile - 自定义图标!
环境 jquery1.9.1.js jquery mobile 1.4.2版 图标制作 18x18px 底透明的png图标 使用图标,这个过程开始怎么弄都不行,只有个灰色的圆出现,不见图标:或者出现图 ...