• MyEclipse下Spring+Hibernate整合


    目前,SSH(Struts+Spring+Hibernate)是Web开发的一种常用框架组合,Struts实现了MVC,Hibernate实现了关系对象映射,Spring实现了基于Bean的配置管理。本文使用 MyEclipse实现Spring+Hibernate的整合。
    软件和框架使用版本:

    • MyEclipse:8.0
    • Spring:2.5
    • Hibernate:3.2
    • MySQL:5.1

    创建数据库连接

    1. 首先在MyEclipse下切换Perspective至MyEclipse Database Explorer,在左侧DB Browser中右键点击,在对话框中选择“New”,创建数据库连接MySQL。数据库连接的配置如图1所示,需要填写URL、用户名、密码、驱动等信息。
      1
    2. 数据库连接配置成功后,左侧DB Browser中会显示该连接,右键点击该连接,在对话框中选择“Open connection”,显示数据库中的详细信息,如图2所示。在数据库中已有一user表,在下面将使用Spring+Hibernate实现对该表的操作。
      2

    新建Web工程,并配置Spring

    1. 切换Perspective至MyEclipse Java Enterprise,新建Web工程ssh,如图3所示。如果在随后的工作中还需整合Struts 2,则J2EE Specification Level应选择Java EE 5.0,此处暂选用默认配置J2EE 1.4。
      3
    2. 右键点击该工程,在对话框中选择“MyEclipse->Add Spring Capabilities…”,添加Spring,并进行相关配置,如图4所示,采用默认配置即可。
      4

    配置Hibernate

    1. 右键点击该工程,在对话框中选择“MyEclipse->Add Hibernate Capabilities…”,添加Hibernate,并进行相关配置,如图5、图6、图7、图8、图9所示。
      由于需要使用Spring配置Hibernate,因此选中所有的Library。
      5
    2. 选择Spring的配置文件applicationContext.xml进行配置。
      6
    3. 选择已有的Spring配置文件,并使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id为sessionFactory。
      7
    4. 配置数据源DataSource的bean id为dataSource,且其配置信息采用数据库连接MySQL。
      8
    5. 不另写SessionFactory类,而采用Spring为Hibernate已设计的SessionFactory类。
      9

    数据库逆向工程

    1. 切换Perspective至MyEclipse Hibernate,右键点击数据表user,在对话框中选择“Hibernate Reverse Engineering…”,对user表的关系对象映射进行配置,如图10所示,其中第一个红框用于选择Java源文件目录,第二个红框用于选择是否创建关系对象映射文件,以hbm.xml结尾,第三个红框用于选择是否创建数据对象类,第四个红框用于选择是否创建数据访问对象类,均选择是,其他采用默认配置即可。
      10

    分析和测试

    按上述步骤配置后就可以在工程中实现Spring和Hibernate的整合,以及user表的关系对象映射,工程目录如图11所示,其中src目录下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三个文件是与user表对应的数据对象类User.java、数据访问对象类UserDAO.java、关系对象映射文件User.hbm.xml。
    11
    applicationContext.xml内容如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/web"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>pojo/User.hbm.xml</value>
    </list>
    </property>
    </bean>
    <bean id="UserDAO" class="pojo.UserDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    </beans>

    其中,bean dataSource实现数据库连接配置,bean sessionFactory实现Hibernate的SessionFactory,并使用bean dataSource的连接配置,bean UserDAO实现User数据对象访问,并使用bean sessionFactory创建会话。
    User.java代码部分如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    大专栏  MyEclipse下Spring+Hibernate整合class="line">22
    23
    24
    25
    public class  implements java.io.Serializable {  



    private Integer id;
    private String password;
    private String name;
    private String school;

    // Constructors

    /** default constructor */
    public () {
    }

    /** full constructor */
    public (String password, String name, String school) {
    this.password = password;
    this.name = name;
    this.school = school;
    }

    // Property accessors
    ....
    }

    其中,对User对象类进行了定义,包括与user表字段对应的属性值、构造函数、Get/Set函数等。
    UserDAO.java代码部分如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class UserDAO extends HibernateDaoSupport {  
    private static final Log log = LogFactory.getLog(UserDAO.class);
    // property constants
    public static final String PASSWORD = "password";
    public static final String NAME = "name";
    public static final String SCHOOL = "school";

    protected void initDao() {
    // do nothing
    }

    public void save(User transientInstance) {
    log.debug("saving User instance");
    try {
    getHibernateTemplate().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    }
    ...
    }

    该类继承了Spring的HibernateDaoSupport类,调用对象实例本身的getHibernateTemplate获取HibernateTemplate对象,进而调用其save、delete等方法实现数据的增加、删改等操作。
    User.hbm.xml内容如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
    Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
    <class name="pojo.User" table="user" catalog="web">
    <id name="id" type="java.lang.Integer">
    <column name="id" />
    <generator class="identity" />
    </id>
    <property name="password" type="java.lang.String">
    <column name="password" length="10" not-null="true" />
    </property>
    <property name="name" type="java.lang.String">
    <column name="name" length="10" not-null="true" />
    </property>
    <property name="school" type="java.lang.String">
    <column name="school" length="30" not-null="true" />
    </property>
    </class>
    </hibernate-mapping>

    其中定义了user表和User类的关系对象映射。
    在UserDAO中编写一个主函数实现向user表中写入数据,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void main(String args[])  
    {
    //从src/applicationContext.xml装载BeanFactory
    Resource res =new FileSystemResource("src/applicationContext.xml");
    BeanFactory factory = new XmlBeanFactory(res);
    //从BeanFactory获取UserDAO
    UserDAO userDAO = (UserDAO) factory.getBean("UserDAO");
    //添加新User
    User user = new User("123","Tom","Tsinghua");
    userDAO.save(user);
    }

    执行后,查看user表,如果该表已新增一条记录,说明配置成功。
    12

  • 相关阅读:
    Chrome禁用缓存
    国内阿里Maven仓库镜像Maven配置文件Maven仓库速度快
    spring boot 之热部署
    Spring Boot的Maven插件Spring Boot Maven plugin详解
    在Extjs 的 TabPanel在 title标题栏上加按扭button
    Entity Framework 基于Oracle的code first 问题汇总
    面向对象设计原则
    Asp.Net MVC 缓存设计
    Asp.Net MVC 身份认证
    Asp.Net MVC 请求原理分析
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12284759.html
Copyright © 2020-2023  润新知