spring+hibernate项目demo搭建
之前用maven+spring+mybatis+spring mvc搭建了一个web项目,用于学习spring及相关知识,现在打算将mybatis换成hibernate,一样搭建一个框架。
其实mybatis或者hibernate都只是orm框架,负责数据持久层的工作,spring对这二者都提供了较好的支持。只不过在具体的实现配置上有一些差异。
话不多说,接下来以一个实例一步一步介绍如何搭建spring+hibernate的框架。
1.新建maven项目
导入必要的jar包。关于如何新建maven项目,可以看这篇文章。maven安装配置及使用maven创建一个web项目
2.引入jar包
我们来看下maven项目的pom.xml文件,这份文件是我从之前做maven+spring+mybatis+spring mvc项目的pom.xml文件中拷贝过来,并且将其中的mybatis相关包换成hibernate的相关包。
<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.</modelVersion>
<groupId>com.xdx</groupId>
<artifactId>warrior_hibernate</artifactId>
<packaging>war</packaging>
<version>0.0.-SNAPSHOT</version>
<name>warrior_hibernate Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2..RELEASE</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2..RELEASE</version>
</dependency>
<!-- jdbc驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.-dmr</version>
</dependency>
<!-- hibernate核心包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3..Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3..Final</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.</version>
</dependency>
<!-- 打印日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.</version>
</dependency>
<!-- 其他 -->
<!-- jsp标签 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- net.sf.json-lib -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- websocket -->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.</version>
</dependency>
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.-beta</version>
</dependency>
<!-- 百度富文本 -->
<dependency>
<groupId>com.github.qiuxiaoj</groupId>
<artifactId>ueditor</artifactId>
<version>1.1.</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version></version>
</dependency>
<!-- 防止responseBody中文乱码 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.</version>
</dependency>
<!-- 邮件 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>smtp</artifactId>
<version>1.6.</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>mailapi</artifactId>
<version>1.6.</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.</version>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8..RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3..RELEASE</version>
<type>pom</type>
</dependency>
<!-- 照片处理 -->
<dependency>
<groupId>com.mortennobel</groupId>
<artifactId>java-image-scaling</artifactId>
<version>0.8.</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 第三方统计 -->
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-core</artifactId>
<version>1.69.</version>
</dependency>
</dependencies>
<build>
<finalName>warrior_hibernate</finalName>
</build>
</project>
主要的包是spring核心包,hibernate核心包,jdbc驱动,以及测试包等,其他包是今后扩展功能的时候用到的,暂时可以不用。
这边还需要注意的是,我本来用的是hibernate5.x的包,但是在启动项目的时候报错了,最后查出是因为包的版本太高,与spring的jar包发生了冲突,后面将其降为hibernate4.x才排除了错误。具体的排错过程,可以看这里。tomcat启动失败的一种可能性
3.建立数据库
并且建表。选取其中一个表t_admin,其表结构如下图所示。
4.建立实体对象
既然是用hibernate,则需要为数据库的表对象建立相应的java实体对象。具体可以参考这边文章。使用Myeclipse为数据表创建hibernate实体对象
创建后的实体文件如下所示。
TAdmin.java
package com.xdx.entity; import java.sql.Timestamp; /**
* TAdmin entity. @author MyEclipse Persistence Tools
*/ public class TAdmin implements java.io.Serializable { // Fields private Integer adminId;
private String adminName;
private String password;
private String realName;
private Integer roleId;
private Timestamp createTime;
private Timestamp updateTime;
private Integer isDel; // Constructors /** default constructor */
public TAdmin() {
} /** minimal constructor */
public TAdmin(String password, Integer roleId, Timestamp createTime,
Integer isDel) {
this.password = password;
this.roleId = roleId;
this.createTime = createTime;
this.isDel = isDel;
} /** full constructor */
public TAdmin(String adminName, String password, String realName,
Integer roleId, Timestamp createTime, Timestamp updateTime,
Integer isDel) {
this.adminName = adminName;
this.password = password;
this.realName = realName;
this.roleId = roleId;
this.createTime = createTime;
this.updateTime = updateTime;
this.isDel = isDel;
} // Property accessors public Integer getAdminId() {
return this.adminId;
} public void setAdminId(Integer adminId) {
this.adminId = adminId;
} public String getAdminName() {
return this.adminName;
} public void setAdminName(String adminName) {
this.adminName = adminName;
} public String getPassword() {
return this.password;
} public void setPassword(String password) {
this.password = password;
} public String getRealName() {
return this.realName;
} public void setRealName(String realName) {
this.realName = realName;
} public Integer getRoleId() {
return this.roleId;
} public void setRoleId(Integer roleId) {
this.roleId = roleId;
} public Timestamp getCreateTime() {
return this.createTime;
} public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
} public Timestamp getUpdateTime() {
return this.updateTime;
} public void setUpdateTime(Timestamp updateTime) {
this.updateTime = updateTime;
} public Integer getIsDel() {
return this.isDel;
} public void setIsDel(Integer isDel) {
this.isDel = isDel;
} }
TAdmin.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.xdx.entity.TAdmin" table="t_admin" catalog="qgranite">
<id name="adminId" type="java.lang.Integer">
<column name="admin_id" />
<generator class="native" />
</id>
<property name="adminName" type="java.lang.String">
<column name="admin_name" length="100" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="100" not-null="true" />
</property>
<property name="realName" type="java.lang.String">
<column name="real_name" length="100" />
</property>
<property name="roleId" type="java.lang.Integer">
<column name="role_id" not-null="true" />
</property>
<property name="createTime" type="java.sql.Timestamp">
<column name="create_time" length="19" not-null="true" />
</property>
<property name="updateTime" type="java.sql.Timestamp">
<column name="update_time" length="19" />
</property>
<property name="isDel" type="java.lang.Integer">
<column name="is_del" not-null="true" />
</property>
</class>
</hibernate-mapping>
5.创建项目的主要包
分别创建com.xdx.entity,com.xdx.service,com.xdx.dao,com.xdx.controller,com.xdx.util等包。如下图所示。并将上面生成的实体放入com.xdx.entity包中。
6.编写数据源配置文件
项目采用阿里数据连接池,druid。jdpc.properities配置文件如下。
#数据源1
url:jdbc:mysql://xxx.xxx.xxx.xxx:3306/qgranite?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=UTC&useSSL=false
driverClassName:com.mysql.cj.jdbc.Driver
username:xdx
password:xxxxxxxxx
filters:stat
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15
timeBetweenEvictionRunsMillis:60000
minEvictableIdleTimeMillis:300000
validationQuery:SELECT 'x'
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
maxOpenPreparedStatements:20
removeAbandoned:true
removeAbandonedTimeout:1800
logAbandoned:true
# hibernate.X
hibernate.connection.driverClass=org.gjt.mm.mysql.Driver
hibernate.connection.url=jdbc:mysql://139.196.235.228:3306/qgranite
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.username=xdx
hibernate.connection.password=wonyen@1602
hibernate.show_sql=true
#hibernate.hbm2ddl.auto=create-drop 这边千万不要写create-drop,不然每次项目启动他会先删除表,再重建,表中的数据也会丢失
hibernate.hbm2ddl.auto=update
这边需要注意3个地方。
a.url的配置需要跟上后面那堆参数,那是新的jdbc驱动要求的,如果不跟,会报错。
b.driverClassName要写com.mysql.cj.jdbc.Driver而不是旧版本的com.mysql.jdbc.Driver,因为后者已经过时了。
c.hibernate.hbm2ddl.auto千万不要写=create-drop,否则项目启动的时候会把所有数据表删除,然后再新建,这样里面的数据就不见了,我这边写的是update,即有修改的时候会自动update.
上述配置文件会被spring的主配置文件,ApplicationContext.xml引用。
7.编写spring主配置文件
spring主配置文件是spring项目最重要的一个配置文件,数据源配置,事务管理配置,以及加载所有javabean等都在此处配置。当我们启动一个web项目的时候,先去加载项目所引用的jar包(包括jdk,tomcat,还有maven处所引用的jar包),接下来去访问web.xml文件,根据web.xml文件的配置,找到spring主配置文件的位置,读取其内容,然后就可以进行加载javabean,初始化数据库连接池等工作了。(关于web项目启动的步骤,可以参照这篇文章。)
spring+hibernate项目demo搭建的更多相关文章
- spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】
[ 前言] Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...
- Struts+Spring+Hibernate项目的启动线程
在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...
- 【Dubbo】Zookeeper+Dubbo项目demo搭建
一.Dubbo的注解配置 在Dubbo 2.6.3及以上版本提供支持. 1.@Service(全路径@org.apache.dubbo.config.annotation.Service) 配置服务提 ...
- Dubbo项目demo搭建
项目参考: http://dubbo.io/User+Guide-zh.htm https://my.oschina.net/superman158/blog/466637 项目使用 maven+id ...
- Spring Security项目的搭建以及Spring Security的BCrypt加密
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- Hibernate项目环境搭建
1.首先在eclipse里面新建一个Java工程. 2.在数据库中新建一个数据库(无需创建表,有Hibernate生成). 3.在项目中导入Hibernate所依赖的jar包,该jar包可以在此下载: ...
- 用intellj 建一个spring mvc 项目DEMO
spring的起初可能经常碰壁,因为网上的资料都是混乱的xml堆成的,混乱难以理解,我这个也是,阿哈哈哈哈! 新建一个Maven->create from archetype->org.j ...
- Spring MVC项目快速搭建(编程模型)
1)配置DispatcherServlet前端控制器(web配置) 2)将xml文件路径告诉Spring MVC(DispatcherServlet) 以上两步等价于继承了WebApplication ...
- Struts+Spring+Hibernate项目整合AJAX+JSON
1.什么是AJAX AJAX是 "Asynchronous JavaScript and XML" 的简称,即异步的JavaScript和XML. 所谓异步,就是提交一个请求不必等 ...
随机推荐
- Linux系列教程(二十二)——Linux的bash变量
上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的.本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫. 1.什么是变量 变量是计算机内存的单元,其中存放的值可以改变. 当 ...
- K-Means和图片压缩
通俗的介绍这种压缩方式,就是将原来很多的颜色用少量的颜色去表示,这样就可以减小图片大小了.下面首先我先介绍下K-Means,当你了解了K-Means那么你也很容易的可以去理解图片压缩了,最后附上图片压 ...
- Quartus FFT IP核简介
为了突出重点,仅对I/O数据流为steaming的情况作简要说明,以便快速上手,有关FFT ip核模型及每种设置详细介绍请参考官方手册FFT MegaCore Function User Guide. ...
- mysql实现高可用架构之MHA
一.简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能.MHA 在监控到 mas ...
- python 面对post分页爬虫
分享一则对于网抓中面对post请求访问的页面或者在分页过程中需要post请求才可以访问的内容! 面的post请求的网址是不可以零参访问网址的,所以我们在网抓的过程中需要给请求传表单数据,下面看一下网页 ...
- 关于Python在Linux、Mac和Windows上的安装方法总结
一.Linux下安装python 1.python源码安装包下载地址: https://www.python.org/downloads/source/ 2.下载完tar.xz压缩包以后, ...
- Entity Framework——常见报错总结
1 实体属性配置为IsRequired()对更新的影响 抛出异常类型DbEntityValidationException 表结构: 实体: public class User { public in ...
- TFBOY 养成记 一些比较好多文章。
API解释中文版(简书文章,没事看看): http://www.jianshu.com/p/e3a79eac554f Tensorlfow op辨异:tf.add()与tf.nn.bias_add() ...
- Hangfire在ASP.NET CORE中的简单实现
hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNe ...
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...