希望使用最小的例子,驱动出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;