前言
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 映射方式
- 注解方式
com.chronos.mssh.model
- 映射文件 *.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的简单整合(入门级),实现数据库的增删查改。