Maven+Spring+SpringMVC+Hibernate+Mysql整合开发 - Go语言中文社区

Maven+Spring+SpringMVC+Hibernate+Mysql整合开发


前言

Maven+Spring+SpringMVC+Hibernate+Mysql的简单整合(入门级),实现数据库的增删查改。Maven管理项目,统一开发规范和工具、统一管理Jar包。Spring轻量级的Java开发框架、控制反转IOC和依赖注入DI来管理对象依赖关系.、面向切面编程AOP来管理事物等。SpringMVC轻量级Web框架,使用MVC架构思想对web层进行解耦,简化开发。Hibernate全自动ORM(对象关系映射)框架,是持久层的框架,使我们采用对象化的思维操作关系型数据库。Mysql关系型数据库。

开发环境

  • JDK 1.7
  • Tomcat 7
  • Spring 4.3.7
  • SpringMVC 4.3.7
  • Hibernate 4.3.8
  • Maven 3.3
  • Eclipse

新建项目

File-->New-->other..-->Maven Project-->Next-->Next

输入图片说明

选择Maven的webapp项目。

输入图片说明

填写 Group id、Artifact Id、Version、Package ,点击Finish完成。

  • Group id 公司或组织名称
  • Artifact Id 项目名称
  • Version 版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本
  • Package 包名 由Group ID和Artifact ID生成。

** 注:groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标**

项目结构

输入图片说明

  • src/main/java java代码目录
  • src/main/resources 配置文件目录
  • pom.xml Maven的管理配置文件,jar包配置文件。
  • spring.xml Spring + Hibernate 配置文件
  • spring-mvc.xml Spring MVC配置文件
  • config.properties 数据库参数配置文件
  • log4j.properties log4j日志配置文件

Maven管理配置 pom.xml

使用Maven管理项目,统一开发规范和工具,统一管理jar包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.chronos</groupId>
  <artifactId>mssh</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mssh Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
  <!-- 测试相关 start -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
   <!-- 测试相关 end -->
   
    <!-- spring 相关  -->
    <dependency>		<!-- spring核心工具包 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-core</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- springIOC基础实现 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-beans</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- spring web相关核心 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-web</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- aop 面向切面编程 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-aop</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- 事务 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-tx</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- orm 整合第三方orm实现 -->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-orm</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- 对JDBC 的简单封装 -->
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- spring 表达式语言-->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-expression</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
	<dependency>		<!-- 测试框架-->
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-test</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
    
    <!-- spring 相关  -->
    
    <dependency>		<!-- aop依赖包 -->
		<groupId>org.aspectj</groupId>
		<artifactId>aspectjweaver</artifactId>
		<version>1.8.9</version>
	</dependency>
	
    <!-- spring mvc 相关 -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-webmvc</artifactId>
    	<version>4.3.7.RELEASE</version>
	</dependency>
    
    <!-- spring mvc 相关 -->
    
    <!-- web相关 start -->
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>javax.servlet-api</artifactId>
    	<version>3.1.0</version>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.2</version>
	</dependency>
	<dependency>		<!-- jstl标签 -->
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
    <!-- web相关 end -->
    
    <!-- hibernate相关 start-->
    <dependency>
    	<groupId>org.hibernate</groupId>
    	<artifactId>hibernate-core</artifactId>
    	<version>4.3.8.Final</version>
	</dependency>
	<dependency>
    	<groupId>org.hibernate</groupId>
    	<artifactId>hibernate-entitymanager</artifactId>
    	<version>4.3.8.Final</version>
	</dependency>
	<dependency>
    	<groupId>org.hibernate</groupId>
    	<artifactId>hibernate-ehcache</artifactId>
    	<version>4.3.8.Final</version>
	</dependency>
	
    <!-- hibernate相关 end -->
    
    <!-- 数据库相关 -->
    <dependency>		<!-- 阿里druid连接池 -->
    	<groupId>com.alibaba</groupId>
    	<artifactId>druid</artifactId>
    	<version>1.0.18</version>
	</dependency>
	<dependency>		<!-- mysql驱动 -->
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.39</version>
	</dependency>
    <!-- 数据库相关 -->
    
    <!-- json相关 -->
     <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.12</version>
	</dependency>
    <!-- json相关 -->
    
    
    <!-- 日志相关 statr -->
    <dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>
	
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-api</artifactId>
		<version>2.6</version>
	</dependency>
	
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.6</version>
	</dependency>
    
    
    <!-- 日志相关 end -->
    
  </dependencies>
  <build>
    <finalName>mssh</finalName>
  </build>
</project>

  • modelVersion 指定当前Maven模型的版本号
  • group id 公司或组织名称
  • artifact Id 项目名称
  • version 版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本
  • packaging 项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar
  • dependencies 和 dependency 表示依赖,前者包含后者
  • build 表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称

数据库配置 config.properties

数据库的相关配置,包括数据库驱动、链接url、用户名、密码、数据库名称,连接的初始化大小、最小、最大、等待时间,hibernate的方言dialect等属性。

##mysql数据库
driverClass=com.mysql.jdbc.Driver 
url=jdbc:mysql://127.0.0.1:3306/mssh?useUnicode=true&characterEncoding=UTF-8
user=root
password=root
dbname=mssh

##oracle数据库
#driverClass=oracle.jdbc.OracleDriver
#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#username=ptest
#password=password
#dbname=orcl

#配置初始化大小、最小、最大 、等待时间
initialSize=1  
minIdle=1
maxIdle=20  
maxActive=100
maxWait=60000

##hiberate属性
hibernate.hbm2ddl.auto=update
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true

Spring+Hibernate 配置 Spring.xml

Spring和Hibernate的相关配置、包括自动扫描、配置数据库datasource、配置sessionFactory、配置事务等。

<?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:mvc="http://www.springframework.org/schema/mvc"
	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/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd">
	<!-- 加载config资源文件 其中包含变量信息,必须在Spring配置文件的最前面加载,即第一个加载 -->
	<context:property-placeholder location="classpath:config.properties"/>
	<!-- 自动扫描dao和service包(自动注入) 排除过滤@Controller-->
	<context:component-scan base-package="com.chronos.mssh">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>

	<!-- 配置数据源 阿里druid -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 
			init-method="init" destroy-method="close">
	 	<!-- 数据库驱动 -->
        <property name="driverClassName" value="${driverClass}" />
        <!-- 基本属性 url、user、password -->
        <property name="url" value="${url}" />
        <property name="username" value="${user}" />
        <property name="password" value="${password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${initialSize}" />
        <property name="minIdle" value="${minIdle}" /> 
        <property name="maxActive" value="${maxActive}" />
        <!-- 配置获取连接等待超时的时间 6000-->
        <property name="maxWait" value="${maxWait}" />
         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <property name="validationQuery" value="SELECT 'x'" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
        <!-- 配置监控统计拦截的filters -->
        <!-- <property name="filters" value="stat" />  -->
	
	</bean>
	
	<!-- session Factory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/> <!-- 数据源 -->
		<property name="hibernateProperties"> <!-- hibernate属性 -->
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>			<!-- sql方言 -->
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 		<!-- 输出sql到控制台 -->
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>		<!-- 打印漂亮的sql -->
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <!-- 自动创建|更新|验证数据库表结构 -->
				<prop key="current_session_context_class">thread</prop>      
                <prop key="hibernate.connection.driver_class" >${driverClass}</prop>
                <!-- 使用二级缓存和查询缓存,提高性能 -->
    			<!-- <prop key="hibernate.cache.use_query_cache">true</prop>
    			<prop key="hibernate.cache.provider_class">
     				org.hibernate.cache.EhCacheProvider
    			</prop> -->
			</props>
		</property>
		<!--1、 自动扫描注解方式配置的hibernate类文件 -->
		<!-- <property name="packagesToScan">
			<list>
				<value>com.chronos.mssh.model</value>
			</list>
		</property>  -->
		<!--2、 映射配置文件*.hbm.xml -->
		 <property name="mappingLocations">  <!-- mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations -->  
			<value>classpath:/com/chronos/mssh/model/*.hbm.xml</value>
		</property> 
	</bean>


	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!--1、 注解方式配置事务 -->
	<!-- <tx:annotation-driven transaction-manager="transactionManager"/> -->
	
	<!--2、 拦截方式配置事务 -->
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <!-- 事务通知定义 -->
		<tx:attributes> <!-- 指定拦截的方法 -->
			<tx:method name="save*" propagation="REQUIRED"/><!-- propagation传播行为 -->
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="modify*" propagation="REQUIRED"/>
			<tx:method name="edit*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="remove*" propagation="REQUIRED"/>
				
			<tx:method name="*" propagation="REQUIRED"/> <!-- 拦截其它所有* -->
		</tx:attributes>
	</tx:advice>
	<aop:config> <!-- aop相关配置 -->
		<aop:pointcut id="aopPointcut" expression="execution(* com.chronos.mssh.service..*Impl.*(..))" /> <!-- 切入点定义 -->
		<aop:advisor pointcut-ref="aopPointcut" advice-ref="transactionAdvice"/> <!-- 通知Advisor定义 -->
	</aop:config>
	
</beans>

###Hibernate 映射方式

  1. 注解方式
<!--1、 自动扫描注解方式配置的hibernate类文件 -->
        <property name="packagesToScan">
            <list>
                <value>com.chronos.mssh.model</value>
            </list>
        </property> 
  1. 映射文件 *.hbm.xml
<!--2、 映射配置文件*.hbm.xml -->
        <property name="mappingLocations"> <!--mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations-->       <value>classpath:/com/chronos/mssh/model/*.hbm.xml</value> 
        </property> 

建议采用映射文件的方式。

事务配置方式

  • 注解方式配置事务
 <!--1、 注解方式配置事务 -->
     <tx:annotation-driven transaction-manager="transactionManager"/> 
  • 拦截方式配置事务

<!--2、 拦截方式配置事务 -->

<tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <!-- 事务通知定义 -->
    <tx:attributes> <!-- 指定拦截的方法 -->
        <tx:method name="save*" propagation="REQUIRED"/><!-- propagation传播行为 -->
        <tx:method name="add*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="modify*" propagation="REQUIRED"/>
        <tx:method name="edit*" propagation="REQUIRED" />
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="remove*" propagation="REQUIRED"/>

        <tx:method name="*" propagation="REQUIRED"/> <!-- 拦截其它所有* -->
    </tx:attributes>
</tx:advice>
<aop:config> <!-- aop相关配置 -->
    <aop:pointcut id="aopPointcut" expression="execution(* com.chronos.mssh.service..*Impl.*(..))" /> <!-- 切入点定义 -->
    <aop:advisor pointcut-ref="aopPointcut" advice-ref="transactionAdvice"/> <!-- 通知Advisor定义 -->
</aop:config>

```

** 建议采用拦截方式配置事务。**

Spring MVC 配置 spring-mvc.xml

Spring MVC相关配置,配置扫描Controller、开启自动扫描、视图解析配置等。

<?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:mvc="http://www.springframework.org/schema/mvc"
	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/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd">
	<!-- 扫描Controll -->
	<context:component-scan base-package="com.chronos.mssh.controller"></context:component-scan>
	<!-- 开启自动扫描 -->
	<mvc:annotation-driven/>
	
	<!-- 支持视图解析-->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

Web.xml

web项目的相关配置。包括配置contextConfigLocation定义要装入的配置文件(如spring和Hibernate配置文件),配置前端控制器(DispatcherServlet). 配置字符集过滤器(encodingFilter)、默认访问页面、错误访问页面等。

<?xml version="1.0" encoding="UTF-8"?>
<web-app	
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">
	
	<display-name>mssh</display-name>
	
	<!-- 配置spring hibernate -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- openSessionInView配置 -->  
    <filter>  <!-- 把一个Hibernate Session和一次完整的请求过程对应的线程相绑定 -->
        <filter-name>openSessionInViewFilter</filter-name>  
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
        <init-param>  <!-- singleSession默认为true,若设为false则等于没用OpenSessionInView 。所以默认可以不写-->
            <param-name>singleSession</param-name>  
            <param-value>true</param-value>  
        </init-param>  
        <init-param>  <!-- sessionFactoryBean默认为sessionFactory,改参数一定要指定,所以默认可以不写-->
            <param-name>sessionFactoryBean</param-name>  
            <param-value>sessionFactory</param-value>  
        </init-param>  
    </filter> 
	<!-- 配置spring-MVC -->
	<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.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>
	
	<!-- 字符集过滤器   -->
	<filter>
		<filter-name>encodingFilter</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>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	
	<!-- 默认访问页面 -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<!-- 错误页面处理 -->
	<!-- 
	<error-page>
		<error-code>403</error-code>
		<location>/WEB-INF/error/error403.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/WEB-INF/error/error404.jsp</location>
	</error-page>
	<error-page>
		<error-code>405</error-code>
		<location>/WEB-INF/error/error405.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/WEB-INF/error/error500.jsp</location>
	</error-page>
	 -->
	
</web-app>

Java 代码

输入图片说明

创建Contoller层、Service层、dao层以及实体model和映射文件

1、Model

创建实体和映射文件 或 注解,运行程序后,HIbernate会自动在数据库创建表。

通过映射文件方式映射实体和表

  • User 实体
package com.chronos.mssh.model;
import java.util.List;
/**
 * 用户实体
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:05:20
 */
public class User {
	private Integer id;			//id,主键
	private String userName;	//用户名称
	private String password;	//登录密码
	private	String nickName;	//昵称
	private Integer age;		//年龄
	private boolean sex;		//性别
	private String signature;	//个性签名
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public boolean isSex() {
		return sex;
	}
	public void setSex(boolean sex) {
		this.sex = sex;
	}
	public String getSignature() {
		return signature;
	}
	public void setSignature(String signature) {
		this.signature = signature;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}	
}
  • User.hbm.xml映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping  > <!-- 根元素  属性package:包名 -->
	<class name="com.chronos.mssh.model.User" table="user"> <!-- 子元素,name:持久化类,table:数据库表名 -->
		<id name="id" column="id"  type="integer"> <!-- 主键 -->
			<generator class="native" />	<!-- 主键生成策略 -->
		</id>
		<property name="userName" column="username" type="string"/>
		<property name="password" column="password" type="string"/>
		<property name="nickName" column="nickname" type="string"/>
		<property name="age" column="age" type="integer"/>
		<property name="sex" column="sex" type="boolean"/>
		<property name="signature" column="signature" type="string"/>
	</class>

</hibernate-mapping>

通过注解方式 映射实体和表

  • User实体
package com.chronos.mssh.model;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GeneratorType;

/**
 * 用户实体
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:05:20
 */
@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;			//id,主键
	private String userName;	//用户名称
	private String password;	//登录密码
	private	String nickName;	//昵称
	private Integer age;		//年龄
	private boolean sex;		//性别
	private String signature;	//个性签名
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public boolean isSex() {
		return sex;
	}
	public void setSex(boolean sex) {
		this.sex = sex;
	}
	public String getSignature() {
		return signature;
	}
	public void setSignature(String signature) {
		this.signature = signature;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}

2、Controller层

package com.chronos.mssh.controller;

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

import com.chronos.mssh.model.User;
import com.chronos.mssh.service.IUserService;

/**
 * 用户controller层
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:41:11
 */
@Controller
@RequestMapping("/user")
public class UserController {

	@Autowired
	private IUserService userService;
	
	@RequestMapping("/addUser")
	private String addUser(){
		
		User user = new User();
		user.setUserName("chronos");
		user.setPassword("123456");
		user.setAge(1);
		user.setSex(true);
		user.setSignature("代码改变世界!");
		user.setNickName("chronos");
		this.userService.addUser(user);
		
		return "welcome";
	}
	public IUserService getUserService() {
		return userService;
	}
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
}

注解:

  • @Controller 标识控制层
  • @RequestMapping() 用来处理请求地址映射
  • @Autowired 自动装配 ,按照byType注入

3、Service层

  • IUserService接口
package com.chronos.mssh.service;

import com.chronos.mssh.model.User;

/**
 * 用户service层接口
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:42:16
 */
public interface IUserService {

	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	void addUser(User user);
}

  • UserServiceImpl
package com.chronos.mssh.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.chronos.mssh.dao.IUserDao;
import com.chronos.mssh.model.User;
import com.chronos.mssh.service.IUserService;
/**
 * 用户service层实现
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:42:34
 */
@Service
public class UserServiceImpl implements IUserService {

	@Autowired
	private IUserDao userDao;
	
	@Override
	public void addUser(User user) {
		
		this.userDao.addUser(user);
	}

	public IUserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}
	
}

注解

  • @Service 标识业务层
  • @Autowired 自动装配,按照byType注入

4、dao层

  • IUserDao 接口
package com.chronos.mssh.dao;

import com.chronos.mssh.model.User;

/**
 * 用户dao层接口
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:41:37
 */
public interface IUserDao {
	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	void addUser(User user);
}

  • UserDaoImpl 实现
package com.chronos.mssh.dao.impl;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.chronos.mssh.dao.IUserDao;
import com.chronos.mssh.model.User;
/**
 * 用户dao层实现
 * 
 * @author chronos
 * @date 2017年4月26日 下午1:41:58
 */
@Repository
public class UserDaoImpl implements IUserDao {

	@Autowired
	private SessionFactory sessionFactory;
	
	@Override
	public void addUser(User user) {
		// TODO Auto-generated method stub
		Session session = sessionFactory.getCurrentSession();
		session.save(user);
	}
}

注解:

  • @Repository 标识数据访问层
  • @Autowired 自动装配,按照byType注入

** session获取方式**

  • getCurrentSession()方法
Session session = sessionFactory.getCurrentSession();
// getCurrentSession和当前线程绑定,在事务结束后会自动关闭

必须开启事务,同时配置Hibernate

<prop key="current_session_context_class">thread</prop>    
//jta 、 thread 常用 , custom、managed 少用,
//thread使用connection 单数据库连接管理事务
//jta (Java transaction api) Java 分布式事务管理 (多数据库访问),jta 由中间件提供(JBoss WebLogic 等, 但是tomcat 不支持)
  • openSession()方法
Session session = sessionFactory.openSession();
//openSession没有绑定当前线程,所以,使用完后必须关闭
session.close();

** 建议使用getCuttentSession()方法获取。**

创建数据库

打开Nvaicat 软件,连接mysql,创建新的数据库mssh

输入图片说明

可以创建表,也可以不创建表,** Hibernate会根据实体自动创建表**。

部署运行

将项目部署在Tomcat中运行

在浏览器访问 http://localhost:8080/mssh/user/addUser

查看数据库,数据库成功插入一条记录 输入图片说明

总结

以上是Maven+Spring+SpringMVC+Hibernate+Mysql的简单整合(入门级),实现数据库的增删查改。

转载于:https://my.oschina.net/u/3167892/blog/893869

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/chenjian3252/article/details/100789994
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-24 22:11:35
  • 阅读 ( 1412 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢