现在的位置: 首页 > 综合 > 正文

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

2017年09月12日 ⁄ 综合 ⁄ 共 6298字 ⁄ 字号 评论关闭

新人自学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自动管理事务没问题,能正常使用。

抱歉!评论已关闭.