Spring + Hibernate 项目配置(xml版本)

希望使用最小的例子,驱动出spring + hibernate集成项目的搭建, 该项目是在spring suit tool 上进行创建,使用其自带图形界面功能编辑bean的xml文件

同时在使用sts中发现,其中有一些小功能方便初学者使用,比如对于spring元素的图形化显示等,下面列出三点:

1. 创建一个spring的bean 配置文件

2. 使用图形界面添加namespace等(选项卡中有下面还有beans/context/tx/...)

3. 工程管理中查看spring相关的元素

可以看到spring对于bean的管理,并且给出不同bean的扫描来源

 

目录结构如下:

maven的依赖

<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>Hibernate.Demo</groupId>
  <artifactId>springHibernate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>springHibernate</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>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.10.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.7.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
    </dependency>
  </dependencies>
</project>

 

1. 测试用例开始

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:config/databaseContext.xml"})
public class TestHibernate {

	@Autowired
	private OrderDao orderdao;

	
	@Test
	public void testSaveOrder() {
		Order order = new Order("dfp");
		orderdao.save(order);	
		System.out.println(order.toString());
	}
}

 1. OrderDao的实现

@Repository
@Transactional
public class OrderDao {
	@Autowired
	private SessionFactory sessionFactory;
	
	public void save(Order order){
		getSession().save(order);
	}

	private Session getSession() {
		return sessionFactory.openSession();
	}
}

2. Order模型的建立

package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name = "orders")
public class Order 
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	private String name;
	public Order() {
		// TODO Auto-generated constructor stub
	}
	
	public Order(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Order [id=" + id + ", name=" + name + "]";
	}	
}

 简单的注意事项: 

 1. 需要默认的构造函数

 2. 如果希望通过类的方式创建数据库中的表需要使用hibernate.hbm2ddl进行配置(在配置hibernate sessionfactory项目中)

 

下面进行配置:

一、配置思路:

1. 全局配置

测试用例使用到了OfferDao,使用@AutoWired获取的,所以要在test使用的classpath:config/databaseContext.xml中配置好context scan

2. 配置bean

主要需要的bean是sessionFactory,同时sessionFactory需要依赖于dataSource

其中dataSource的配置可以通过写一个JdbcTemplate jdbc = new JdbcTemplate(dataSource)执行sql语句来验证

 

二、具体配置

 1. 加载bean文件

(1) 自动扫描功能和注解功能

目前用来扫描offerDao

<context:component-scan base-package="/database"></context:component-scan>
    <context:annotation-config></context:annotation-config>
    

下面是具体的Hibernate需要依赖的类的配置

(2)dataSource —— sessionFactory依赖dataSource

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="username" value="${jdbc.username}"></property>
    </bean>

${}可以通过jdbc.properties 进行配置

<context:property-placeholder location="config/jdbc.properties" />

(2) sessionFactory

dao使用该bean获取session,有session进行与数据库的交互, 同事注意update选项和show_sql选项在实现过程中的状态变化(默认应该是关闭的)

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="packagesToScan" value="model"></property> --- 扫描的Entity的路径
        <property name="hibernateProperties">
               <props>
                   <prop key="hibernate.show_sql">true</prop>  <!--  ———是否显示命令执行 -->                 
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- ——— 是否同步更新数据库中的表 -->         
              </props>
        </property>        
    </bean>

 

3.配置事务管理

    <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>    
    <tx:annotation-driven />

运行完用例,就可以看到数据库里面已经建立好了表,同时可以查看到已经添加的条目了。

 查询命令:

show tables;

select * from orders;

 

posted @ 2015-07-09 11:11  Tony_DFS  阅读(1057)  评论(0编辑  收藏  举报