Hibernate 的应用(两种方式)

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.xmlspring-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文件含义相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值