您的位置:首页 > 编程语言 > Java开发

Spring+SpringMVC+Hibernate整合+入门笔记

2013-11-14 21:47 459 查看
新人自学SpringMVC,记录下学习心得,愿与众位分享。如有什么疏漏之处还望前辈们指教(求轻拍)

刚刚写了一篇日志,是写如何实现一个只有SpringMVC的项目的。现在这篇日志算是上一篇日志的续集,如果对SpringMVC一点也不了解的朋友请看我上一篇日志。上一篇日志链接——SpringMVC入门笔记

现在开始Spring+SpringMVC+Hibernate的整合

1.导入jar包

由于个人水平有限,没法像大神们一样精准的写出哪些jar包是干什么的,所以列出来的很多jar包可能是暂时用不到的。虽然臃肿点,不过导入这些jar包以后,项目是肯定能跑得起来的。

hibernate部分



然后是ojdbc6.jar

然后是Spring部分



Spring部分除此之外还有:

aspectj-1.6.10.jar、aspectjweaver-1.6.9.jar、org.springframework.web.servlet-3.1.3.RELEASE.jar

aspectj开头的jar包是能让Spring管理事务的jar包

2.修改web.xml

这里的web.xml与上一篇日志的没变化,不过也列在这里方便大家看

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet>
<servlet-name>spring3mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 如果不写这个init标签及其内容,那么SpringMVC的相关配置就要写在
与<servlet-name>中的内容一致的xml里 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 这里是配置文件的路径 -->
<param-value>classpath*:/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring3mvc</servlet-name>
<!-- url-pattern里的内容的意思代表:告诉程序什么样格式的url地址才能算是action,
并往action里走。对于我这里写的*.action的话,当我输入类似于findAll.action
这样的url时,才会让程序开始寻找相应的action -->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


3.添加applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 扫描com这个包里的所有类,把里面配上相应注解的类全都放在容器中进行管理 -->
<context:component-scan base-package="com"/>
<!-- 添加注解驱动 -->
<mvc:annotation-driven />
<!-- 定义跳转的文件的前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个
可用的url地址 -->
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<!-- 这里要根据自己用的什么数据库而变,我用的是oracle -->
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@KEWPIE-HP:1521:KEWPIE</value>
</property>
<property name="username">
<value>数据库用户名</value>
</property>
<property name="password">
<value>密码</value>
</property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<!-- 连接数据源 -->
<ref bean="dataSource"/>
</property>
<!--注解形式的配置,只写包路径就可以了-->
<property name="packagesToScan">
<list>
<value>com.bean</value>
</list>
</property>
<!-- 配置数据库方言 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>

<!-- 从这开始就是开启事务的配置了 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 在这里,我将事务控制在service层,如果你想改,就改底下那个括号里的包名什么的吧 -->
<aop:pointcut id="personDaoPC"
expression = "execution(* com.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="personDaoPC"/>
</aop:config>

<!-- 这个是我为了调试代码创建的一个dao -->
<bean id="userDao" class="com.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>


4.dao、service和action

dao和service接口的代码我就不贴出来了,就是简单地方法声明,其他什么也没有

dao的代码

package com.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.bean.User;
import com.dao.IUserDao;

/**
* 这里要注意,我继承了一个HibernateDaoSupport类,然后在Spring的配置文件中给这个类注入了一个
* 		sessionFactory。这是为了能得到Hibernate的Session对象
* @author 百木森森
*
*/
public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {

public List<User> findAll() {
//这里的getSession()方法是继承自父类的方法
return this.getSession().createQuery("from User").list();
}

public void modify(User user) {
this.getSession().update(user);
}

}


service的代码

package com.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.bean.User;
import com.dao.IUserDao;
import com.service.IUserService;

/**
* service层我用的注解的方式配的,所以没写在Spring配置文件里
* @author 百木森森
*
*/
@Service("userService")
public class UserServiceImpl implements IUserService {

@Resource
private IUserDao userDao;

public List<User> findAll() {
return this.userDao.findAll();
}

public void modify(User user) {
this.userDao.modify(user);
}

}
action代码

package com.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.bean.User;
import com.service.IUserService;

/**
* action层我也是用注解配的,这里面的注解@RequestMapping的具体作用见上一篇SpringMVC入门笔记
* @author 百木森森
*
*/
@Controller
@RequestMapping("testPath")
public class TestAction {

@Resource
private IUserService userService;

@RequestMapping("testMethod/testA")
public String test(){
System.out.println("进到了Action!");
List<User> list=this.userService.findAll();
for(User u:list){
System.out.println(u.getId()+","+u.getNickName());
}
return "success";
}
}


到此为止,启动项目以后,在地址栏中输入http://localhost:8080/springmvc11_14/testPath/testMethod/testA.action后可以成功跳转到success.jsp,而且也能成功的从数据库读取User集合。modify方法也试过了,可以成功修改数据,说明Spring自动管理事务没问题,能正常使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springmvc hibernate spring