Hibernate映射組件屬性xml形式之方式二

1.組件是指:持久化類的屬性並不是基本數據類型,也不是字符串、日期等標量類型的變量,而是一個複合類型的對象。

參考:http://www.tutorialspoint.com/hibernate/hibernate_component_mappings.htm

2.新建一個maven項目

3.編寫pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.meterbox</groupId>
	<artifactId>HibernateDemo</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>HibernateDemo Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<!-- 屬性配置 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<log4j.version>1.2.17</log4j.version>
		<mysql.version>5.1.30</mysql.version>
	</properties>

	<dependencies>


		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>


		<!-- 添加Hibernate依賴 -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>3.6.10.Final</version>
		</dependency>


		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.1</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-nop</artifactId>
			<version>1.6.4</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.2</version>
		</dependency>

		<!-- 添加javassist -->
		<dependency>
			<groupId>javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.11.0.GA</version>
		</dependency>
		<!-- jsp頁面的jar -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
		</dependency>
		<!-- 日誌 -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>HibernateDemo</finalName>
	</build>
</project>
4.編寫Hibernate配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/zhjdata?useUnicode=true&characterEncoding=UTF-8</property>
		<property name="connection.username">root</property>
		<property name="connection.password">123456</property>
		<!-- 顯示SQL語句 -->
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		
		<!-- 根據需要自動創建數據庫 -->
		<property name="hbm2ddl.auto">update</property>
		
		<!-- 定義方言 -->
		<property name="dialect">
			org.hibernate.dialect.MySQL5Dialect
		</property>

        <!-- 指定連接池裏最大連接數 -->
		<property name="hibernate.c3p0.max_size">20</property>
		<!-- 指定連接池裏最小連接數 -->
		<property name="hibernate.c3p0.min_size">1</property>
		<!-- 指定連接池裏連接的超時時長 -->
		<property name="hibernate.c3p0.timeout">5000</property>
		
        <!-- 指定連接池裏最大緩存多少個Statement對象 -->
		<property name="hibernate.c3p0.max_statements">100</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>
		<property name="hibernate.c3p0.validate">true</property>
        
    
        <mapping resource="cn/edu/hpu/collection/model/Person.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

5.編寫Name類和Person類

package cn.edu.hpu.collection.model;

public class Name {
	private Person ower;
	private String first;
	private String last;
//get set
}

package cn.edu.hpu.collection.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Person {

	private String id;
	private String name;
	private int age;
	private List<String> schools = new ArrayList<String>();
	private String[] schools_str;
	private Set<String> schools_set;
	private Collection<String> schools_co = new ArrayList<String>();
	private Map<String, Float> scores = new HashMap<String, Float>();
        private  Name  nameall;
//get  set
    }

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">6.編寫Person.hbm.xml文件</span>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.edu.hpu.collection.model">
	<class name="Person" table="table_person">
		<id name="id" type="java.lang.String">
			<generator class="uuid" />
		</id>
		<property name="name" type="java.lang.String">
		</property>
		<property name="age" type="java.lang.Integer">
		</property>
		<!-- list -->
		<list name="schools" table="table_schools">
			<!-- 外鍵 -->
			<key column="personid" not-null="true"></key>
			<!-- 映射集合屬性數據表的集合索引列 -->
			<list-index column="list_order" />
			<element type="string" column="school_name"></element>
		</list>
		<!-- 數組 -->
		<array name="schools_str" table="table_schools_str">
			<key column="personid" not-null="true"></key>
			<list-index column="list_order" />
			<element type="string" column="school_name" />
		</array>
		<!-- set -->
		<set name="schools_set" table="table_schools_set">
			<key column="personid" not-null="true"></key>
			<element type="string" column="school_name" />
		</set>
		<!-- collection抽象 -->
		<bag name="schools_co" table="table_schools_co">
			<key column="personid" not-null="true"></key>
			<element type="string" column="school_name" not-null="true " />
		</bag>
		<!-- map -->
		<map name="scores" table="table_scores">
			<key column="personid" not-null="true"></key>
			<!-- key列 -->
			<map-key column="subject" type="string" />
			<!-- value列 -->
			<element type="float" column="grade" not-null="true " />
		</map>
		<!-- 組件 -->
		<component name="nameall" class="Name" unique="true">
			<parent name="ower" />
			<property name="first" />
			<property name="last" />
		</component>
	</class>
</hibernate-mapping>

7.編寫HibernateUtil類

package cn.edu.hpu.util;


import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

	/** ThreadLocal Session Map */
	public static final ThreadLocal<Session> SESSIONMAP = new ThreadLocal<Session>();
	private static final SessionFactory sessionFactory;
	private static final Logger LOGGER = Logger.getLogger("appender2");
	static {
		try {
			LOGGER.debug("HibernateUti.static - loading cofig");
			sessionFactory = new Configuration().configure("hibernate.cfg.xml")
					.buildSessionFactory();
			LOGGER.debug("HibernateUtil.static - end");
		} catch (Throwable ex) {
			ex.printStackTrace();
			LOGGER.error("HibernateUti error : ExceptionInInitializerError");
			throw new ExceptionInInitializerError(ex);
		}
	}

	private HibernateUtil() {

	}

	public static Session getSession() throws HibernateException {
		Session session = SESSIONMAP.get();

		if (session == null) {
			session = sessionFactory.openSession();
			SESSIONMAP.set(session);
		}

		return session;
	}

	public static void closeSession() throws HibernateException {
		Session session = SESSIONMAP.get();
		SESSIONMAP.set(null);

		if (session != null) {
			session.close();
		}
	}
}

8.寫測試類

public class PersonManger {

	@Test
	public void testSave() {
		Session session = HibernateUtil.getSession();
		Transaction trans = session.beginTransaction();
		Person p = new Person();
		p.setAge(29);
		p.setName("zhangHJ");
		
		List<String> schools = new ArrayList<String>();
		schools.add("小學");
		schools.add("中學");
		schools.add("大學");
		p.setSchools(schools);
		String[] schools_str ={"小學","中學","大學","研究生"};
		p.setSchools_str(schools_str);
		
		Set<String> schools_set = new HashSet<String>();
		schools_set.add("小學");
		schools_set.add("中學");
		schools_set.add("大學");
		p.setSchools_set(schools_set);
		
		Collection<String> schools_co = new ArrayList<String>();
		schools_co.add("小學");
		schools_co.add("中學");
		schools_co.add("大學");
		p.setSchools_co(schools_co);
		
		Map<String,Float> scores = new HashMap<String,Float>();
		scores.put("數學", (float)99.6);
		scores.put("英語", (float)120.6);
		scores.put("語文", (float)89);
		p.setScores(scores);
		
		Name nameall = new Name();
		nameall.setFirst("Zhang");
		nameall.setLast("Jomes");
		p.setNameall(nameall);
		session.save(p);
		trans.commit();
		HibernateUtil.closeSession();
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章