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的执行流程和集合的映射关系的更多相关文章

  1. Hibernate的执行流程

    Hibernate框架的工作流程 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的&l ...

  2. mybatis - 基于拦截器修改执行语句中的ResultMap映射关系

    拦截器介绍 mybatis提供了@Intercepts注解允许开发者对mybatis的执行器Executor进行拦截. Executor接口方法主要有update.query.commit.rollb ...

  3. Hibernate执行流程和关系映射

    一.Hibernate的执行流程 hibernate作为一个ORM框架,它封装了大量数据库底层的sql语句操作的方法,这样在执行hibernate的过程中理解hibernate的执行流程很有必要. 由 ...

  4. 【Hibernate步步为营】--最后的集合映射

    上篇文章具体讨论了组合对象映射的原理.它事实上指的是怎样将对象模型中的组合关系映射到关系模型中,它是通过使用Hibernate提供的<component>标签来实现的,并须要在该标签中加入 ...

  5. Hibernate注解方式一对多自关联关系映射

    MySQL版数据库表结构   DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE ) NOT NULL, ...

  6. Hibernate第四篇【集合映射、一对多和多对一】

    前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的-因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址. 数据库表 我们一般如下图一样设计数 ...

  7. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  8. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  9. hibernate(四) 双向多对多映射关系

    序言 莫名长了几颗痘,真TM疼,可能是现在运动太少了,天天对着电脑,决定了,今天下午花两小时去跑步了, 现在继上一章节的一对多的映射关系讲解后,今天来讲讲多对多的映射关系把,明白了一对多,多对多个人感 ...

随机推荐

  1. LRU ,LRUW,CKPT-Q

    原文出处:http://www.itpub.net/thread-1631537-1-1.html    http://www.linuxidc.com/Linux/2012-07/66767.htm ...

  2. 在aliyun遇到一些问题

    1. 删除现有网站报错:“applicationhost.config 错误 无法写入配置文件” 解决办法:用管理员身份打开IIS. 2. IIS上部署MVC网站,打开后500错误:处理程序“Exte ...

  3. _ZNote_编程语言_Qt_信号槽实现_拖拽方式使用控件

    所谓的信号槽,实际上就是观察者模式. 当某个事件发生后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal). 这种发出信号是没有目的的,类似于广播.如果对象对这个信号感兴趣,它就会使 ...

  4. 【滚动条】Selenium+python自动化-JS处理滚动条

    转载地址: http://www.cnblogs.com/yoyoketang/p/6128655.html --------------------------------------------- ...

  5. 【并查集的另一个思考方向】POJ1456

    POJ1456 这个题一看好像就是用贪心做啊,一个结构体,拍一下序,vis数组一遍遍扫荡,最后输出值,没错,贪心的确能做出来,而这类题目也能应用并查集,实现得思想也是贪心 #include <i ...

  6. JMS学习以及jms的实现activeMq

    1.JMS规范介绍: http://www.cnblogs.com/hapjin/p/5431706.html http://elim.iteye.com/blog/1893038 http://bl ...

  7. Delphi XE 新功能试用:多种皮肤样式静、动态设置方法

    静态方式:1.新建VCL Forms Application:2.打开菜单Project - Application - Appearance:3.在Custom Styles中可选择所有默认带的皮肤 ...

  8. 阿里云oss服务通用类

    在webconfig中配置信息 <?xml version="1.0" encoding="utf-8"?><configuration> ...

  9. Unity相机跟随-----根据速度设置偏移量

    这里假设在水中的船,船有惯性,在不添加前进动力的情况下会继续移动,但是船身是可以360度自由旋转,当船的运动速度在船的前方的时候,相机会根据向前的速度的大小,设置相机的偏移量,从而提高游戏的动态带感. ...

  10. ovs flow 原理及实验

    OpenFlow概述 在支持OpenFlow的交换机中包含了若干个Flow table,Flow table可以用来控制数据包的处理,交换机会执行与flow相匹配的表项中所罗列的动作. OpenFlo ...