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疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...
随机推荐
- Ng第三课:线性代数回顾(Linear Algebra Review)
3.1 矩阵和向量 3.2 加法和标量乘法 3.3 矩阵向量乘法 3.4 矩阵乘法 3.5 矩阵乘法的性质 3.6 逆.转置 3.1 矩阵和向量 如图:这个是 4×2 矩阵,即 4 行 ...
- Alpha阶段敏捷冲刺(七)
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:用java完成了错词,已掌握,陌生单词的图标生 ...
- hdu 5050 大数
http://acm.hdu.edu.cn/showproblem.php?pid=5050 大数模板最大公约数 信kuangbin,能AC #include <cstdio> #incl ...
- java基础知识-原码,反码,补码
1.正数:原码,反码,补码:都一样. 2.负数:和正数的储存方式不同,负数都是以补码形式存储的. <1>负数的补码 把负数的原码除了符号位取反后再+1. <2>负数的原码 把对 ...
- android:theme
附件:常用的系统提供的 android:theme 样式一览表 01 android:theme="@android:style/Theme.Dialog" 将一个Activity ...
- RxSwift学习笔记6:Subjects/PublishSubject/BehaviorSubject/ReplaySubject/Variable
// 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observabl ...
- Java设计模式详尽资料
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- HTTP状态代码列表
httpContext.Response.StatusCode=200 1xx - 信息提示这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应. · 100 - ...
- python--求参赛两队所有可能的比赛组合情况
朋友遇到一个面试题,让我帮忙实现,题目如下: 红队有A1,B1,C1三名队员,蓝队有A2,B2,C2三名队员,每轮比赛各队出一名队员参加,一名队员只能参加一次比赛,假设A1不会和B2打,B1不会和B2 ...
- 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑
[源码下载] 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) InkCanv ...