Hibernate应用(一)

简单使用Hibernate,只需在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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.hurricane</groupId>
	<artifactId>hibernate</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>hibernate</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.2.1.Final</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.35</version>
		</dependency>
	</dependencies>
</project>
从pom.xml中可见,与Hibernate相关的只有hibernate-core,在maven将它的依赖加入后,hibernate需要的jar包有:

1.hibernate-core-5.2.1.Final.jar

2.jboss-logging-3.3.0.Final.jar

3.hibernate-jpa-2.1-api-1.0.0.Final.jar

4.javassist-3.20.0-GA.jar

5.antlr-2.7.7.jar

6.geronimo-jta_1.1_spec-1.1.1.jar

7.jandex-2.0.0.Final.jar

8.classmate-1.3.0.jar

9.dom4j-1.6.1.jar

10.hibernate-commons-annotations-5.0.1.Final.jar

11.cdi-api-1.1-PFD.jar

12.el-api-2.2.jar

13.jboss-interceptors-api_1.1_spec-1.0.0.Beta1.jar

14.jsr250-api-1.0.jar

15.javax.inject-1.jar
引入jar包之后,在classpath下创建一个hibernate.cfg.xml(文件头可以在hibernate-core-xxx.jar中的hibernate-configuration-3.0.dtd中找到)文件,例如:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost:3308/test?useUnicode=true&characterEncoding=utf8</property>
		<property name="connection.username">root</property>
		<property name="connection.password">121909</property>
		
		<!-- JDBC connection pool (use the built-in) -->
		<property name="connection.pool_size">1</property>
		<!-- SQL dialect -->
		<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<!-- Enable Hibernate's automatic session context management -->
		<property name="current_session_context_class">thread</property>
		<!-- Disable the second-level cache -->
		<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
		<!-- Echo all executed SQL to stdout -->
		<property name="show_sql">true</property>
		<!-- Drop and re-create the database schema on startup -->
		<property name="hbm2ddl.auto">update</property>
		
		<mapping resource="com/hurricane/hibernate/domain/Event.hbm.xml" />
		<mapping resource="com/hurricane/hibernate/domain/Person.hbm.xml" />
		
		<mapping class="com.hurricane.hibernate.domain.Student"/>
		<mapping class="com.hurricane.hibernate.domain.Teacher"/>
	</session-factory>
</hibernate-configuration>
然后创建自己的实体类,并通过xml或annotation来配置实体类到数据库表的映射关系,当然实体类间如果存在关联,那么实体类间的关联关系也是要配置的。
实体类的xml配置文件要在与实体类同包下,命名规则为: 实体类名.hbm.xml, 如下是Person.hbm.xml(文件头可以在hibernate-core-xxx.jar中的hibernate-mapping-3.0.dtd中找到)文件的配置:

<?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.hurricane.hibernate.domain">
	<class name="Person" table="PERSON">
		<id name="id" column="PERSON_ID">
			<generator class="native" />
		</id>
		<property name="age" />
		<property name="firstName" />
		<property name="lastName" />

		<set name="events" table="PERSON_EVENT" cascade="save-update" inverse="false">
			<key column="PERSON_ID" />
			<many-to-many column="EVENT_ID" class="Event" />
		</set>

		<set name="emails" table="PERSON_EMAIL" cascade="save-update">
			<key column="PERSON_ID" />
			<element type="string" column="EMAIL_ADDR" />
		</set>
	</class>
</hibernate-mapping>

测试代码:

	/**
	 * 测试inverse=false的一方存储带来的效果,结果显示在插入自己时将关联对象也插入了进去,并向中间表插入了数据
	 * 注意:若是执行save但是之前没有beginTransaction会报错,提示保存操作必须在事务中执行
	 *     若是只beginTransaction但是不commit会使得中间表无法插入数据
	 */
	@Test
	public void testM2MBasic() {
		Person person = new Person();
		person.setFirstName("hurricane2");
		person.setLastName("tornado2");
		Set<String> emails = new HashSet<String>();
		emails.add("aaa@aaa.com");
		emails.add("bbb@bbb.com");
		person.setEmails(emails);
		Event event = new Event();
		event.setTitle("event1");
		event.setDate(new Date());
		Event event2 = new Event();
		event2.setTitle("event2");
		event2.setDate(new Date());
		
//		person.addToEvent(event);	//这种方式可以使得双方都可以维护关联关系,不过两方都需要配置cascade="save-update"
//		person.addToEvent(event2);	//这种方式需要的时候,记起来就可以了
		
		Set<Event> events = new HashSet<Event>();
		events.add(event);
		events.add(event2);
		person.setEvents(events);
		
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.save(person);
		session.getTransaction().commit();	//可以注释掉这一行来查看效果
		session.close();
		sessionFactory.close();
	}


至此,基本的使用就可以做到了。


参考资料:

1. hibernate主要文档:hibernate-distribution-3.6.10.Final/documentation/manual/zh-CN/html_single/index.html

2.hibernate注解相关:hibernate-annotations-3.4.0.GA/doc/reference/zh_cn/html_single/index.html

3.hibernate API:hibernate-distribution-3.6.10.Final/documentation/javadocs/index.html






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值