第一步:新建Web Project
1.勾选Add Maven support,添加Maven的支持
2.点击两次Next,勾选Generate web.xml,生成web.xml配置文件。
3.点击一次Next,选择Standard Maven JEE,标准的JEEMaven工程。
4.点击Finish完成工程的创建,工程的目录如下。
第二步:添加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";
}
}
如果表中存在数据,则成功取出。至此测试完成。