SSH集成开发应用(基于注解的Demo实例详细)

2026-06-19 16:59:50

为什么要用SSH框架?

在这我不做过多解释,有兴趣可以移步:使用SSH框架的意义。

第一步配置pom.xml

要注意的是struts2要使用注解必须引入注解相关依赖(不只是core):

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">

4.0.0

com.zking

SSH_project

war

0.0.1-SNAPSHOT

SSH_project Maven Webapp

http://maven.apache.org

5.2.12.Final

5.1.44

2.10.0

5.0.1.RELEASE

2.5.13

1.7.7

2.9.1

3.2.0

4.12

4.0.1

1.2

1.1.2

8.5.30

2.10.0

0.9.1

3.4.0

org.hibernate

hibernate-core

${hibernate.version}

org.hibernate

hibernate-c3p0

${hibernate.version}

net.sf.ehcache

ehcache

${ehcache.version}

org.hibernate

hibernate-c3p0

${hibernate.version}

org.hibernate

hibernate-ehcache

${hibernate.version}

mysql

mysql-connector-java

${mysql.version}

org.springframework

spring-context

${spring.version}

org.springframework

spring-orm

${spring.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-aspects

${spring.version}

org.apache.struts

struts2-core

${struts2.version}

org.apache.struts

struts2-convention-plugin

${struts2.version}

org.apache.struts

struts2-json-plugin

${struts2.version}

org.apache.struts

struts2-spring-plugin

${struts2.version}

org.slf4j

slf4j-api

${slf4j.version}

org.slf4j

jcl-over-slf4j

${slf4j.version}

runtime

org.apache.logging.log4j

log4j-slf4j-impl

${log4j2.version}

org.apache.logging.log4j

log4j-api

${log4j2.version}

org.apache.logging.log4j

log4j-core

${log4j2.version}

org.apache.logging.log4j

log4j-web

${log4j2.version}

runtime

com.lmax

disruptor

${log4j2.disruptor.version}

junit

junit

${junit.version}

test

javax.servlet

javax.servlet-api

${servlet.version}

provided

jstl

jstl

${jstl.version}

taglibs

standard

${standard.version}

org.apache.tomcat

tomcat-jsp-api

${tomcat.jsp.version}

com.fasterxml.jackson.core

jackson-databind

${jackson.version}

com.fasterxml.jackson.core

jackson-core

${jackson.version}

com.fasterxml.jackson.core

jackson-annotations

${jackson.version}

io.jsonwebtoken

jjwt

${jwt.version}

com.auth0

java-jwt

${java.jwt.version}

SSH_project

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

UTF-8

View Code

第二步ssh集成配置文件

(1)applicationContext.xml

最核心的部分就是hibernate与spring的集成相关了,包括数据库连接池c3p0的配置以及事务配置(必须的)。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

location="classpath:db.properties" />

class="com.mchange.v2.c3p0.ComboPooledDataSource">

value="${db.initialPoolSize}">

value="${db.acquireIncrement}" />

value="${db.idleConnectionTestPeriod}" />

value="${db.acquireRetryAttempts}" />

value="${db.breakAfterAcquireFailure}" />

value="${db.breakAfterAcquireFailure}" />

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

org.hibernate.dialect.MySQLDialect

true

true

false

true

true

org.hibernate.cache.ehcache.EhCacheRegionFactory

com.zking.*

class="org.springframework.orm.hibernate5.HibernateTransactionManager">

transaction-manager="transactionManager">

read-only="true" />

read-only="true" />

read-only="true" />

read-only="true" />

pointcut="execution(* *..*Biz.*(..))" />

class="org.springframework.orm.hibernate5.HibernateTemplate">

abstract="true">

abstract="true">

abstract="true">

View Code

(2)db.properties(需要修改自己的用户名和mysql密码,以及要连接的数据库URL)

db.username=root

db.password=123456

db.driverClass=com.mysql.jdbc.Driver

db.jdbcUrl=jdbc:mysql://localhost:3306/crm?useSSL=false

db.initialPoolSize=10

db.maxPoolSize=20

db.minPoolSize=5

db.maxIdleTime=60

db.acquireIncrement=5

db.maxStatements=0

db.idleConnectionTestPeriod=60

db.acquireRetryAttempts=30

db.breakAfterAcquireFailure=true

db.testConnectionOnCheckout=false

View Code

(3)struts.xml(里面讲的很详细了)

"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"

"http://struts.apache.org/dtds/struts-2.5.dtd">

regex:.*

View Code

(4)ehcache.xml(一个缓存框架,可选)

xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"

updateCheck="false">

timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>

overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"

timeToLiveSeconds="3000" memoryStoreEvictionPolicy="LRU">

View Code

(5)log4j2.xml(日志调试相关)

/root/workspace/lucenedemo/logs

/root/workspace/lucenedemo/logs/error

/root/workspace/lucenedemo/logs/warn

%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n

onMismatch="DENY" />

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">

onMismatch="DENY" />

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

modulate="true" />

filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">

onMismatch="DENY" />

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">

onMismatch="DENY" />

pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />

modulate="true" />

View Code

第三步编写基础代码

首先是自定义的业务BaseDao(数据查询操作):

package com.zking.base.dao;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.criterion.CriteriaSpecification;

import org.hibernate.query.Query;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.orm.hibernate5.HibernateCallback;

import org.springframework.orm.hibernate5.HibernateTemplate;

import com.zking.base.util.PageBean;

public abstract class BaseDao{

@Autowired

protected HibernateTemplate hibernateTemplate;

/**

* 设置Query的查询参数

* @param params

* @param query

* @return

*/

@SuppressWarnings("rawtypes")

protected void setParamters(Map params,Query query) {

if(null==params||0==params.size())

return;

Set> set = params.entrySet();

String name=null;

Object value=null;

for (Entry entry : set) {

name=entry.getKey();

value=entry.getValue();

//判断参数是否是Collection,一般用于List/Set集合参数时使用

if(value instanceof Collection)

query.setParameterList(name, (Collection)value);

//判断参数是否是Object[]

else if(value instanceof Object[])

query.setParameterList(name, (Object[])value);

else

query.setParameter(name, value);

}

}

/**

* 将普通hql语句转换成查询总记录数的hql语句

* @param hql

* @return

*/

public String countSql(String hql) {

int start=hql.toUpperCase().indexOf("FROM");

return "select count(1) "+hql.substring(start);

}

public String getCountSql(String sql) {

return "select count(1) from ("+sql+") temp";

}

/**

* 通用分页的原生sql查询

* @param sql 查询语句

* @param params 查询参数map

* @param pageBean 分页对象

* @return

*/

public List> executeQueryMap(String sql,

Map params,PageBean pageBean){

return hibernateTemplate.execute(new HibernateCallback>>() {

@SuppressWarnings({ "deprecation", "unchecked" })

@Override

public List> doInHibernate(Session session) throws HibernateException {

@SuppressWarnings("rawtypes")

Query query=null;

if(null!=pageBean&&pageBean.isPagintaion()) {

String countSql=getCountSql(sql);

query=session.createNativeQuery(countSql);

setParamters(params, query);

List list = query.list();

pageBean.setTotal(Integer.parseInt(list.get(0).toString()));

}

query=session.createNativeQuery(sql);

if(null!=pageBean&&pageBean.isPagintaion()) {

query.setFirstResult(pageBean.getStartIndex());

query.setMaxResults(pageBean.getRows());

}

setParamters(params, query);

query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);

return query.list();

}

});

}

/**

* 查询(支持分页)

* @param hql 普通hql语句

* @param params 请求参数

* @param pageBean 分页对象

* @return

*/

@SuppressWarnings("rawtypes")

public List executeQuery(String hql,Map params,PageBean pageBean) {

return hibernateTemplate.execute(new HibernateCallback() {

@Override

public List doInHibernate(Session session) throws HibernateException {

Query query=null;

//1.根据满足条件查询总记录数

if(null!=pageBean&&pageBean.isPagintaion()) {

String countHql=countSql(hql);

Query createQuery = session.createQuery(countHql);

setParamters(params, createQuery);

List list = createQuery.list();

pageBean.setTotal(Integer.parseInt(list.get(0).toString()));

}

query=session.createQuery(hql);

//2.根据满足条件查询分页记录

if(null!=pageBean&&pageBean.isPagintaion()) {

query.setFirstResult(pageBean.getStartIndex());

query.setMaxResults(pageBean.getRows());

}

setParamters(params, query);

System.out.println(query.getQueryString());

return query.list();

}

});

}

}

View Code

BaseAction(操作servlet):

package com.zking.base.action;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import org.apache.struts2.interceptor.ServletResponseAware;

import com.fasterxml.jackson.databind.ObjectMapper;

public abstract class BaseAction implements ServletRequestAware, ServletResponseAware {

protected HttpServletRequest request;

protected HttpServletResponse response;

protected HttpSession session;

protected ServletContext application;

//响应json

private ObjectMapper mapper=new ObjectMapper();

@Override

public void setServletResponse(HttpServletResponse response) {

this.response=response;

// 设置浏览器字符集编码.

this.response.setContentType("application/json;charset=UTF-8");

// 设置response的缓冲区的编码.

this.response.setCharacterEncoding("UTF-8");

}

@Override

public void setServletRequest(HttpServletRequest request) {

this.request=request;

this.session=request.getSession();

this.application=request.getServletContext();

}

/**

* 响应更新数据消息

* @param msg

* @param success

*/

public void toJSONMessage(String msg,boolean success){

try {

Map json=new HashMap();

json.put("msg", msg);

json.put("success", success);

mapper.writeValue(response.getOutputStream(), json);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/**

* 分页查询数据

* @param msg 消息

* @param success 成功标记

* @param total 总记录数

* @param data 数据

*/

public void toJSONPager(String msg,boolean success,

int total,Object data){

try {

Map json=new HashMap();

json.put("msg", msg);

json.put("success", success);

json.put("total", total);

json.put("rows", data);

mapper.writeValue(response.getOutputStream(),json);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

/**

* 普通数据响应

* @param success

* @param data

* @param msg

*/

public void toJSONObject(boolean success,Object data,String msg){

try {

Map json=new HashMap();

json.put("success", success);

json.put("msg", msg);

json.put("data", data);

mapper.writeValue(response.getOutputStream(),json);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

View Code

第四步编写业务代码

(1)User实体类(要注意hibernate5之后的版本已经不推荐使用hibernate扩展的注解了,而是javax.persistence包下的注解):

package com.zking.system.entity;

import java.io.Serializable;

import java.util.Date;

import javax.persistence.*;

import org.hibernate.annotations.GenericGenerator;

@Entity //表明实体

@Table(name="t_user") //连接表名

public class User implements Serializable{

/**

* 序列化id

*/

private static final long serialVersionUID = -2631210706189779079L;

@Column(name="user_id") //对应表中的列

@Id //ID主键

@GeneratedValue(generator = "myuuid") //主键生成策略

@GenericGenerator(name="myuuid",strategy="uuid")//主键为uuid时的定义方式

private String userId;

@Column(name = "user_name")

private String userName;

@Column(name = "user_pwd")

private String userPwd;

@Column(name = "user_roleid")

private String userRoleid;

@Basic(fetch = FetchType.EAGER,optional = true)//立即加载,防止懒加载报错的方式

@Column(name = "user_flag")

private Integer userFlag;

@Temporal(TemporalType.TIMESTAMP)

@Column(name = "user_create")

private Date userCreate;//可用通过注解切换类型

@Transient

private Role role;//序列化时忽略此属性

public Role getRole() {

return role;

}

public void setRole(Role role) {

this.role = role;

}

public Date getUserCreate() {

return userCreate;

}

public void setUserCreate(Date userCreate) {

this.userCreate = userCreate;

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserPwd() {

return userPwd;

}

public void setUserPwd(String userPwd) {

this.userPwd = userPwd;

}

public String getUserRoleid() {

return userRoleid;

}

public void setUserRoleid(String userRoleid) {

this.userRoleid = userRoleid;

}

public Integer getUserFlag() {

return userFlag;

}

public void setUserFlag(Integer userFlag) {

this.userFlag = userFlag;

}

public static long getSerialversionuid() {

return serialVersionUID;

}

@Override

public String toString() {

return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + ", userRoleid="

+ userRoleid + ", userFlag=" + userFlag + ", userCreate=" + userCreate + "]";

}

public User() {

// TODO Auto-generated constructor stub

}

}

User

(2)定义接口及实现(接口是正常的定义,注解是加在具体的实现类上的):

package com.zking.system.dao;

import java.util.List;

import java.util.Map;

import com.zking.base.util.PageBean;

import com.zking.system.entity.User;

public interface IUserDao {

/**

* 根据条件分页查询用户列表

*

* @param User 用户信息

* @return 用户信息集合信息

*/

public List> selectUserList(User User,PageBean pg);

/**

* 查询所有的角色为客户经理的用户

* @return

*/

List> queryCustomerManagerUser();

/**

* 通过用户名查询用户

*

* @param userName 用户名

* @return 用户对象信息

*/

public User selectUserByUserName(String userName);

/**

* 通过用户ID查询用户

*

* @param userId 用户ID

* @return 用户对象信息

*/

public User selectUserById(String userId);

/**

* 新增用户信息

*

* @param user 用户信息

* @return 结果

*/

public int addUser(User user);

/**

* 更新用户状态

* @param user

*/

void updateUserState(User user);

/**

* 修改用户信息

*

* @param user 用户信息

* @return 结果

*/

public int updateUser(User user);

/**

* 修改用户头像

*

* @param userName 用户名

* @param avatar 头像地址

* @return 结果

*/

public int updateUserAvatar(String userName, String avatar);

/**

* 重置用户密码

*

* @param userName 用户名

* @param password 密码

* @return 结果

*/

public int resetUserPwd(User user);

/**

* 通过用户ID删除用户

*

* @param userId 用户ID

* @return 结果

*/

public int deleteUserById(String userId);

/**

* 批量删除用户信息

*

* @param userIds 需要删除的用户ID

* @return 结果

*/

public int deleteUserByIds(String[] userIds);

/**

* 校验用户名称是否唯一

*

* @param userName 用户名称

* @return 结果

*/

public boolean checkUserNameUnique(String userName);

/**

* 校验手机号码是否唯一

*

* @param phonenumber 手机号码

* @return 结果

*/

public boolean checkPhoneUnique(String phonenumber);

/**

* 校验email是否唯一

*

* @param email 用户邮箱

* @return 结果

*/

public boolean checkEmailUnique(String email);

}

IuserDao

package com.zking.system.dao.impl;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.query.NativeQuery;

import org.hibernate.query.Query;

import org.springframework.orm.hibernate5.HibernateCallback;

import org.springframework.orm.hibernate5.HibernateTemplate;

import org.springframework.stereotype.Repository;

import com.zking.base.dao.BaseDao;

import com.zking.base.util.PageBean;

import com.zking.base.util.StringUtils;

import com.zking.system.dao.IUserDao;

import com.zking.system.entity.User;

@Repository("userDao") //声明spring注解,与Component等价

public class UserDaoImpl extends BaseDao implements IUserDao {

@Override

public int addUser(User user) {

int n = 0;

try {

super.hibernateTemplate.save(user);

n = 1;

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return n;

}

@Override

public List> selectUserList(User user, PageBean pageBean){

String sql="select u.user_id userId,u.user_name userName,u.user_pwd userPwd,u.user_roleid userRoleid,u.user_flag userFlag,u.user_create userCreate,r.role_name roleName from t_user u left join t_role r on u.user_roleid=r.role_id where 1=1";

Map params=new HashMap();

if(StringUtils.isNotBlank(user.getUserName())) {

sql+=" and u.user_name like :username";

params.put("username", "%"+user.getUserName()+"%");

}

if(user.getUserFlag()!=null&&user.getUserFlag()>-1) {

sql += " and u.user_flag = :flag";

params.put("flag", user.getUserFlag());

}

System.out.println(sql);

return this.executeQueryMap(sql, params, pageBean);

}

@Override

public User selectUserByUserName(String username) {

System.out.println(super.hibernateTemplate);

System.out.println(this.hibernateTemplate);

return this.hibernateTemplate.execute(new HibernateCallback() {

@SuppressWarnings("rawtypes")

@Override

public User doInHibernate(Session session) throws HibernateException {

String hql = "from User where userName = :name";

Query query = session.createQuery(hql);

query.setParameter("name", username);

return (User) query.list().get(0);

}

});

}

/**

* 重置密码操作

*/

@SuppressWarnings({ "unchecked", "rawtypes" })

@Override

public int resetUserPwd(User user) {

// TODO Auto-generated method stub

int n = 0;

try {

super.hibernateTemplate.execute(new HibernateCallback() {

@Override

public Object doInHibernate(Session session) throws HibernateException {

// TODO Auto-generated method stub

String sql = "update t_user set user_pwd = :pwd where user_name = :uname";

NativeQuery query = session.createNativeQuery(sql);

query.setParameter("pwd", user.getUserPwd());

query.setParameter("uname", user.getUserName());

return query.executeUpdate();

}

});

n = 1;

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return n;

}

@SuppressWarnings({ "unchecked", "rawtypes" })

@Override

public void updateUserState(User user) {

// TODO Auto-generated method stub

Object execute = super.hibernateTemplate.execute(new HibernateCallback() {

@Override

public Object doInHibernate(Session session) throws HibernateException {

// TODO Auto-generated method stub

String sql = "update t_user set user_flag = :flag where user_id = :uid";

NativeQuery query = session.createNativeQuery(sql);

query.setParameter("flag", user.getUserFlag());

query.setParameter("uid", user.getUserId());

return query.executeUpdate();

}

});

System.out.println("用户状态更新结果:"+execute);

}

@Override

public List> queryCustomerManagerUser() {

// TODO Auto-generated method stub

String sql = "select ur.user_id userId,ur.user_name userName from t_user ur left join t_role ro on ur.user_roleid = ro.role_id where ro.role_name = '客户经理' and ur.user_flag = 1";

return super.executeQueryMap(sql, null, null);

}

@Override

public User selectUserById(String userId) {

// TODO Auto-generated method stub

return super.hibernateTemplate.execute(new HibernateCallback() {

@Override

public User doInHibernate(Session session) throws HibernateException {

// TODO Auto-generated method stub

String sql = "select * from t_user where user_id = :uid";

NativeQuery query = session.createNativeQuery(sql,User.class);

query.setParameter("uid", userId);

return query.list().get(0);

}

});

}

@Override

public int updateUser(User user) {

// TODO Auto-generated method stub

int n = 0;

try {

User u = super.hibernateTemplate.get(User.class,user.getUserId());

if(null!=u) {

u.setUserName(user.getUserName());

u.setUserRoleid(user.getUserRoleid());

u.setUserFlag(user.getUserFlag());

super.hibernateTemplate.update(u);

n = 1;

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return n;

}

@Override

public int updateUserAvatar(String userName, String avatar) {

// TODO Auto-generated method stub

return 0;

}

@Override

public int deleteUserById(String userId) {

int n = 0;

User u = super.hibernateTemplate.get(User.class, userId);

if(u!=null) {

super.hibernateTemplate.delete(u);

n = 1;

}

return n;

}

@Override

public int deleteUserByIds(String[] userIds) {

int n = 0;

try {

List list = new ArrayList<>(Arrays.asList(userIds));

list.forEach(obj ->{

deleteUserById(obj);

});

n = 1;

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return n;

}

@SuppressWarnings("rawtypes")

@Override

public boolean checkUserNameUnique(String userName) {

// TODO Auto-generated method stub

String sql = "select user_name from t_user where user_name = :username";

List list = super.hibernateTemplate.execute(new HibernateCallback() {

@Override

public List doInHibernate(Session session) throws HibernateException {

// TODO Auto-generated method stub

NativeQuery query = session.createNativeQuery(sql);

query.setParameter("username", userName);

return query.list();

}

});

return list!=null&&list.size()>0?true:false;//true可以插入,false不行

}

@Override

public boolean checkPhoneUnique(String phonenumber) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean checkEmailUnique(String email) {

// TODO Auto-generated method stub

return false;

}

}

UserDaoImpl

(3)定义逻辑层(Biz或Service):

package com.zking.system.biz;

import java.util.List;

import java.util.Map;

import com.zking.base.util.PageBean;

import com.zking.system.entity.User;

public interface IUserBiz {

/**

* 根据条件分页查询用户列表

*

* @param User 用户信息

* @return 用户信息集合信息

*/

public List> selectUserList(User User,PageBean pg);

/**

* 查询所有的角色为客户经理的用户

* @return

*/

List> queryCustomerManagerUser();

/**

* 通过用户名查询用户

*

* @param userName 用户名

* @return 用户对象信息

*/

public User selectUserByUserName(String userName);

/**

* 通过用户ID查询用户

*

* @param userId 用户ID

* @return 用户对象信息

*/

public User selectUserById(String userId);

/**

* 新增用户信息

*

* @param user 用户信息

* @return 结果

*/

public int addUser(User user);

/**

* 更新用户状态

* @param user

*/

void updateUserState(User user);

/**

* 修改用户信息

*

* @param user 用户信息

* @return 结果

*/

public int updateUser(User user);

/**

* 修改用户头像

*

* @param userName 用户名

* @param avatar 头像地址

* @return 结果

*/

public int updateUserAvatar(String userName, String avatar);

/**

* 重置用户密码

*

* @param userName 用户名

* @param password 密码

* @return 结果

*/

public int resetUserPwd(User user);

/**

* 通过用户ID删除用户

*

* @param userId 用户ID

* @return 结果

*/

public int deleteUserById(String userId);

/**

* 批量删除用户信息

*

* @param userIds 需要删除的用户ID

* @return 结果

*/

public int deleteUserByIds(String[] userIds);

/**

* 校验用户名称是否唯一

*

* @param userName 用户名称

* @return 结果

*/

public boolean checkUserNameUnique(String userName);

/**

* 校验手机号码是否唯一

*

* @param phonenumber 手机号码

* @return 结果

*/

public boolean checkPhoneUnique(String phonenumber);

/**

* 校验email是否唯一

*

* @param email 用户邮箱

* @return 结果

*/

public boolean checkEmailUnique(String email);

}

IuserBiz

package com.zking.system.biz.impl;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.zking.base.util.PageBean;

import com.zking.system.biz.IUserBiz;

import com.zking.system.dao.IRoleDao;

import com.zking.system.dao.IUserDao;

import com.zking.system.entity.User;

@SuppressWarnings("all")

@Service("userBiz") //等价与Component注解,名字必须唯一

public class UserBizImpl implements IUserBiz {

@Autowired

private IUserDao userDao;//自动装配依赖

@Override

public List> selectUserList(User user, PageBean pg) {

// TODO Auto-generated method stub

return userDao.selectUserList(user, pg);

}

@Override

public List> queryCustomerManagerUser() {

// TODO Auto-generated method stub

return userDao.queryCustomerManagerUser();

}

@Override

public User selectUserByUserName(String userName) {

// TODO Auto-generated method stub

return userDao.selectUserByUserName(userName);

}

@Override

public User selectUserById(String userId) {

// TODO Auto-generated method stub

return userDao.selectUserById(userId);

}

@Override

public int addUser(User user) {

// TODO Auto-generated method stub

int n = userDao.addUser(user);//新增用户

return n;

}

@Override

public void updateUserState(User user) {

// TODO Auto-generated method stub

userDao.updateUserState(user);

}

@Override

public int updateUser(User user) {

// TODO Auto-generated method stub

return userDao.updateUser(user);

}

@Override

public int updateUserAvatar(String userName, String avatar) {

// TODO Auto-generated method stub

return 0;

}

@Override

public int resetUserPwd(User user) {

// TODO Auto-generated method stub

return userDao.resetUserPwd(user);

}

@Override

public int deleteUserById(String userId) {

// TODO Auto-generated method stub

return userDao.deleteUserById(userId);

}

@Override

public int deleteUserByIds(String[] userIds) {

// TODO Auto-generated method stub

return userDao.deleteUserByIds(userIds);

}

@Override

public boolean checkUserNameUnique(String userName) {

// TODO Auto-generated method stub

return userDao.checkUserNameUnique(userName);

}

@Override

public boolean checkPhoneUnique(String phonenumber) {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean checkEmailUnique(String email) {

// TODO Auto-generated method stub

return false;

}

}

IuserBizImpl

(4)定义控制层(Controller),注意命名空间的限制百度有很多,这里不做过多解释:

package com.zking.system.action;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.UUID;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ModelDriven;

import com.zking.base.action.BaseAction;

import com.zking.base.entity.StrEnum;

import com.zking.base.jwt.JwtUtils;

import com.zking.base.util.MD5;

import com.zking.base.util.PageBean;

import com.zking.system.biz.IUserBiz;

import com.zking.system.entity.User;

@Controller("userAction")

@Scope("prototype") //多例的

@Namespace("/")

public class UserAction extends BaseAction implements ModelDriven{

private static final Integer MODULE_ID = 1501;

private User user = new User();

@Autowired

private IUserBiz userBiz;

@Override

public User getModel() {

// TODO Auto-generated method stub

return user;

}

/**

* 用户登录的方法

* @return

*/

@Action(value="userAction_userLogin")

public String userLogin() {

User u = userBiz.selectUserByUserName(user.getUserName());

try {

String msg = "";

boolean f = false;

if(null==u) {

msg = "用户名不存在,登录失败!";

}else if(u.getUserPwd().equals(new MD5().getMD5ofStr(user.getUserPwd()))) {

//生成令牌

Map json = new HashMap();

json.put("userName",user.getUserName());

json.put("userId", user.getUserId());

json.put("roleId", user.getUserRoleid());

json.put("loginTime", System.currentTimeMillis());

String jwt=JwtUtils.createJwt(json, JwtUtils.JWT_WEB_TTL);

response.setHeader(JwtUtils.JWT_HEADER_KEY, jwt);

msg = "用户登录成功";

f = true;

}else {

msg = "用户密码错误,登录失败!";

}

super.toJSONObject(f, u,msg);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

super.toJSONMessage("系统错误,请重新登陆", false);

}

return null;

}

/**

* 添加用户

* @return

*/

@Action(value="userAction_addUser")

public String addUser() {

//jwt令牌校验,并且获取当前登录对象

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

try {

if(null==u) {

super.toJSONMessage("添加用户失败", false);

throw new RuntimeException("用户未登录!");

}

user.setUserId(UUID.randomUUID().toString().replace("-", ""));

user.setUserPwd(new MD5().getMD5ofStr(user.getUserPwd()));

userBiz.addUser(user);

super.toJSONMessage("添加用户成功",true);

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONMessage("添加用户失败", false);

e.printStackTrace();

}

return null;

}

/**

* 删除用户

* @return

*/

@Action(value="userAction_delUser")

public String delUser() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

boolean f= false;

String str = "删除用户失败";

try {

int n = userBiz.deleteUserById(user.getUserId());

if(n>0) {

f = true;

str = "删除用户成功!";

}

super.toJSONMessage(str,f);

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONMessage(str, f);

e.printStackTrace();

}

return null;

}

/**

* 编辑用户

* @return

*/

@Action(value="userAction_editUser")

public String editUser() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

boolean f= false;

String str = StrEnum.EDIT.getName()+"用户失败";

try {

int n = userBiz.deleteUserById(user.getUserId());

if(n>0) {

f = true;

str.replaceAll("失败", "成功");

}

super.toJSONMessage(str,f);

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONMessage(str, f);

e.printStackTrace();

}

return null;

}

/**

* 分页查询用户

* @return

*/

@Action(value="userAction_queryUserPager")

public String queryUserPager() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

try {

PageBean pg = new PageBean();

pg.setRequest(request);

List> list = userBiz.selectUserList(user, pg);

super.toJSONPager("分页查询用户成功", true, pg.getTotal(), list);

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONPager("分页查询用户失败", false, 0, null);

e.printStackTrace();

}

return null;

}

/**

* 重置用户密码

* @return

*/

@Action(value="userAction_resetUserPwd")

public String resetUserPwd() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

try {

if(null==u) {

super.toJSONMessage("重置密码失败", false);

throw new RuntimeException("用户未登录!");

}

userBiz.resetUserPwd(user);

super.toJSONMessage("重置用户密码成功",true);

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONMessage("重置用户密码失败", false);

e.printStackTrace();

}

return null;

}

/**

* 重置用户状态

* @return

*/

@Action(value="userAction_updateUserState")

public String updateUserState() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

try {

if("admin".equals(u.getUserName())) {

userBiz.updateUserState(user);

super.toJSONMessage("更新用户状态成功",true);

}

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONMessage("更新用户状态失败", false);

e.printStackTrace();

}

return null;

}

/**

* 查询所有的客户经理并且状态正常

* @return

*/

@Action(value="userAction_queryCustomerManagerUser")

public String queryCustomerManagerUser() {

User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY));

String str = StrEnum.SELECT.getName()+"所有的状态正常的客户经理数据";

try {

if(null==u) {

super.toJSONMessage(str+"失败", false);

throw new RuntimeException("用户未登录!");

}

List> list = userBiz.queryCustomerManagerUser();

super.toJSONObject(true, list, str+"成功!");

} catch (Exception e) {

// TODO Auto-generated catch block

super.toJSONObject(false, null, str+"失败!");

e.printStackTrace();

}

return null;

}

}

;

UserAction

第五步配置web.xml文件

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

Archetype Created Web Application

contextConfigLocation

classpath:applicationContext.xml

org.springframework.web.context.ContextLoaderListener

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

true

encoding

UTF-8

encodingFilter

/*

org.springframework.web.util.IntrospectorCleanupListener

org.springframework.web.context.request.RequestContextListener

corsFilter

com.zking.base.util.CorsFilter

corsFilter

/*

jwtFilter

com.zking.base.jwt.JwtFilter

jwtFilter

/*

struts2

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

struts2

*.action

第六步启动tomcat浏览器访问

服务器启动成功应该是这样的:

然后在浏览器输入你的项目地址(注意你的端口号,我的是80,这里截图时浏览器省略了端口):

可以看到请求状态码200,成功访问。

控制台应该有hibernate的sql输出:

以上就是SSH集成(基于注解)相关的实例展示。

转载注明出处,谢谢。

答案详情
三届世界杯连庄!海信体育营销背后的全球化布局