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包。


  4.0.0
  com.chronos
  mssh
  war
  0.0.1-SNAPSHOT
  mssh Maven Webapp
  http://maven.apache.org
  
  
    
      junit
      junit
      3.8.1
      test
    
   
   
    
    		
    	org.springframework
    	spring-core
    	4.3.7.RELEASE
	
	
    	org.springframework
    	spring-context
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-beans
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-web
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-aop
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-tx
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-orm
    	4.3.7.RELEASE
	
			
		org.springframework
		spring-jdbc
		4.3.7.RELEASE
	
			
    	org.springframework
    	spring-expression
    	4.3.7.RELEASE
	
			
    	org.springframework
    	spring-test
    	4.3.7.RELEASE
	
    
    
    
    		
		org.aspectj
		aspectjweaver
		1.8.9
	
	
    
    
    	org.springframework
    	spring-webmvc
    	4.3.7.RELEASE
	
    
    
    
    
    
    	javax.servlet
    	javax.servlet-api
    	3.1.0
	
	
		javax.servlet.jsp
		jsp-api
		2.2
	
			
		javax.servlet
		jstl
		1.2
	
    
    
    
    
    	org.hibernate
    	hibernate-core
    	4.3.8.Final
	
	
    	org.hibernate
    	hibernate-entitymanager
    	4.3.8.Final
	
	
    	org.hibernate
    	hibernate-ehcache
    	4.3.8.Final
	
	
    
    
    
    		
    	com.alibaba
    	druid
    	1.0.18
	
			
		mysql
		mysql-connector-java
		5.1.39
	
    
    
    
     
    	com.alibaba
    	fastjson
    	1.2.12
	
    
    
    
    
    
		log4j
		log4j
		1.2.17
	
	
	
		org.apache.logging.log4j
		log4j-api
		2.6
	
	
	
		org.apache.logging.log4j
		log4j-core
		2.6
	
    
    
    
    
  
  
    mssh
  


  • 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、配置事务等。

 

	
	
	
	
		
	

	
	
	 	
        
        
        
        
        
        
        
         
        
        
        
         
        
        
        
        
        
        
        
        
        
        
        
        
        
	
	
	
	
	
		 
		 
			
				${hibernate.dialect}			
				${hibernate.show_sql} 		
				${hibernate.format_sql}		
				${hibernate.hbm2ddl.auto} 
				thread      
                ${driverClass}
                
    			
			
		
		
		
		
		     
			classpath:/com/chronos/mssh/model/*.hbm.xml
		 
	


	
	
		
	
	
	
	
	
	
	 
		 
			
			
			
			
			
			
			
				
			 
		
	
	 
		 
		 
	
	

###Hibernate 映射方式

  1. 注解方式

        
            
                com.chronos.mssh.model
            
         
  1. 映射文件 *.hbm.xml

                classpath:/com/chronos/mssh/model/*.hbm.xml 
         

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

事务配置方式

  • 注解方式配置事务
 
      
  • 拦截方式配置事务

 
     
        
        
        
        
        
        
        

         
    

 
     
     


```

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

Spring MVC 配置 spring-mvc.xml

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

 

	
	
	
	
	
	
	
		
		
		
	

Web.xml

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



	
	mssh
	
	
	
		contextConfigLocation
		classpath:spring.xml
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	  
      
        openSessionInViewFilter  
        org.springframework.orm.hibernate4.support.OpenSessionInViewFilter  
          
            singleSession  
            true  
          
          
            sessionFactoryBean  
            sessionFactory  
          
     
	
	
		springMVC
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring-mvc.xml
		
		1
	
	
		springMVC
		/
	
	
	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
		
			forceEncoding
			true
		
	
	
		encodingFilter
		/*
	
	
	
	
	
		index.jsp
	
	
	
	
	


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映射文件


 
	 
		 
				
		
		
		
		
		
		
		
	


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

  • 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

thread    
//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

你可能感兴趣的:(Maven+Spring+SpringMVC+Hibernate+Mysql整合开发)