前言

最近学习 Java,昨天刚搞完ssh的简单登录实现,今天搞了搞sss(即Spring+Struts+SpringDataJpa),使用 SpringDataJpa 代替 Hibernate 进行持久化操作,但是网上相关(SpringDataJpa)的资料太少了,走了不少弯路,今天写个全面的博客记录一下,方便以后复习,也为需要的朋友提供方便。

完整代码在此下载:sssDemo

环境

1.IDEA 2017

2.Oracle12c

注意事项

不同环境,不同版本的 oracle 数据库,使用的架包版本与相关配置也需要改变

创建项目

pom.xml 配置

1.由于 Oracle 授权问题,Maven 不提供 Oracle JDBC Driver,使用方法:在 IDEA 中使用 Oracle JDBC 驱动

2.pom.xml配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.eli.sss</groupId><artifactId>sssDemo</artifactId><version>1.0-SNAPSHOT</version><!-- 各架包的版本号 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>5.0.3.RELEASE</spring.version><springData.version>2.0.4.RELEASE</springData.version><hibernate.version>5.2.13.Final</hibernate.version><struts2.version>2.5.14</struts2.version></properties><dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>${springData.version}</version></dependency><!-- Hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><!-- struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${struts2.version}</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>${struts2.version}</version></dependency><!-- 添加对数据源的支持 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc8</artifactId><version>12.2.0.1.0</version></dependency></dependencies>
</project>

创建 Java 目录

配置 applicationContext.xml

1.创建 db.properties 设置 Oracle 数据库的配置信息

db.database=oracle
db.driverClassName=oracle.jdbc.driver.OracleDriver
db.userName=xxx
db.password=xxx
db.url=jdbc:oracle:thin:@localhost:1521:orcl

2.设置 applicationContext.xml

applicationContext.xml 配置信息如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"><!-- 引入数据库配置文件 db.properties --><context:property-placeholder location="classpath:db.properties"/><!-- 使用annotation --><context:annotation-config/><!-- 使用annotation自动注册bean,并检查@Controller, @Service, @Repository注解已被注入 --><context:component-scan base-package="cn.eli.sss.action"/><context:component-scan base-package="cn.eli.sss.service"/><context:component-scan base-package="cn.eli.sss.dao"/><!-- data connection setting --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${db.driverClassName}"></property><property name="jdbcUrl" value="${db.url}"></property><property name="user" value="${db.username}"></property><property name="password" value="${db.password}"></property><!-- 设置数据库连接池的最大连接数 --><property name="maxPoolSize"><value>50</value></property><!-- 设置数据库连接池的最小连接数 --><property name="minPoolSize"><value>5</value></property><!-- 设置数据库连接池的初始化连接数 --><property name="initialPoolSize"><value>5</value></property><!-- 设置数据库连接池的连接最大空闲时间 --><property name="maxIdleTime"><value>20</value></property><!-- c3p0缓存Statement的数量数 --><property name="maxStatements"><value>50</value></property><!-- 当连接池里面的连接用完的时候,C3P0一下获取新的连接数 --><property name="acquireIncrement"><value>20</value></property></bean><!-- springJPA 管理--><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"/><property name="jpaDialect"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/></property><property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/><property name="packagesToScan" value="cn.eli.sss.entity"/><property name="jpaProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop><!--是否显示 SQL--><prop key="hibernate.show_sql">true</prop><!--如果显示 SQL,输出的 SQL 时候要格式化--><prop key="hibernate.format_sql">true</prop><!--在显示的 SQL 中增加一些 Hibernate 提供的注释说明,依此来解释它生成的 SQL 意思--><!--配置如何根据java模型生成数据库表结构,常用update,validate--><prop key="hibernate.use_sql_comments">true</prop><prop key="hibernate.hbm2ddl.auto">validate</prop><!--关于这个属性可以看:http://blog.csdn.net/dracotianlong/article/details/27834143--><!--ImprovedNamingStrategy 是采用下划线,符合我们一般命名表字段的习惯--><!--所以,命名规则 My_NAME->MyName--><prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop></props></property></bean><!-- Hibernate对Jpa的实现 --><bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/><jpa:repositories base-package="cn.eli.sss.dao" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/><!--配置针对JPA的局部事务管理器--><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"/></bean><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
</beans>

使用 IDEA 连接 Oracle 数据库

其中 Name 不用管(任意),Host 是数据库的主机名,SID 、User、Password 可在你要使用的数据库中查看,查看方法如下:

打开 SQL Developer —— 右键查看的数据库 —— 属性 —— 左边选中要查看的数据库(system-orcl) —— 右面显示的是数据库信息,其中 SID 就是 IDEA 连接时使用的 SID

使用 Persisstence 创建数据库映射实体类

在 IDEA 左下角找到 Persistence

现在实体类创建完成,如下

编写 Dao 层实体类代码

@Repository
public interface UserDao extends JpaRepository<EliUser, Long> {/*** 根据用户名密码查询数据** @param name* @param password* @return*/EliUser findByNameAndPassword(String name, String password);
}

注:其中方法名 findByNameAndPassword 不是随便起的,spring-data-jpa 提供了 CURD,这条语句就是查询语句,以findBy 开头,Name 是用户实体类(EliUser)中的名称字段 name,And 相当于 SQL 语句中的 and 关键字,Password 是用户实体类(EliUser)中的密码字段 password。具体的 SpringDataJpa 使用方法,可以去百度,有很多资料,在这里就不再重复说明。

编写 Service 层实体类代码

为了代码的可拓展性,我们把实现与定义分离;在src/main/java/cn/eli/sss/service下面再建立一个 impl 包,存放接口的实现类;在 service 目录下新建一个 UserService.java 接口类(记住是接口,在选择类型的时候要选择接口), 在 impl 放这个接口的实现类,UserServiceImpl.java

UserService.java 内容如下:

public interface UserService {boolean login(EliUser user);
}

UserServiceImpl.java 内容如下:

@Service("userService")
public class UserServiceImpl implements UserService {@Resourceprivate UserDao userDao;public boolean login(EliUser user) {EliUser eliUser = this.userDao.findByNameAndPassword(user.getName(), user.getPassword());if (eliUser == null)return false;elsereturn true;}
}

编写 Action 层代码

Action 主要是调用业务逻辑,结合 struts.xml 来进行处理页面跳转,我们是希望实现用户登录,在 action 包下建立一个 UserAction.java,代码如下

@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport {@Resourceprivate UserService userService;private EliUser user;public EliUser getUser() {return user;}public void setUser(EliUser user) {this.user = user;}public String login() {if (userService.login(user)) {Map session = ActionContext.getContext().getSession();session.put("user", user);return SUCCESS;} else {return ERROR;}}
}

现在所有实体类的代码已经完成,整体结构如下:

配置 struts2

strtus.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><!--启用开发模式--><constant name="struts.devMode" value="true"/><!--由spring管理struts的Action实例--><constant name="struts.objectFactory" value="spring" /><!--启用通配符--><constant name="struts.enable.DynamicMethodInvocation" value="true"/><!--在URL中的Action段中支持斜线--><constant name="struts.enable.SlashesInActionNames" value="true"/><package name="user" namespace="/" extends="struts-default" strict-method-invocation="false"><action name="user_*" class="userAction" method="{1}"><result name="success">/success.jsp</result><result name="error">/error.jsp</result></action></package>
</struts>

配置 Web

web.xml 内容如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!-- struts2容器控制器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- spring容器配置 --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param><!-- spring容器监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!-- 欢迎页面 --><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

编写 JSP 页面

1.index.jsp (登录页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="user_login.action" method="post"><input type="text" name="user.name" placeholder="输入用户名"/><br/><input type="password" name="user.password" placeholder="输入密码"/><br/><input type="submit" value="登录"><input type="reset" value="重置">
</form>
</body>
</html>

2.success.jsp(登录成功页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>success</title>
</head>
<body>
<h1>hello ${user.name}</h1>
</body>
</html>

3.error.jsp(登录失败页面)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>somethin error</h1>
</body>
</html>

Tomcat 部署

运行项目,完成。

idea maven sss(Spring+Struts+SpringDataJpa)实现简单登录相关推荐

  1. Maven工程Spring框架AOP的简单使用

    目录结构: 引入的jar包 aspect.Validate.java package aspect;import java.text.*; import java.util.*;public clas ...

  2. Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架

    Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...

  3. java springmvc 数据库事务_事务的简单回顾_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  4. 通向架构师的道路(第十九天)使用maven构建Spring工程

    一.前言 上次大家拿了我上传的工程后,有些人自己通过spring3,struts1.3,hibernate3的download的包自行去装配jar包到工程的WEB-INF\lib目录下.有些是通过我上 ...

  5. 在Eclipse中使用Maven构建Spring项目

    最新版的Spring需要使用Maven构建,本文讲述怎么在Eclipse构建Maven项目,以配置Spring项目为例. maven简单介绍 maven是构建工具,也是构建管理工具.ant只是构建工具 ...

  6. 使用maven构建Spring工程的一些重点

    2019独角兽企业重金招聘Python工程师标准>>>     有人喜欢把一个下载的spring3.1和struts1.3下载包里的的lib目录下所有的jar不管三七二十一全部cop ...

  7. Spring Boot持久化的简单实现

    本篇主要讲解的是Spring Data Jpa 前提准备:JDK1.8,Mysql5.7.18 主要maven依赖的包: spring-boot-starter-jdbc mysql-connecto ...

  8. 使用Maven管理Spring

    1. 概述 本教程向您展示如何通过 Maven 管理 Spring 的依赖关系.最新的Spring版本可以在  Maven Central仓库  中找到. 也可以访问   mvnrepository: ...

  9. Spring AOP 简介以及简单用法

    Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...

最新文章

  1. c语言实验七实验报告,C语言实验七 数 实验报告.doc
  2. 网络切片,切开5G万亿级市场“大面包”
  3. python中re模块_python之re模块
  4. powerdesigner辅助导入导出excel文件
  5. 《人月神话》读后感一
  6. 20155307 《Java程序设计》课堂实践项目数据库
  7. agent python实现 建模_零基础三天学会Python爬虫(第二天)
  8. Hive insert into小文件问题优化解决
  9. linux编辑复制多行命令,linux下文本编辑器vim的使用,复制-粘贴-替换-行号-撤销-多文件操作...
  10. 对流式计算模型的理解
  11. 实训三:交换机恢复出厂设置以及基本配置
  12. 手把手教如何修改运动步数
  13. 三消游戏核心逻辑的一种实现
  14. php更换banner图片,如何替换banner上的图片?
  15. 为什么我的微信小程序开发工具调试窗口一片空白?
  16. 在内核中之获取HKEY_CURRENT_USER对应路径
  17. threeJS 创建逼真海洋落日
  18. Linux C遍历文件夹
  19. 在java中用log4j写日志文件
  20. C#.NET程序尝试—修复Excel批注错误

热门文章

  1. 音频原始数据能量检测算法
  2. f1签证计算机专业容易拒签吗,美国签证F1被拒,拒签调档出来原来是这个原因...
  3. 大数据 - 大数据开发技术课程总结(未完)
  4. source insight 4.0 闪退问题
  5. python网页爬虫xpath应用
  6. 根据word模板(书签)创建导出word
  7. android默认smb用户名和密码错误,win7系统下连接SMB提示用户名密码错误的解决方法...
  8. Docker compose 环境变量env_file相关
  9. C# 读取 vCard 格式
  10. 挑战华为社招:2021Java高级面试题汇总解答