新人自学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与上一篇日志的没变化,不过也列在这里方便大家看
- <span style="font-size:14px;"><?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>
- </span>
3.添加applicationContext.xml
- <span style="font-size:14px;"><?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>
- </span>
4.dao、service和action
dao和service接口的代码我就不贴出来了,就是简单地方法声明,其他什么也没有
dao的代码
- <span style="font-size:14px;">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);
- }
- }
- </span>
service的代码
- <span style="font-size:14px;">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);
- }
- }
- </span>
- <span style="font-size:14px;">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";
- }
- }
- </span>
到此为止,启动项目以后,在地址栏中输入http://localhost:8080/springmvc11_14/testPath/testMethod/testA.action后可以成功跳转到success.jsp,而且也能成功的从数据库读取User集合。modify方法也试过了,可以成功修改数据,说明Spring自动管理事务没问题,能正常使用。