`
lushuaiyin
  • 浏览: 705243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java架构搭建(三)--测试模块编写

 
阅读更多

此篇继续上篇 http://blog.csdn.net/lushuaiyin/article/details/8588420

ssh已经整合完毕,现在做一个功能模块测试是否可用。

这个功能我们就叫first。

java代码结构图:


jsp路径结构图:


下面贴出代码:

FirstIndexAction

package org.first.action;

import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.base.MyBaseAction;
import org.first.dao.FirstDao;

import com.opensymphony.xwork2.ActionContext;

public class FirstIndexAction  extends MyBaseAction {
	private static final long serialVersionUID = 1L;
	
	public String execute() throws Exception{
		
		return SUCCESS;
	}	
	public String firstPage() throws Exception{
		//继承了MyBaseAction,以下这些调用就简单很多
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
		HttpSession  session  = request.getSession();
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		return SUCCESS;
	}
	
	public String queryUser() throws Exception{
		String realName="";
		if(this.getValueFromRequest("realName")!=null){
			realName=(String)this.getValueFromRequest("realName");
		}
		List list=firstDao.queryUsers(realName);
		this.setValueToRequest("userList", list);
		return SUCCESS;
	}
	
	private FirstDao firstDao;

	public FirstDao getFirstDao() {
		return firstDao;
	}
	public void setFirstDao(FirstDao firstDao) {
		this.firstDao = firstDao;
	}
}

LsyUser

package org.first.bean;

public class LsyUser {
	
	private String user_id;
	private String user_name;
	private String real_name;
	
	public String getUser_id() {
		return user_id;
	}
	public void setUser_id(String user_id) {
		this.user_id = user_id;
	}
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	public String getReal_name() {
		return real_name;
	}
	public void setReal_name(String real_name) {
		this.real_name = real_name;
	}

}

context_first.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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

	<bean id="firstDao" parent="transactionProxyTemplate">
		<property name="target">
			<bean class=" org.first.dao.impl.FirstDaoImpl">
				<property name="sessionFactory">
					<ref bean="sessionFactory"/>
				</property>
			</bean>
		</property>
		<property name="proxyInterfaces">
			<value> org.first.dao.FirstDao</value>
		</property>
	</bean>
</beans>


LsyUser.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	    <class name="org.first.bean.LsyUser" table="LSY_USER_DEVELOP" >
        <id name="user_id" type="java.lang.String">
            <column name="user_id" length="32" />
            <generator class="assigned" />
        </id>
        <property name="user_name" type="java.lang.String">
            <column name="user_name" length="32" />
        </property>
        <property name="real_name" type="java.lang.String">
            <column name="real_name" length="32" />
        </property>
    </class>
</hibernate-mapping>
数据库表我就不说了,就是很简单的3个字段,都是varcher类型。


struts_first.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="first" extends="base-struts-default" namespace="/first">
	    <!-- 首页 -->	
		<action name="firstPage" class="org.first.action.FirstIndexAction" method="firstPage">
		   <result name="success">/jsp/first/firstPage.jsp</result>
		</action>
		<action name="queryUser" class="org.first.action.FirstIndexAction" method="queryUser">
		   <result name="success">/jsp/first/listUser.jsp</result>
		</action>
	</package>
</struts>

FirstDao

package org.first.dao;

import java.util.List;

public interface FirstDao {
	
	public List queryUsers(String realName);

}

FirstDaoImpl

package org.first.dao.impl;

import java.util.List;

import org.base.MyHibernateDao;
import org.first.dao.FirstDao;

public class FirstDaoImpl extends MyHibernateDao implements FirstDao{
	
	public List queryUsers(String realName){
		List list=null;
		if(realName==null||realName.trim().equals("")){
			System.out.println("参数realName为空,查询所有值。");
			String hql="select u from LsyUser u ";
			list=this.queryListHql(hql);
		}else{
			String hql="select u from LsyUser u where u.real_name like '%"+realName.trim()+"%'";
			list=this.queryListHql(hql);
		}
		return list;
	}
}

index.jsp(项目首页)

<%@ page contentType="text/html; charset=UTF-8"%>
<% 
String path = request.getContextPath();
%>

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title></title>
	<script src="<%=path%>/script/jquery-1.7.1.min.js" type="text/javascript"></script>	
</head>
<body style="overflow: scroll; overflow: auto;">

<input type="hidden" name="path" id="path" value='<%=path%>' ></input>

    <center>
     <h1>首页</h1>
    </center>
    <table width="500px" align="center">
       <tr width="100%">
           <td >账号:</td>
           <td ><input type="text" value="" id="username"></input></td>
           
           <td >密码:</td>
           <td ><input type="text" value="" id="password"></input></td>
       </tr>
       
       <tr width="100%">
           <td >查询用户:</td>
           <td ><input type="radio"  checked value="1" name="logintype"></input></td>
           
           <td >查询部门:</td>
          <td ><input type="radio"   value="2" name="logintype"></input></td>
       </tr>
       
       <tr width="100%">
           <td ></td>
           <td ><input type="button" value="登录" onclick="login()"></input></td>
           
           <td ></td>
           <td ><input type="button" value="重置" onclick="resetValue()"></input></td>
       </tr>
       
    </table>
</body>
</html> 

<script type="text/javascript">	
//简单的登录
function login(){
	var username=document.getElementById("username").value;
	var password=document.getElementById("password").value;
	if(username!=null&&username!=""){
		var urlpath="<%=path%>"+"/jsp/first/firstPage.jsp?randomStr="+Math.random();
		var urlpath2="<%=path%>"+"/jsp/second/secondPage.jsp?randomStr="+Math.random();
		var type=getRadioGroupValue();
		if(type=="2"){
			window.location.href=urlpath2;
		}else{
			window.location.href=urlpath;
		}
	}else{
		alert("账号密码不正确!");
	}
	
}

function resetValue(){
	document.getElementById("username").value="";
	document.getElementById("password").value="";
}

//js获取单选按钮组的值
function getRadioGroupValue(){
	var result="";
	var logintype=document.getElementsByName("logintype");
	if(logintype!=null&&(typeof logintype !="undifined")){
		for(i=0;i<logintype.length;i++){
			if(logintype[i].checked){
				result=logintype[i].value;
			}
		}
	}
	return result;
}
</script>

firstPage.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<% 
String path = request.getContextPath();
%>

<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title></title>
	<script src="<%=path%>/script/jquery-1.7.1.min.js" type="text/javascript"></script>	
</head>
<body style="overflow: scroll; overflow: auto;">

<input type="hidden" name="path" id="path" value='<%=path%>' ></input>
<center><h1>查询用户</h1></center>
    <table width="500px"  border="1" align="center">
        <tr>
			 <td>姓名:<input type="text"  id="realName" value='' ></input></td>
		</tr>
		<tr>
			 <td><h1><a href="javascript:void(0)" onclick="chaxun()">查询</a></h1></td>
		</tr>
	</table>
	
</body>
</html> 
<script type="text/javascript">	
//查询列表
function chaxun(){
	var realName=document.getElementById("realName").value;
	var urlpath="<%=path%>/first/queryUser.action?randomStr="+Math.random()+"&realName="+realName;
	window.location.href=urlpath;
}


  
</script>

listUser.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@page import="java.util.*"%>
<%@page import=" org.first.bean.LsyUser"%>
<% 
String path = request.getContextPath();
%>
<% 
List list=null;
if(request.getAttribute("userList")!=null){
	list=(List)request.getAttribute("userList");
}
%>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title></title>
	<script src="<%=path%>/script/jquery-1.7.1.min.js" type="text/javascript"></script>	
</head>
<body style="overflow: scroll; overflow: auto;">

<input type="hidden" name="path" id="path" value='<%=path%>' ></input>

      <table width="500px"  border="1" align="center">
        <tr>
			 <td align="center">姓名:<input type="text"  id="realName" value='' ></input></td>
		</tr>
		<tr>
			 <td align="center"><h1><a href="javascript:void(0)" onclick="queryuser()">查询</a></h1></td>
		</tr>
	</table>
	
	 <table width="500px"  border="1" align="center">
        <tr>
			 <th align="center">姓名</th><th align="center">账号</th>
		</tr>
		<% 
		if(list!=null){
			for(int i=0;i<list.size();i++){
				LsyUser user=(LsyUser)list.get(i);
				if(user!=null){
					String realname="";
					String user_name="";
					if(user.getReal_name()!=null){
						realname=user.getReal_name();
					}
					if(user.getUser_name()!=null){
						user_name=user.getUser_name();
					}
		%>			
				<tr>
					 <td><%=realname%></td><td><%=user_name%></td>
				</tr>
		<%	
				}
			}
		}
		%>
		
	</table>
</body>
</html> 
<script type="text/javascript">	

function queryuser(){
	var urlpath="<%=path%>"+"/first/queryUser.action";
	var realName=document.getElementById("realName").value;
	$.ajax({
		   type:"POST",
		   url:urlpath,
		   data: "realName="+realName+"&randomStr="+Math.random(),
		   success: function(msg){
		     alert( "Succeed:");
		     window.location.reload();
		   }
		});
}


</script>



此功能我已经测试过,能正常使用。代码就不讲解了,就是很简单的一个查询。目的只是为了测试ssh的整合是否成功。


Hibernate这个框架的好处就是帮我们处理持久层的东西。

如果我想把数据库从orcle移植到mysql,利用hibernate就很简单。

步骤:

1:修改对sessionFactory的配置。

因为属性的值都放到properties中了,所以我只需要修改configure.properties,如下:

# applicationContext.xml

### C3P0 Connection Pool
c3p0.maxPoolSize=3
c3p0.minPoolSize=1
c3p0.maxIdleTime=1800
c3p0.maxStatements=0
c3p0.acquireIncrement=2
c3p0.idleConnectionTestPeriod=600

#oracle  
#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@10.55.15.66:1521:cdbank
#jdbc.username=ccdb
#jdbc.password=ccdb
#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect

#mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mydb
jdbc.username=root
jdbc.password=root
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

2:记得添加驱动包mysql-connector-java-5.1.13-bin.jar,并引入classpath。

3:创建对应的数据库和表。

这里我想说的是Hibernate中的一个属性<prop key="hibernate.hbm2ddl.auto">update</prop>

这个hibernate.hbm2ddl.auto有一下几个值:

validate               加载hibernate时,验证创建数据库表结构
create                  每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop        加载hibernate时创建,退出是删除表结构
update                 加载hibernate自动更新数据库结构
在此如果我们在移植数据库时(当然只是开发过程,不关心数据的情况下),我们可以配置这个属性帮我们创建表。

等完成后一定要把此属性删掉。为什么呢?因为数据库时很重要的,所以很多大公司才高新聘请DBA,这种用程序操作

数据库本身就很危险。在你对hibernate源码都没怎么看的情况下,这种方式就不自量力了。


下一篇我们要将代码中一个比较重要的内容,那就是spring事务的使用。这里已经用到了,只是内容太多,放到下篇再细说吧。



分享到:
评论

相关推荐

    Java柠檬班Java全栈自动化-视频课程资源网盘链接提取码下载 .txt

    - **单元测试**:使用JUnit框架编写有效的单元测试代码,确保单个模块的功能正确性。 - **集成测试**:通过Spring Boot Test或Mockito等工具进行集成测试,验证不同组件之间的交互是否符合预期。 - **UI自动化测试**...

    Java 开发-----汽车租赁管理系统(详细文档+视频+源码).rar

    视频部分通常会详细展示每个开发阶段的操作步骤,包括环境搭建、代码编写、功能调试、问题解决等,对于初学者来说,这是一种直观且有效的学习方式。 6. **源码分析**: 源码是学习的关键,通过阅读和理解代码,...

    电商微服务架构搭建全过程教程

    ### 电商微服务架构搭建全过程教程 在当前互联网技术飞速发展的背景下,电商系统作为连接商家与消费者的桥梁,其稳定性、扩展性和性能表现至关重要。为了满足高并发、大数据量处理的需求,越来越多的企业选择采用...

    精通Java EE项目案例--基于Eclipse Spring Struts Hibernate (源程序2)

    在本项目中,Eclipse作为开发平台,帮助开发者高效地编写和组织代码,实现项目的快速搭建。 接着,Spring框架作为核心的业务层组件,负责管理对象的生命周期和依赖关系。Spring的IoC(Inversion of Control)容器...

    SSM基本架构搭建

    SSM框架是Java web开发中常用的三大框架Spring、Spring MVC和MyBatis的组合,它为开发者提供了一种高效、灵活的开发模式。本压缩包文件"SSM基本架构搭建"提供了一个基于Maven构建的基础SSM项目结构,旨在帮助开发者...

    Java编程新手必读--

    ### Java编程新手必读知识点...以上内容为Java编程新手入门所需了解的一些基本知识点,涵盖了从开发环境搭建、简单程序编写到使用高级框架进行复杂应用开发等多个方面。对于初学者来说,掌握这些知识是非常重要的基础。

    Java 开发-----员工工资管理系统(文档+视频+源码).rar

    【标题】中的“Java 开发-----员工工资管理系统”是一个基于Java技术开发的项目,主要目的是管理企业内部的员工工资信息。这个系统可能包含了数据的录入、查询、计算、统计等功能,能够有效地帮助人力资源部门进行...

    Java Web中三层架构配置入门

    在这个配置入门教程中,我们将探讨如何配置Java Web环境,以及使用Java 1.4.2、Tomcat 5.0和SQL Server来搭建基础的三层架构。 首先,我们需要下载并安装必要的软件。Java开发工具包(JDK)1.4.2可以从Sun ...

    Maven多模块SSM框架搭建

    本知识点将深入探讨如何使用Maven来搭建一个多模块的SSM(Spring、Struts、MyBatis)框架,帮助开发者实现更有序、更高效的项目结构。 1. Maven基础: Maven是Apache基金会的一个项目,它通过一个项目对象模型...

    java Smart系统-题库及试卷管理模块的设计与开发(源代码+论文).rar

    《Java智能系统——题库及试卷管理模块的设计与开发》是一个典型的Java毕业设计项目,它涵盖了软件工程中的多个重要知识点,对于学习Java编程和理解实际项目开发流程的同学来说,具有很高的参考价值。该项目的核心...

    java架构师零基础学习01-05天.rar

    Java架构师是软件开发领域中的高级角色,负责设计、实施和优化复杂的系统。对于初学者而言,从零开始学习Java架构师的知识体系是一项挑战,但也是通往专业技能提升的必经之路。本压缩包文件“java架构师零基础学习01...

    基于java的开发源码-UnaBoot(尤娜)Java博客系统.zip

    - **调试与测试**:利用IDE中的调试工具进行代码调试,编写单元测试确保功能正确性。 4. **扩展与定制** - **插件系统**:UnaBoot可能提供插件机制,允许用户自定义功能或集成第三方服务。 - **主题更换**:...

    高级Java人才培训专家-01-环境搭建、SpringCloud微服务(注册发现、服务调用、网关)

    4. **编码与测试**:编写代码并进行单元测试、集成测试,确保每个模块的功能正确无误。 5. **部署与运维**:学习如何将应用部署到生产环境,并掌握基本的监控和日志管理技能。 通过本课程的学习,学员不仅能够...

    ssh搭建 -- 登录dome

    SSH(Spring、Struts2、Hibernate)是一种常见的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。本教程将详细介绍如何通过SSH框架搭建一个基础的登录Demo项目。 首先,我们来理解SSH框架的核心组件: ...

    基于java的-162-springboot摄影跟拍预定管理系统--LW-源码.zip

    9. **源码结构**:通过查看文件名,我们可以预期源码中可能包括了系统的主配置文件、实体类、DAO层、Service层、Controller层等核心模块,以及可能的测试代码。 10. **部署与运行**:SpringBoot应用可以被打包为一...

    校园竞赛管理系统论文-java-文档-校园竞赛管理系统文档-文档

    #### 三、开发环境搭建 **1. 开发环境配置** - **Java Development Kit (JDK) 1.8:** JDK是Java开发的基础,提供了必要的编译、运行工具。 - **IntelliJ IDEA:** 强大的Java集成开发环境(IDE),支持SpringBoot等...

    SpringBoot-Gradle-Maven-Java-Groovy

    1. **SpringBoot**: SpringBoot是Spring框架的一个模块,旨在简化Spring应用的初始搭建以及开发过程。它提供了一种快速构建可运行的应用程序的方式,内置了Tomcat服务器和默认配置,使得开发者无需过多关注配置细节...

    gen代码生成器java三层架构

    5. 优化开发流程:通过gen代码生成器,可以快速搭建起一个基于Java三层架构的项目框架,节省了大量的初始化工作时间,让团队能更快地进入核心功能的开发。此外,代码生成器通常还支持定制化,如注解的添加、模板的...

    pay-java-parent-develop.zip

    在“pay-java-parent-develop”中,Spring Boot可能是主要的技术栈,用于快速搭建微服务架构。 4. **微服务架构**: 微服务架构是现代软件开发的趋势,每个服务专注于特定业务功能,独立部署和扩展。在这个项目中...

Global site tag (gtag.js) - Google Analytics