maven hibernat mysql_手把手教你用 maven 搭建 SSH (struts2 +hibernate5 + spring5) 项目
手把手教你搭建 SSH 环境
一、项目环境搭建
1.1 配置 Spring 坐标依赖
1.2 配置 hibernate 坐标依赖
1.3 配置 struts2 坐标依赖
1.4 配置Java EE 坐标依赖
1.5 其他工具
二、项目结构搭建
2.1 配置文件
2.2 包结构
三、编写配置文件
3.1 web.xml 文件配置
3.2 编写 jdbc.properties 文件
3.3 编写 applicationContext.xml 配置文件
3.4 struts 配置文件
四、使用 hibernate 逆向生成工具生成实体
4.1 配置数据库连接信息
4.2 逆向生成实体类
4.3 实体类配置
五、JavaBean 编写
5.1 编写 dao 层
5.2 编写 Service 层
5.3 编写 Controller 层 (UserAction)
5.4 编写 struts 路由映射
六、前端界面编写
6.1 登录界面编写
6.1 登录成功
6.3 登录失败
最近要使用 SSH 来编写期末的考核任务,之前也在网上查阅了很久,也试出了很多的问题。也很感谢很多前辈们的总结,我也查到了很多用用的内容。
本次项目,我将以一个简单的登录案例实现 SSH 的项目整合,项目我会放到 Github 上面,需要的同学可以 clone 下来在本地跑一跑
一、项目环境搭建
使用 maven 搭建一个 Java Web 项目
1.1 配置 Spring 坐标依赖
引入 Spring 坐标依赖
org.springframework
spring-context
5.1.0.RELEASE
org.springframework
spring-web
5.1.0.RELEASE
org.springframework
spring-jdbc
5.1.0.RELEASE
org.springframework
spring-orm
5.1.0.RELEASE
org.aspectj
aspectjrt
1.9.1
org.aspectj
aspectjweaver
1.9.1
1.2 配置 hibernate 坐标依赖
我们的目标是要整合 SSH,所以需要 hibernate 的核心依赖, mysql 数据库驱动,以及 c3p0 数据库连接池
org.hibernate
hibernate-core
5.2.17.Final
mysql
mysql-connector-java
5.1.47
com.mchange
c3p0
0.9.5.2
1.3 配置 struts2 坐标依赖
我们需要 struts 核心,以及 struts 整合 spring 的插件,以及 struts 对 json 数据处理的插件
org.apache.struts
struts2-core
2.3.35
org.apache.struts
struts2-spring-plugin
2.3.35
org.apache.struts
struts2-json-plugin
2.3.8
1.4 配置Java EE 坐标依赖
这里可以引入 servlet api,jstl 标签库等一系列工具
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
org.projectlombok
lombok
1.18.0
provided
jstl
jstl
1.2
taglibs
standard
1.1.2
1.5 其他工具
json 处理工具
org.jetbrains
annotations-java5
RELEASE
compile
org.json
json
20160810
二、项目结构搭建
2.1 配置文件
使用如下方式创建
applicationContext.xml
jdbc.properties
struts.xml
2.2 包结构
创建如下的基本包结构
三、编写配置文件
3.1 web.xml 文件配置
/p>
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
Archetype Created Web Application
contextConfigLocation
classpath:applicationContext.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
org.springframework.web.context.ContextLoaderListener
3.2 编写 jdbc.properties 文件
这里我们需要自己手动修改数据库的信息配置
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8&autoReconnect=true&useSSL=false
jdbc.user=root
jdbc.password=root
#连接池中保留的最小连接数
jdbc.minPoolSize=1
#连接池中保留的最大连接数
jdbc.maxPoolSize=20
#初始化连接数
jdbc.initialPoolSize=1
3.3 编写 applicationContext.xml 配置文件
这里面也包含了数据库的基本配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
org.hibernate.dialect.MySQLDialect
update
thread
true
true
false
3.4 struts 配置文件
我们还没有编写的具体的 action 服务,所以这里先跳过
四、使用 hibernate 逆向生成工具生成实体
4.1 配置数据库连接信息
使用 idea 自带的数据库连接的工具
完善基本配置信息
4.2 逆向生成实体类
4.3 实体类配置
生成好后可以看到和数据库对应的实体类,我的表很简单,一个简单的用户表,只有 id, username, password 字段
但是我们发现里面的部分内容会爆红,这是因为我们没有指定数据源
选择我们刚才连接的数据库
然后就没问题了。
五、JavaBean 编写
看到包结构,大家应该可以猜出来,我是使用的典型的 MVC 三层架构来编写的
5.1 编写 dao 层
创建 UserDao 以及 它的实现类 UserDaoImpl
UserDao 编写
package dao;
import entity.User;
public interface UserDao {
// 用户登录验证
public User selectByUsernameAndPassword(String username, String password);
}
UserDaoImpl
package dao.Impl;
import dao.UserDao;
import entity.User;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
// 使用 Spring 来接管持久层的所有操作
@Repository
public class UserDaoImpl implements UserDao {
// 使用 Hibernate 提供的模板
@Autowired
@Resource
private HibernateTemplate hibernateTemplate;
// 生成对应的 get 和 set 方法
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@Override
public User selectByUsernameAndPassword(String username, String password) {
// 登录的逻辑不算难,就是使用 sql 语句查询,username 和 password 两个字段是否存在即可,我们使用的是 hibernate 框架,所以要写 hql 语句
Session session = hibernateTemplate.getSessionFactory().openSession();
Query q = session.createQuery("from User u where u.username = ? and u.password = ?");
q.setParameter(0,username);
q.setParameter(1,password);
User u = (User) q.uniqueResult();
return u;
}
}
我们写好了 dao 层,这时候发现出现了爆红的问题,这里我们需要手动添加项目的依赖信息
点击 project structure
添加这个就可以了,问题就解决了
显示正常了
5.2 编写 Service 层
同样,我们创建对应的 UserService 和 对应的 UserServiceImpl 类
有的同学可能会问道,不就是一个简单的登录功能嘛,有必要这么麻烦吗?是的,这么做确实没必要,但是随着项目的越来越大,只有把具体的功能全部分开来做,这样才不至于整个项目太过于乱
编写用户的业务层 接口 UserService
package service;
import entity.User;
public interface UserService {
// 登录验证
User checklogin(String username, String password);
}
编写 业务层对应的实现类 UserServiceImpl
package service.Impl;
import dao.UserDao;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import service.UserService;
@Service
public class UserServiceImpl implements UserService {
// 这里业务层调用持久层的方法
@Autowired
private UserDao ud;
@Override
public User checklogin(String username, String password) {
return ud.selectByUsernameAndPassword(username,password);
}
}
5.3 编写 Controller 层 (UserAction)
这里的逻辑思路,是 controller 层 调用 service 的方法,service 层调用 dao 层的方法
package action;
import com.opensymphony.xwork2.ActionContext;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import service.UserService;
import java.util.Map;
// 使用 Controller 表示这是控制层,使用 ua 表示这个类被 Spring 所管理
@Controller("ua")
public class UserAction {
// 编写两个属性,使用 struts2 的 ognl 表达式可以直接接收到前端穿过来的数据,不再需要 request.getParameter("xxxx") 接收数据了
private String username;
private String password;
// 调用业务层的方法
@Autowired
private UserService us;
// get 方法可以不要, set 方法必须有,不然前端的数据就无法注入进来
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 login() {
System.out.println(username + " " + password); // 打印穿过来的数据
ActionContext ac = ActionContext.getContext();
// 得到 servlet 中的三大域的 session 域,在这里我们要将数据保存至 session,并在前端展示
Map session = ac.getSession(); // 我们可以看到 session 的实质就是一个 map
User user = us.checklogin(username,password); // 登录验证
if ( user!=null ) {
session.put("user",username);
return "success";
} else {
return "error";
}
}
}
5.4 编写 struts 路由映射
记得在 Project Structure 添加如下配置
stucts action 配置
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
/index.jsp
/error.jsp
六、前端界面编写
6.1 登录界面编写
Created by IntelliJ IDEA.
User: Gorit
Date: 2020/6/13
Time: 23:18
Contact: gorit@qq.com
To change this template use File | Settings | File Templates.
--%>
Title
账户:
密码:
6.1 登录成功
Created by IntelliJ IDEA.
User: Gorit
Date: 2020/6/13
Time: 23:21
Contact: gorit@qq.com
To change this template use File | Settings | File Templates.
--%>
Title
欢迎你 ${sessionScope.user} 登录!!
6.3 登录失败
Created by IntelliJ IDEA.
User: Gorit
Date: 2020/6/13
Time: 23:21
Contact: gorit@qq.com
To change this template use File | Settings | File Templates.
--%>
Title
出错啦!!!
maven hibernat mysql_手把手教你用 maven 搭建 SSH (struts2 +hibernate5 + spring5) 项目相关推荐
- 手把手教你用express搭建个人博客(二)
转自http://www.zhentaoo.com/program/one?id=58a32067aa82ab69510c26be 上篇说到了如何使用express生成器快速生成一个node项目,如果 ...
- 手把手教你使用 VuePress 搭建个人博客
手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...
- 手把手教你用vuepress搭建自己的网站(2)
虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号(ID:itclanCoder) 如果不知道如 ...
- 手把手教你用owncloud搭建属于自己的云盘
https://www.jianshu.com/p/6e0be77b688e 手把手教你用owncloud搭建属于自己的云盘 owncloud是一个开源的云盘解决方案,我们可以用owncloud快速地 ...
- 方言听不懂,手把手教你用 Milvus 搭建方言翻译器!
坐在上海的公交车上,我有时会遇到这样的烦恼:稍一分神,没能听见普通话报站,支棱起耳朵,却听不懂沪语报站.为了解决这个问题,我决定--学习沪语?No, 作为一名数据工程师,我索性搭建了一个方言翻译器,帮 ...
- 手把手教你36小时搭建无人超市系统 !(附代码)
来源:QbitAI 编译:夏乙 问耕 本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文共1635字,建议阅读5分钟. 本文手把手教大家用代码工具搭建亚马逊无人商店. ...
- 手把手教你使用hexo搭建属于你的个人博客
前言 每当看到别人精美的个人博客时,不知你是否有一点点的羡慕.别急,现在我就来手把手教你搭建自己的个人博客. 在技术日趋成熟的今天,有着很多种快速生成博客的框架:Hexo,Jekyll,Wordpre ...
- 手把手教你如何快速搭建 ELK 实时日志分析平台
本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...
- 手把手教你通过vue-cli搭建手机端框架
前言:欢迎前端的小伙伴们前来围观.学习借鉴,如果你是后端.测试和其他的小伙伴也没关系,如果自己也想玩一下前端,想搭建一个前端的框架,那么不妨静下心来看看这篇文章.如果你不是从事开发工作的人员,内容可能 ...
最新文章
- vuex 闲置状态重置方案
- 编辑Linux系统实验,linux操作系统实验vi编辑器的使用
- Mysql PARTITION 数据表分区技术日期
- 中青评论:家政本科招生难,专业名字误终身?
- (二) shiro入门 :输出 hello world
- android 安装第三方app,Android识别预装的第三方App方法实例
- Linux下DRBD配置
- python 递归函数例子_python函数递归的几个例子
- python office转pdf_python 如何将office文件转换为PDF
- Bracket Sequences Concatenation Problem括号序列拼接问题(栈+map+思维)
- 【C/C++】algorithm头文件下常用函数
- 7分钟学会匿名管道pipe()的使用(内附完整代码测试)
- 2019年秋招中国工商银行软件研发中心(杭州)笔试+面试
- Linux:Ubuntu系统解决不能上网问题
- PTA 习题3.6 一元多项式的乘法与加法运算
- 全球游戏收入将随着电影电视改编作品的不断增多而达到惊人水平 | 美通社头条...
- 7人制足球技战术要点
- wd移动硬盘不能识别_西部数据移动硬盘无法识别恢复
- mac搭建win10虚拟机并对磁盘分区
- cmd里如何查看历史命令并执行