Hibernate应用(一)

来源:互联网 发布:施工进度网络计划绘制 编辑:程序博客网 时间:2024/06/05 13:33

简单使用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会使得中间表无法插入数据 */@Testpublic 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






原创粉丝点击