spring + spring mvc + hibernate整合

spring + spring mvc + hibernate 整合

说明:链接oracle maven项目 最基础的没有文件上传之类的包
重新加载oracle的jar文件

  • pom.xml
<properties>
		<!-- 解决ajax的json接收转换问题 -->
		<jackson.version>2.9.5</jackson.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>4.3.11.Final</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>javax.transaction</groupId>
			<artifactId>jta</artifactId>
			<version>1.1</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.10</version>
		</dependency>

		<!-- Spring start -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>4.2.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.8</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.21</version>
		</dependency>
		<!-- json自动转换 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
	<!-- josn  end -->
  • db.properties
#数据库驱动如果不配置,系统会根据url自动识别  #driverClassName=com.mysql.jdbc.Driver  
#URL  
druid.url=jdbc:oracle:thin:@localhost:1521:orcl
#用户名
druid.username=banxianyuan
#密码  
druid.password=banxianyuan
filters=stat
initialSize=5
#最大连接池数量  
maxActive=300
#获取连接时最大等待时间,单位毫秒  
maxWait=60000
#Destroy线程会检测连接的间隔时间  
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
#用来检测连接是否有效的sql,要求是一个查询语句  
validationQuery=SELECT1
#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,  
#如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。  
testWhileIdle=true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。  
testOnBorrow=false
 #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 
testOnReturn=false
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。  
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
  • 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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
       <import resource="applicationContext-tx.xml"/>
       
       <context:component-scan base-package="com.mokong">
         	<!-- 不扫描带@Controller的注解 -->
     		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
      </context:component-scan>
       <!--   加载外部配置文件 -->
     <context:property-placeholder location="classpath:db.properties"/>
   	 <!--  配置数据源 -->
   	 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
   	 		<property name="username" value="${druid.username}"></property>
   	 		<property name="password" value="${druid.password}"></property>
   	 		<property name="url" value="${druid.url}"></property>
   	 		<property name="initialSize" value="${initialSize}"></property>
   	 		<property name="maxWait" value="${maxWait}"></property>
   	 		<property name="maxActive" value="${maxActive}"></property>
   	 </bean>
   	 <!-- SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
			<property name="dataSource" ref="dataSource"></property>
			<property name="hibernateProperties">
				<props>
					<!-- 数据库方言 -->
					<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
					<!-- 展示sql -->
					<prop key="hibernate.show_sql">true</prop>
					<!-- 格式化SQL -->
					<prop key="hibernate.format_sql">true</prop>
					<!-- 自动创建表 -->
					<prop key="hibernate.hbm2ddl.auto">update</prop>
					<!-- 指定数据库用户名 仅限于ORACLE -->
					<prop key="default_schema">mokong</prop>
				</props>
			</property>
			<!-- 扫描实体类所在包 -->
			<property name="packagesToScan" value="com.mokong.stu.model"></property>
	</bean>
	<!-- 配置模板 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
			<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
</beans>
  • applicationContext-tx.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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
       <import resource="applicationContext-tx.xml"/>
       
       <context:component-scan base-package="com.mokong">
         	<!-- 不扫描带@Controller的注解 -->
     		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
      </context:component-scan>
       <!--   加载外部配置文件 -->
     <context:property-placeholder location="classpath:db.properties"/>
   	 <!--  配置数据源 -->
   	 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
   	 		<property name="username" value="${druid.username}"></property>
   	 		<property name="password" value="${druid.password}"></property>
   	 		<property name="url" value="${druid.url}"></property>
   	 		<property name="initialSize" value="${initialSize}"></property>
   	 		<property name="maxWait" value="${maxWait}"></property>
   	 		<property name="maxActive" value="${maxActive}"></property>
   	 </bean>
   	 <!-- SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
			<property name="dataSource" ref="dataSource"></property>
			<property name="hibernateProperties">
				<props>
					<!-- 数据库方言 -->
					<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
					<!-- 展示sql -->
					<prop key="hibernate.show_sql">true</prop>
					<!-- 格式化SQL -->
					<prop key="hibernate.format_sql">true</prop>
					<!-- 自动创建表 -->
					<prop key="hibernate.hbm2ddl.auto">update</prop>
					<!-- 指定数据库用户名 仅限于ORACLE -->
					<prop key="default_schema">mokong</prop>
				</props>
			</property>
			<!-- 扫描实体类所在包 -->
			<property name="packagesToScan" value="com.mokong.stu.model"></property>
	</bean>
	<!-- 配置模板 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
			<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
</beans>
  • log4j.properties
# Global  logging configuration  
log4j.rootLogger=DEBUG,stdout
  # Console  output...  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n
  • spring-mvc.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:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx" 
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    <!-- 启动时自动扫描该包下所有的Bean -->
    <context:component-scan base-package="com.mokong.*.controller" />
    <!--   静态资源放行   -->
   <mvc:default-servlet-handler/>
    <!-- 添加注解驱动 -->
    <mvc:annotation-driven />
    <!--所有的访问都统一先由InternalResourceViewResolver类处理-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--定义跳转的文件的前缀(jsp文件所在目录)-->
        <property name="prefix" value="/" />
        <!-- 定义跳转的文件的后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
  • wed.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<!--加载Spring配置文件 -->
 	<context-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>classpath:applicationContext.xml</param-value>
 	</context-param>
 	<!-- spring的监听 -->
 	<listener>
 		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 	</listener>
 	
 	<!-- 前端控制器配置 -->
 	<servlet>
 		<servlet-name>spring-mvc</servlet-name>
 		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 		<!-- 加载springmvc的配置文件 -->
 		<init-param>
 			<param-name>contextConfigLocation</param-name>
 			<param-value>classpath:spring-mvc.xml</param-value>
 		</init-param>
 		<!-- 当启动Tomcat时立即加载此Servlet -->
 		<load-on-startup>1</load-on-startup>
 	</servlet>
 	<servlet-mapping>
 			<servlet-name>spring-mvc</servlet-name>
 			<!-- restful风格 -->
 			<url-pattern>/</url-pattern>
 	</servlet-mapping>
 	
 	<!-- 配置中文乱码 -->
 	 <filter>  
        <filter-name>characterEncodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>characterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>
</web-app>

文件结构目录
在这里插入图片描述

  • 实体类 stu 带hibernate注解
package com.mokong.stu.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name="stu")
public class Stu implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="s_seq")
	@SequenceGenerator(allocationSize=1,name="s_seq",sequenceName="s_seq")
	//这里s_seq是oracle中序列
	private Integer id;
	@Column
	private String name;
	@Column
	private Integer age;
	@Column
	private Date birthday;
	public Stu() {
		// TODO Auto-generated constructor stub
	}
	public Stu(Integer id, String name, Integer age, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.birthday = birthday;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "Stu [id=" + id + ", name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
	}
}
  • 工具包 SessionFactoryUtils
package utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateTemplate;

public class SessionFactoryUtils {
	@Autowired
	private SessionFactory sessionFactory;
	@Autowired
	private HibernateTemplate hibernateTemplate;
	//获取Session的方法
	public Session getCurrentSession() {
		if(sessionFactory!=null) {
			return sessionFactory.getCurrentSession();
		}
		return null;
	}
	//获取模版
	public HibernateTemplate getTemplate() {
		return hibernateTemplate;
	}
}	
  • 创建dao层接口
package com.mokong.stu.dao;
import com.mokong.stu.model.Stu;
public interface StuDao_I {
	public Integer saveStudent(Stu stu);
	public void deleteId(Stu stu);
	public void update(Stu stu);
	public Stu getId(Stu stu);
}
  • 创建dao层接口的实例化
package com.mokong.stu.dao;

import org.springframework.stereotype.Repository;

import com.mokong.stu.model.Stu;

import utils.SessionFactoryUtils;

@Repository
public class StuDao extends SessionFactoryUtils implements StuDao_I {
	@Override
	public Integer saveStudent(Stu stu) {
		Integer i=(Integer) getTemplate().save(stu);
		return i;
	}
	@Override
	public void deleteId(Stu stu) {
		getTemplate().delete(stu);
	}
	@Override
	public void update(Stu stu) {
		getTemplate().update(stu);
	}
	@Override
	public Stu getId(Stu stu) {
		System.out.println("ss");
		Stu stu2 = (Stu)getTemplate().get(Stu.class, stu.getId());
		System.out.println(stu2);
		return stu2;
	}
}
  • 创建service层接口 这里的方法名要对应applicationContext-tx.xml设置的命名规则
package com.mokong.stu.service;
import com.mokong.stu.model.Stu;
public interface StuService_I {
	String saveStudent(Stu stu);
	String deleteId(Stu stu);
	String update(Stu stu);
	Stu getId(Stu stu);
}
  • 创建service层实例化
package com.mokong.stu.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mokong.stu.dao.StuDao_I;
import com.mokong.stu.model.Stu;

@Service
public class StuService implements StuService_I{
	
	@Autowired
	private StuDao_I stuDao;
	
	@Override
	public String saveStudent(Stu stu) {
		Integer saveStudent = stuDao.saveStudent(stu);
		return saveStudent>0?"添加成功":"添加失败";
	}

	@Override
	public String deleteId(Stu stu) {
	int i = 0;
		try {
			i++;
			stuDao.deleteId(stu);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return i<0?"删除成功":"删除失败";
	}

	@Override
	public String update(Stu stu) {
		int i = 0;
		try {
			i++;
			stuDao.update(stu);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return i<0?"修改成功":"修改失败";
	}

	@Override
	public Stu getId(Stu stu) {
		return stuDao.getId(stu);
	}
}
  • controller层
package com.mokong.stu.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mokong.stu.model.Stu;
import com.mokong.stu.service.StuService_I;
@Controller
@RequestMapping("stu")
public class StuController {


   @Autowired
   private StuService_I stuService; 
   
   @RequestMapping("save")
   @ResponseBody
   public String save(Stu stu) {
		String result = stuService.saveStudent(stu);
   	return result;
   }
   @RequestMapping("del")
   @ResponseBody
   public String deleteId(Stu stu) {
		String result = stuService.deleteId(stu);
   	return result;
   }
   @RequestMapping("update")
   @ResponseBody
   public String update(Stu stu) {
   	String result = stuService.update(stu);
   	return reult;
   }
   @RequestMapping("getId")
   @ResponseBody
   public Stu getId(Stu stu) {
   	Stu stu2 = stuService.getId(stu);
   	return stu2;
   }
}
  • 测试
    在controller层save方法点上debug
    在浏览器地址栏http://localhost:8080/stu/save?name=张三
    运行之后看数据库是否添加张三这条数据

猜你喜欢

转载自blog.csdn.net/banxianyuan/article/details/83015674