Hibernate 的应用(两种方式)
实例内容为Spring MVC +HIbernate的应用项目,easeMusic音乐热搜javaWeb项目
下载参考实例
下面来大致介绍一下easeMusic项目
1. Hibernate配置方式1(MVC结构下的配置)
2. HIbernate配置方式2(普通java项目下可应用)
项目结构如下图:
MVC结构下的配置
首先配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>EaseMusic</display-name>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
改配置与hibernate无关,是配置springMVC的前端控制器的,关于前端控制器的了解需先了解什么是springMVC
下面为配置hibernate的相关文件 spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:annotation-config />
<context:component-scan base-package="com.easeMusic.*" />
<!-- 支持MVC注解映射 -->
<mvc:annotation-driven />
<!-- 设定视图解释类 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/> <!-- view的路径 -->
<property name="suffix" value=".jsp"/> <!-- view的后缀 -->
</bean>
<!-- 访问以下静态资源时不需要经过前端控制器DispatchServlet -->
<!-- 开启注解 -->
<mvc:annotation-driven />
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/fonts/" mapping="/fonts/**"/>
<mvc:resources location="/image/" mapping="/image/**"/>
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages" />
<property name="defaultEncoding" value="utf-8" />
</bean>
<!-- 配置jdbc属性文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.properties" />
<!-- 配置数据源,数据源的属性值来自jdbc属性文件 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" />
<!-- 配置Hibernate的SessionFactory对象-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
</props>
</property>
<!-- 指定Hibernate配置文件的位置-->
<property name="configLocations">
<list>
<value>
classpath*:hibernate.cfg.xml
</value>
</list>
</property>
</bean>
<!-- 配置Spring事务注解-->
<tx:annotation-driven />
<!-- 配置Spring事务管理-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
具体注释已给出
改配置文件需配置相应的jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.password=
jdbc.driverClassName和jdbc.dialect为关于驱动的配置,我这里连接的是mysql数据库所以加载mysql驱动
jdbc.databaseurl配置连接数据库,与jdbc连接数据库方式相仿
jdbc.username和jdbc.password为mysql数据库的用户名和密码,我数据库的密码为空,所以不用填
接下来需在src中配置相应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>
<mapping class="com.easeMusic.model.User" />
<mapping class="com.easeMusic.model.Music" />
<mapping class="com.easeMusic.model.PlayList" />
<mapping class="com.easeMusic.model.Radio" />
</session-factory>
</hibernate-configuration>
这里是为了映射实体类的位置,通俗的讲是告诉hibernate实体类在哪里,我的项目中有四个需要连接数据库的实体,所以分别映射了四个实体类的位置
以其中一个实体类为例Music.java
package com.easeMusic.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="Music",schema = "springdb")
public class Music {
@Id
@Column(name="idno")
private String idno;
@Column(name="name")
private String name;
@Column(name="songSinger")
private String songSinger;
@Column(name="playurl")
private String url1;
@Column(name="downloadurl")
private String url2;
public String getIdno() {
return idno;
}
public void setIdno(String idno) {
this.idno = idno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl1() {
return url1;
}
public void setUrl1(String url1) {
this.url1 = url1;
}
public String getUrl2() {
return url2;
}
public void setUrl2(String url2) {
this.url2 = url2;
}
public String getSongSinger() {
return songSinger;
}
public void setSongSinger(String songSinger) {
this.songSinger = songSinger;
}
}
这个实体类是以注解的方式实现的,必须有实体类注解@Entity,@Table(name=”Music”,schema = “springdb”)分别代表表名和库名,@Id对应主键,@Column(name=”idno”)为属性对应数据库中的具体列名。
普通java项目的应用
由于 是普通java项目中的应用所以相对简单很多,无需在配置web.xml
和 spring-servlet.xml
在src目录下配置hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- Assume labex is the database name -->
<property name="hibernate.connection.url">
<![CDATA[jdbc:mysql://localhost:3306/springdb?useUnicode=true&characterEncoding=utf8]]>
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password"></property>
<!-- List of XML mapping files -->
<mapping resource="webcollector/collect/Music.hbm.xml"/>
<mapping resource="webcollector/collect/PlayList.hbm.xml"/>
<mapping resource="webcollector/collect/Radio.hbm.xml"/>
</session-factory>
</hibernate-configuration>
这里不用多说,类比前边的就很容易理解,内容为配置Mysql数据库驱动,映射实体类配置文件
实体类配置文件以Music.hbm.xml
为例
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="webcollector.collect.Music" table="Music">
<meta attribute="class-description">
This class contains the student detail.
</meta>
<id name="idno" column="idno" type="string"></id>
<property name="name" column="name" type="string"/>
<property name="songSinger" column="songSinger" type="string"/>
<property name="url1" column="playurl" type="string"/>
<property name="url2" column="downloadurl" type="string"/>
</class>
</hibernate-mapping>
下面是实体类Music.java
package webcollector.collect;
public class Music {
private String idno;
private String name;
private String songSinger;
private String url1;
private String url2;
public String getIdno() {
return idno;
}
public void setIdno(String idno) {
this.idno = idno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl1() {
return url1;
}
public void setUrl1(String url1) {
this.url1 = url1;
}
public String getUrl2() {
return url2;
}
public void setUrl2(String url2) {
this.url2 = url2;
}
public String getSongSinger() {
return songSinger;
}
public void setSongSinger(String songSinger) {
this.songSinger = songSinger;
}
}
通过观察前面MVC结构中注解形式的实体类即可理解这两个文件的意义,与MVC中的
Music.java
文件含义相同。