web.xml
<!-- Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/springAnnotation-*.xml</param-value>
</context-param>
<!-- Spring监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- SpringMVC配置 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- contextConfigLocation是个固定的参数 -->
<param-name>contextConfigLocation</param-name>
<!-- 加载配置文件 -->
<param-value>classpath*:config/springAnnotation-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
springAnnotation-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [
<!ENTITY contextInclude SYSTEM "org/springframework/web/context/WEB-INF/contextInclude.xml">
]>
<!-- hibernate5个对象-->
<!-- configLocations,sessionFactory,session ,transaction,Query-->
<beans>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 指定连接数据库的驱动 -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<!-- 指定连接数据库的URL -->
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
<!-- 指定连接数据库的用户名 -->
<property name="userName" value="spring"/>
<!-- 指定连接数据库的密码 -->
<property name="password" value="spring"/>
</bean>
<!--配置数据库会话工厂-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 引用数据源 -->
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<!-- hibernate属性配置 -->
<props>
<!-- 指定一种方言, 允许Hibernate针对特定的关系数据库生成优化的SQL -->
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10Dialect</prop>
<!--hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构 -->
<!-- 在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库. 使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema.
取值 validate | update | create | create-drop -->
<!-- update:第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),
以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。
要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!--输出所有SQL语句到控制台 -->
<prop key="hibernate.show_sql">true</prop>
<!--在log和console中打印出更漂亮的SQL。 取值 true | fals-->
<prop key="hiberante.format_sql">true</prop>
</props>
</property>
<property name="configLocations">
<list>
<value>
<!--配置映射的类-->
classpath*:com/tgb/web/controller/hibernate/hibernate.cfg.test.xml
</value>
</list>
</property>
</bean>
<!-- 配置事务容器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<!--配置事务的方法 -->
<!-- 定义事务规则 定义当遇到Exception异常时 回滚,- 表示抛出该异常时并回滚,+表示即使抛出该异常事务同样要提交-->
<!-- PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 -->
<prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<!-- PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常 -->
<prop key="get*">PROPAGATION_NEVER</prop>
</props>
</property>
</bean>
</beans>
hibernate.cfg.test.xml模板
<hibernate-configuration>
<session-factory>
<mapping class="com.tgb.web.controller.entity.User"/>
</session-factory>
</hibernate-configuration>
映射表的类
//实体User映射到表T_USER
@Entity
@Table(name="T_USER")
public class User {
@Id
//数据库中的主键生成器,值为uuid
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
@Column(length=32)
private String userName;
@Column(length=32)
private String age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
springAnnotation-servlet.xml
<!-- 注解扫描包 -->
<context:component-scan base-package="com.tgb.web.controller" />
<!-- 开启注解 -->
<mvc:annotation-driven/>
<!-- 视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
springAnnotation-core.xml
配置bean
<beans>
<bean id="userDao" class="com.tgb.web.controller.dao.UserDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userManagerBase" class="com.tgb.web.controller.service.UserManager">
<property name="userDao" ref="userDao"></property>
</bean>
<!--parent="transactionBese" 继承transactionBese(事务管理) -->
<!--ref="userManagerBase"" 实现userManagerBase -->
<bean id="userManager" parent="transactionBese">
<property name="target" ref="userManagerBase"></property>
</bean>
</beans>
配置bean的原因:
public class UserDAO implements IUserDAO {
//<bean id="userDao" class="com.tgb.web.controller.dao.UserDAO">
// <property name="sessionFactory" ref="sessionFactory"></property>
//</bean>
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void addUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
}
public class UserManager implements IUserManager {
// <bean id="userManagerBase" class="com.tgb.web.controller.service.UserManager">
//<property name="userDao" ref="userDao"></property>
//</bean>
private IUserDAO userDao;
public void setUserDao(IUserDAO userDao) {
this.userDao = userDao;
}
@Override
public void addUser(User user) {
userDao.addUser(user);
}
controller
@Controller
@RequestMapping("/user")
public class UserController {
@Resource(name="userManager")
private IUserManager userManager;
@RequestMapping("/toAddUser")
public String toAddUser(){
return "/addUser";
}