MyEclipse2017CI下 Maven整合Spring4+Springmvc+HIbernate5详细过程

第一步:新建Web Project

1.勾选Add Maven support,添加Maven的支持

MyEclipse2017CI下 Maven整合Spring4+Springmvc+HIbernate5详细过程_第1张图片

2.点击两次Next,勾选Generate web.xml,生成web.xml配置文件。

MyEclipse2017CI下 Maven整合Spring4+Springmvc+HIbernate5详细过程_第2张图片

3.点击一次Next,选择Standard Maven JEE,标准的JEEMaven工程。

MyEclipse2017CI下 Maven整合Spring4+Springmvc+HIbernate5详细过程_第3张图片

4.点击Finish完成工程的创建,工程的目录如下。

MyEclipse2017CI下 Maven整合Spring4+Springmvc+HIbernate5详细过程_第4张图片

 

第二步:添加pom.xml文件的maven依赖包

1. properties节点下,定义三大框架以及其他一些jar包的版本属性

1.2
5.1.39
0.9.2.1
5.2.10.Final
5.4.0.Final
4.3.3.RELEASE
1.2.17
4.12

2. dependencies节点下,添加三大框架以及其他jar包的依赖,除了三大框架以为,其他jar包根据自己的需要添加。

                
			junit
			junit
			${junit.version}

		
		
			commons-logging
			commons-logging
			${commons.version}
		


		
		
			org.hibernate
			hibernate-core
			${hibernate.version}
		

		
			org.hibernate
			hibernate-validator
			${hibernate.validator.version}
		

		
			org.hibernate
			hibernate-entitymanager
			${hibernate.version}
		

		

		
		
			com.mchange
			c3p0
			${c3p0.version}
		
		

		
		
			mysql
			mysql-connector-java
			${mysql.version}
		
		

		
		
			org.springframework
			spring-core
			${spring.version}
		

		
			org.springframework
			spring-context
			${spring.version}
		

		
			org.springframework
			spring-context
			${spring.version}
		

		
			org.springframework
			spring-aop
			${spring.version}
		

		
			org.springframework
			spring-test
			${spring.version}
			test
		

		
			org.springframework
			spring-webmvc
			${spring.version}
		

		
			org.springframework
			spring-orm
			${spring.version}
		
		

		
		
			log4j
			log4j
			${log.version}
		
		

注意:添加依赖包的时候切勿覆盖了之前工程中已经有的依赖,否则会出现其他错误。

修改完pom.xml文件之后,点击左边工程目录,右键找到Maven,点击选择Update Projetct,更新一下依赖包,如果依赖包本地不存在则会去云端下载,耐心等待下载完成即可。

 

第三步:配置框架的配置文件

1. 在src/main/resources目录下新建applicationContext.xml文件,配置以下内容:








	
	

	
	
		
			
				classpath:db.properties
			

		
	


	
	
		
		
		
		

		
		

		
		
	

	
	
		
		
		
        
			
				classpath:{实际路径}/*.hbm.xml
			
		
		
			
				${hibernate.dialect}
				${hibernate.show_sql}
				${hibernate.hbm2ddl.auto}

				${hibernate.jdbc.batch_size}
				${hibernate.enable_lazy_load_no_trans}
			
		
	

	
	
		
	

	
	


2. 在src/main/resources目录下新建db.properties文件,配置以下内容:

#Mysql
driver_class=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/{数据库名}?characterEncoding=UTF-8
username=root
password={密码}
 
initPoolSize=5
maxPoolSize=10
 
#Hibernate config
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=false
#hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
hibernate.current_session_context_class=thread
 
hibernate.jdbc.batch_size=50
hibernate.enable_lazy_load_no_trans=true

3.  在src/main/resources目录下新建spring-mvc.xml文件,配置以下内容:





	
	

	
	

	
	
	
	
	
	
	
	
	
	
	
	


	
	
	
	
	
	

	
	
		
		      
		   
	


4. 打开src/main/webapp/WEB-INF/web.xml,添加以下配置:



	
		contextConfigLocation
		classpath:applicationContext.xml
	

	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
	
		springmvc
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			
			classpath*:/spring-mvc.xml
		
		1
	
	
		springmvc
		/
	


	
		SpringOpenSessionInViewFilter
		org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
	
	
		SpringOpenSessionInViewFilter
		/*
	


	
	
		encodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		encodingFilter
		/*
	

5. 添加log4j的配置文件,在src/main/resources目录下新建log4j.propertise,配置以下内容

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d\:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
### fatal error warn info debug trace
log4j.rootLogger=debug, stdout

至此,整个基础配置就算是完成了,项目右键运行,看看是否正常运行并访问根目录,出错则查出原因。

以下内容为测试:

一、测试springmvc

1. 新建一个Controller类,使用注解注册。

package ssh.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value="Demo")
public class DemoController {

	@RequestMapping(value="demo")
	public String demo(){
		
		System.out.println("demo");
		
		return "index";
	}
	
}

控制台打印demo则证明正常,如果出错:

1.1检查apoplicatonContext.xml的

是否正确配置。

1.2检查spring-mvc.xml的

是否正确配置。

二、测试Hibernate,通过一个完成的业务流程来测试Hibernate

假定需求:通过id查询用户表,已有数据库表user,字段id,name,age

1.通过Hibernate reverse engine生成POJO类以及对应的映射xml

User.java

package com.shuidi168.server.entity;

import java.io.Serializable;

/**
 * User entity. @author MyEclipse Persistence Tools
 */

public class User implements Serializable {

	// Fields

	private Integer id;
	private String name;
	private Integer age;

	// Constructors

	/** default constructor */
	public User() {
	}

	/** full constructor */
	public User(String name, Integer age) {
		this.name = name;
		this.age = age;
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return this.age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

User.hbm.xml





    
        
            
            
        
        
            
        
        
            
        
    

2.新建IBaseDao接口,定义基础的增删改查,并实现BaseDaoImpl

package com.shuidi168.server.Dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

public interface IBaseDao {
	void save(T t);
	void delete(T t);
	void delete(Serializable id);
	void update(T t);
	T	getById(Serializable id);
	
}
package com.shuidi168.server.Dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.shuidi168.server.Dao.IBaseDao;

public class BaseDaoImpl extends HibernateDaoSupport implements IBaseDao {
	
	private Class clazz;//用于接收运行时的泛型类型
	
	public BaseDaoImpl() {
		//获得当前类型的带有泛型类型的父类
		ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
		//获得运行期的泛型类型
		clazz = (Class) ptClass.getActualTypeArguments()[0];
	}
	
	@Resource
	public void setMySessionFactory(SessionFactory sessionFactory){
		super.setSessionFactory(sessionFactory);
	}

	@Override
	public void save(T t) {
		getHibernateTemplate().save(t);
	}

	@Override
	public void delete(T t) {
		getHibernateTemplate().delete(t);
		
	}

	@Override
	public void delete(Serializable id) {
		T t = this.getById(id);
		delete(t);
	}

	@Override
	public void update(T t) {
		getHibernateTemplate().update(t);
		
	}

	@Override
	public T getById(Serializable id) {
		return (T)getHibernateTemplate().get(clazz, id);
	}

}

3. 新建IUserDao接口继承IBaseDao,并新建实现类,继承BaseDaoImpl并实现IUserDao

package com.shuidi168.server.Dao;

import com.shuidi168.server.entity.User;

public interface IUserDao extends IBaseDao {

}
package com.shuidi168.server.Dao.impl;

import org.springframework.stereotype.Repository;

import com.shuidi168.server.Dao.IUserDao;
import com.shuidi168.server.entity.User;

@Repository
public class UserDaoImpl extends BaseDaoImpl implements IUserDao{

}

3.新建IUserService接口,并实现UserServiceImpl

package com.shuidi168.server.service;

import com.shuidi168.server.entity.User;

public interface IUserService {
	
	User getById(Integer id);

}
package com.shuidi168.server.service.impl;

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

import com.shuidi168.server.Dao.IUserDao;
import com.shuidi168.server.entity.User;
import com.shuidi168.server.service.IUserService;

@Service
@Transactional
public class UserServiceImpl implements IUserService {

	@Autowired
	private IUserDao userDao; 

	@Override
	public User getById(Integer id) {
		return userDao.getById(id);
	}

}

4.在DemoController类中测试

package com.shuidi168.server.controller;

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

import com.shuidi168.server.entity.User;
import com.shuidi168.server.service.IUserService;

@Controller
@RequestMapping(value="Demo")
public class DemoController {
	
	@Autowired
	private IUserService userService;
	
	
	@RequestMapping(value="getUser")
	public String demo(){
		User user = userService.getById(1);
		System.out.println(user.getName());
		return "index";
	}

}

如果表中存在数据,则成功取出。至此测试完成。

你可能感兴趣的:(JavaWeb)