Eclipse整合Hibernate
来源:互联网 发布:淘宝修改评论链接 编辑:程序博客网 时间:2024/05/24 13:28
注:由于以前自己在学校学习的框架的是Mybatis,由于Mybatis有对数据库的限制,所以现在进公司后,需要重新学习Hibernate,记录一下,一起学习。
一:环境搭建
1.所需jar包:
Hibernate-core-5.1.0.Final.jar,dom4j-1.6.1.jar,log4j-core-2.5.jar,javassist-3.20.0-GA.jar
mysql-connector-java-5.1.34.jar,antlr-2.7.7.jar,commons-logging-1.2.jar,cglib-2.2.2.jar
commons-collections-3.2.1.jar,javax.transaction-1.1.jar
2.如果使用maven管理jar包,下面是使用maven的依赖,不使用maven就手动导入jar包:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.0.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
3.我使用的是MySQL,创建表Student和Class,下面是创建sql语句:
create table class(
id int primary key auto_increment,
classname varchar(50)
);
create table student(
id int primary key auto_increment,
studentname varchar(50),
classid int
);
alter table student add constraint fk_classid foreign key(classid) references class(id);
insert into student values(1,'完全',1);
insert into student values(2,'玩去',1);
insert into class values(1,'三年二班');
4.创建相对应的实体类Class.java和Student.java:
Class.java如下:属性和数据库中的列对应,类实现序列化接口,自动生成序列化ID,右键source生成Get/Set方法和toString方法
Student.java如下:这个类中也和数据库中的列对应,这里用对象对应数据库中的classid属性
5.创建实体类的映射文件Class.hbm.xml和Student.hbm.xml和hibernate.cfg.xml,并将三个资源文件放在src/main/resources包下面
,这样不用指定绝对路径,可以自动加载resources下面的配置文件。
hibernate.cfg.xml配置如下:
<?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>
<!--当show_sql属性为true时表示在程序运行时在控制台输出SQL语句,默认为false,建议在调试程序时设为true,发布程序之前再改为false,因为输出SQL语句会影响程序的运行速度-->
<property name="show_sql">true</property>
<!--指定连接数据库用的驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--指定连接数据库的密码-->
<property name="hibernate.connection.password">a</property>
<!--指定连接数据库的路径-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<!--指定连接数据库的用户名-->
<property name="hibernate.connection.username">root</property>
<!--指定数据库使用的SQL方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--指定是否按照标准格式在控制台上输出SQL语句-->
<property name="format_sql">true</property>
<!--指定是否在SQL语句中输出便于调试的注释信息-->
<property name="use_sql_comments">true</property>
<!-- 配置映射文件路径 -->
<mapping resource="Class.hbm.xml"/>
<mapping resource="Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
这里是实体的映射文件路径,因为student的映射文件需要使用class对象,所以需要将Class的映射放前面,需要先加载
Class.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>
<class name="com.yk.model.Class" table="class" catalog="hibernate" optimistic-lock="version">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="classname" type="java.lang.String">
<column name="classname" />
</property>
</class>
</hibernate-mapping>
Student.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 >
<class name="com.yk.model.Student" table="student" catalog="hibernate" optimistic-lock="version">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="studentname" type="java.lang.String">
<column name="studentname" />
</property>
<many-to-one name="clas" class="com.yk.model.Class">
<column name="classid"></column>
</many-to-one>
</class>
</hibernate-mapping>
这里圈出来的就是配置的对象映射,有多对一,多对多等映射。
6.写一个获取SessionFactory的工具类,代码如下:
package com.yk.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
7.写一个主方法或者使用测试类,测试Hibernate是否成功映射,看控制台输出,测试代码如下:
package com.yk.Hibernate;
import org.hibernate.Session;
import com.yk.model.Student;
import junit.framework.TestCase;
public class HibernateTest extends TestCase {
private static Session session =null;
public static void main(String[] args) {
//从连接工厂获取连接
session = HibernateUtil.getSessionFactory().openSession();
//开启事务
session.beginTransaction();
//这里可以看出Hibernate使用的是jndi机制
Student stu = session.get(Student.class, 1);
System.out.println("学生ID:"+stu.getId()+"\n"+"学生姓名:"+stu.getStudentname()+"\n"+"班级信息:"+stu.getClas());
session.disconnect();
}
}
控制台输出结果:
结果可以看出,将数据库中的多对一关系映查询出来,输出信息正确,班级信息是以对象的形式输出。
- Eclipse整合Hibernate
- Eclipse + MyEclipse整合Struts+Spring+Hibernate简单例子开发
- eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)
- eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)
- Eclipse整合SSH框架(Struts2+Spring+Hibernate+MySQL+Tomcat)
- eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)
- 基于Eclipse搭建SSH框架:第三篇 整合Hibernate
- eclipse搭建struts2和hibernate整合开发环境
- struts整合spring整合hibernate
- 框架整合____Spring整合hibernate
- spring 整合hibernate整合方式
- eclipse 环境下整合 struts2+spring+hibernate 开发web应用常见问题及解答
- 使用Spring整合Hibernate的小例子,内含所有jar包导入Eclipse即可运行
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之六:Hibernate的flush和clear
- 最新eclipse整合Struts2.3.29+Hibernate5.2.1+Spring4.3.1(二)Struts+Hibernate篇
- 最新eclipse整合Struts2.3.29+Hibernate5.2.1+Spring4.3.1(三)Struts+Hibernate+spring篇
- Eclipse+Maven下Spring与Hibernate整合简单实例(小白入门)
- eclipse关于struts2整合hibernate遇到的导入包的问题
- 线程基础(2)
- vc程序可以运行但没结果
- shape【Android】
- 小游戏键盘操作
- intellij 出现“Usage of API documented as @since 1.6+”的解决办法
- Eclipse整合Hibernate
- 服务器管理
- UIWebView 自适应宽度
- tomcat
- hibernate实现多表联合查询
- 002——Binder 机制详解—Binder 系统架构
- 手把手教你玩转SOCKET模型之重叠I/0篇
- 那个突然下雪的上海,他和运维说了再见...
- struts2(二)