在完成了ssh框架搭建的基础上,我尝试着去了解更多。新一阶段还是一些简单的增删改查,只是提高自己的熟练度。

这一片我要创建一个登录页面,并查询数据库完成登录。

一、创建实体:

1、1新建职员实体employee:

package com.ssh.entity;

import java.util.Date;

public class Employee {

	private int employee_id;
private String username;
private String password;
private String sex;
private String positioin;
private int phone;
private Date birthday; //所属部门
private Department department; public int getEmployee_id() {
return employee_id;
} public void setEmployee_id(int employeeId) {
employee_id = employeeId;
} 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 getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getPositioin() {
return positioin;
} public void setPositioin(String positioin) {
this.positioin = positioin;
} public int getPhone() {
return phone;
} public void setPhone(int phone) {
this.phone = phone;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public Department getDepartment() {
return department;
} public void setDepartment(Department department) {
this.department = department;
} }

1、2创建部门实体department:

package com.ssh.entity;

import java.util.HashSet;
import java.util.Set; public class Department { private int department_id;
private String department_name;
private String department_parent_id; //部门员工集合(hibernate有单向关联,这里用双向关联)
private Set<Employee> employees = new HashSet<Employee>(); public int getDepartment_id() {
return department_id;
}
public void setDepartment_id(int departmentId) {
department_id = departmentId;
}
public String getDepartment_name() {
return department_name;
}
public void setDepartment_name(String departmentName) {
department_name = departmentName;
}
public String getDepartment_parent_id() {
return department_parent_id;
}
public void setDepartment_parent_id(String departmentParentId) {
department_parent_id = departmentParentId;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
} }

二、实体映射文件:

2、1employee的映射文件employee.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"> <hibernate-mapping>
<class name="com.ssh.entity.Employee" table="employee">
<id name="employee_id" column="employee_id">
<generator class="native"></generator>
</id> <property name="username" column="username" length="20"></property>
<property name="password" column="password" length="20"></property>
<property name="sex" column="sex" length="2"></property>
<property name="positioin" column="positioin" length="20"></property>
<property name="phone" column="phone" length="20"></property>
<property name="birthday" column="birthday" ></property> <!-- 配置关联关系,员工对部门是多对一,这里生成的也是数据库表的外键。 -->
<many-to-one name="department" class="com.ssh.entity.Department" column="depart_id"/>
</class>
</hibernate-mapping>

2、2department实体映射文件:department.hmb.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"> <hibernate-mapping>
<class name="com.ssh.entity.Department" table="department">
<id name ="department_id" column="department_id">
<generator class="native"></generator>
</id> <property name="department_name" column="department_name" length="20"></property>
<property name="department_parent_id" column="department_parent_id" length="50"></property> <!-- 配置关联关系 -->
<set name="employees">
<key column="depart_id"></key>
<one-to-many class="com.ssh.entity.Employee"/>
</set>
</class> </hibernate-mapping>

3、3在applicationcontext.xml→sessionFactory→mappingResources引入hibernate映射文件:

        	<property name="mappingResources">
<list>
<!-- 映射文件全路径 -->
<value>com/ssh/entity/product.hbm.xml</value>
<value>com/ssh/entity/Department.hbm.xml</value>
<value>com/ssh/entity/Employee.hbm.xml</value> </list>
</property>

运行项目,让ssh为你在数据库去创建你要的employee、department表。

三、新建登录页面

就在index.xml基础上修改吧。

这里有一个struts2的标签可以学习下:<h1><s:actionerror/></h1>他可以将后台的错误提示信息自动显示。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- struts2 标签库 -->
<%@taglib uri ="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>登录页面</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<div align="center">
<h1><s:actionerror/></h1>
<h1>欢迎</h1>
<s:form action="door_login" method="post" namespace="/" theme="simple">
<table border="1" width="400">
<tr>
<td>用户名:</td>
<td><s:textfield name="username"/></td>
</tr>
<tr>
<td>密 码:</td>
<td><s:textfield name="password"/></td>
</tr>
<tr>
<!-- colspan: 合并单元格-->
<td align="center" colspan="2"><input type="submit" value="登录"> </td>
</tr>
</table>
</s:form>
</div>
</body>
</html>

四、控制层、业务层、持久层登录方法的实现:

employeeAction:使用模型驱动ModelDriven接收前端数据

这里面有一个addActionError的方法,就是将错误提示信息返回给前端页面。

package com.ssh.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ssh.entity.Employee;
import com.ssh.service.employeeService; public class employeeAction extends ActionSupport implements ModelDriven<Employee> {
private Employee employee = new Employee();
//使用模型驱动接收前段页面数据,并将获取数据封装到employee对象。
public Employee getModel() {
// TODO Auto-generated method stub
return employee;
} //注入业务层类
private employeeService employeeService;
public void setEmployeeService(employeeService employeeService) {
this.employeeService = employeeService;
} public String login(){
Employee existEmployee = employeeService.login(employee);
Date date = new Date();
if (existEmployee != null) {
System.out.println("acction"+existEmployee);
//登陆成功,提示登录成功!把登录信息存入session
this.addActionMessage(existEmployee.getUsername()+"登录成功!"+"\t"+date);
ActionContext.getContext().getSession().put("existEmployee", employee);
return SUCCESS;
}else {
//登录失败,提示错误信息,返回登录界面。
this.addActionError("用户名或密码错误!");
return INPUT;
}
//return NONE;
} }

employeeService:

public interface employeeService {

	Employee login(Employee employee);

}

实现类employeeServiceImpl:

public class employeeServiceImpl implements employeeService {
private employeeDao employeeDao;
//注入dao
public void setEmployeeDao(employeeDao employeeDao) {
this.employeeDao = employeeDao;
} public Employee login(Employee employee) {
Employee existEmployee = employeeDao.findUsernameAndPassword(employee);
return existEmployee;
} }

employeeDao:

public interface employeeDao {

	Employee findUsernameAndPassword(Employee employee);

}

实现类employeeDaoImpl:注意继承hibernate模板

public class employeeDaoImpl extends HibernateDaoSupport implements employeeDao {

	public Employee findUsernameAndPassword(Employee employee) {
String hql ="from Employee where username = ? and password = ?";
List<Employee> list =this.getHibernateTemplate().find(hql, employee.getUsername(),employee.getPassword());
if (!list.isEmpty()) {
System.out.println("dao:"+list.get(0));
return list.get(0);
}
return null;
} }

五、配置applicationcontext.xml以及struts.xml:

5、1控制层、业务层、持久层的注入配置:

		<bean id="employeeAction" class="com.ssh.action.employeeAction" scope="prototype">
<!-- 需要手动注入service -->
<property name="employeeService" ref="employeeService"></property>
</bean> <!-- 配置业务层的类 -->
<bean id="employeeService" class="com.ssh.service.impl.employeeServiceImpl">
<property name="employeeDao" ref="employeeDao"></property>
</bean> <!-- 配置dao层:注入hibernate模板 -->
<bean id="employeeDao" class="com.ssh.dao.impl.employeeDaoImpl">
<!-- ref 值与sessionFactory bean id保持一致 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

5.2struts.xml的action配置:

注意这里配置的两个返回结果标签result,成功的跳转addproduct。jsp,失败的返回登录页。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />   <package name="default" namespace="/" extends="struts-default">
<action name="door_*" class="employeeAction" method="{1}">
<result name="success">/addproduct.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package> </struts>

六、运行项目

成功跳转:

最新文章

  1. appium 常用api介绍(1)
  2. winform窗体最大化、最小化、还原
  3. jQuery/javascript实现简单网页计算器
  4. D django 用户认证系统
  5. Redis&#39; High Availability
  6. java dubug调试
  7. Ubuntu 13.04下安装Vmware tools 9.2.3
  8. NSCondition用法
  9. PHP中GD库安装
  10. git命令提交项目
  11. chrome 如何卸载干净
  12. PAT1004:Counting Leaves
  13. ajax请求window.open()被拦截
  14. Syntax error, parameterized types are only available if source level is 1.5 解决方案
  15. 利用kali破解wifi密码
  16. 大道至简、大智若愚—GO语言最佳详解实践
  17. 高斯混合模型 GMM
  18. [Android相机]通过手机摄像头识别环境亮度(转)
  19. RabbitMQ 设置队列的过期时间
  20. SpringBoot日记——缓存的使用

热门文章

  1. 《Java基础——抽象与接口》
  2. 【学习笔记】GBDT算法和XGBoost
  3. Maven+SpringMVC+Dubbo 简单的入门demo配置
  4. Bootstrap5 如何创建多媒体对象
  5. Java并发编程 | 从进程、线程到并发问题实例解决
  6. css自定义会话框
  7. Docker | 容器互联互通
  8. 4.RabbitMQ系列之发布/订阅模式
  9. Redis 01: 非关系型数据库 + 配置Redis
  10. 26.ViewSet和action