SSH-Day01客户关系管理系统

2024-01-28 21:08

本文主要是介绍SSH-Day01客户关系管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ssh集成

  • ssh集成

spring:applicationContext.xml

  • datasource
  • sessionFactory(加载数据源+方言+bean.hbm.xml)
  • TransactionManager 事务注解驱动
  • bean(Action Service Dao)
<?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: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.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 先配置C3P0的连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql:///crm_28"/><property name="user" value="root"/><property name="password" value="root"/></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 加载连接池 --><property name="dataSource" ref="dataSource"/><!-- 加载方言 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 加载映射文件 --><property name="mappingResources"><list><value>com/cqc/crm/domain/User.hbm.xml</value><value>com/cqc/crm/domain/Customer.hbm.xml</value><value>com/cqc/crm/domain/Dict.hbm.xml</value></list></property></bean><!-- 定义事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><!-- 开启事务的注解 --><tx:annotation-driven transaction-manager="transactionManager"/><!-- customer模块 --><bean name="customerAction" class="com.cqc.crm.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"/></bean><bean name="customerService" class="com.cqc.crm.service.impl.CustomerServiceImpl"><property name="customerDao" ref="customerDao"/></bean><bean name="customerDao" class="com.cqc.crm.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"/></bean>
</beans>

struts2: struts.xml

package>action>result

<?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><!-- 设置上传文件的总大小,默认是2M  struts.multipart.maxSize=2097152 --><constant name="struts.multipart.maxSize" value="20971520"/><package name="crm" namespace="/" extends="struts-default"><action name="user_*" class="userAction" method="{1}"><result name="login">/login.jsp</result><result name="success">/index.jsp</result></action><action name="customer_*" class="customerAction" method="{1}"><result name="list">/jsp/customer/list.jsp</result><result name="toList" type="redirectAction">customer_findByPage.action</result><result name="input" type="redirectAction">/jsp/error.jsp</result><!-- 引入默认的拦截器 --><interceptor-ref name="defaultStack"><!-- 决定上传文件的类型 --><param name="fileUpload.allowedExtensions">.jpg,.txt</param></interceptor-ref></action><action name="dict_*" class="dictAction" method="{1}"></action></package></struts>

hibernate:hibernate.cfg.xml(也可以由spring管理)

数据字典

实际项目中会把常量放到数据字典表中,根据key获取对应的value。如这个项目,把客户来源、客户级别、客户状态等放到字典表中。根据dict_type_code查找对应的dict_item_name
在这里插入图片描述

Action *ServiceImpl *DaoIml

public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {/*** */private static final long serialVersionUID = -9176812910048769004L;private Customer customer = new Customer();@Overridepublic Customer getModel() {return customer;}
}
@Transactional
public class CustomerServiceImpl implements CustomerService {private CustomerDao customerDao;public void setCustomerDao(CustomerDao customerDao) {this.customerDao = customerDao;}@Overridepublic PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {return customerDao.findByPage(pageCode,pageSize,criteria);}
}
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {private static final long serialVersionUID = 3635798891795874167L;@Overridepublic void add(Customer customer) {Long serializable =  (Long) getHibernateTemplate().save(customer);}}

注册

发送ajax请求

填写完用户名后要判断是否有重复,若重复,则提示“用户名不可用,重复”。

<INPUT id="user_code"  style="WIDTH: 130px" name="user_code" onblur="checkCode()">

判断用户名是否已经存 先判断是否为空(发送ajax请求),为空则显示提示信息。
注意:ajax请求的写法

function checkCode(){var user_code=$("#user_code").val();if(user_code.trim()==""){$("#RequiredFieldValidator3").html("请输入用户名");$("#RequiredFieldValidator3").addClass("error");}else{//发送ajax请求判断var url="${pageContext.request.contextPath}/user_checkUserName.action";var params={"user_code":user_code};$.post(url,params,function(data){//如果有数据而且==yes,则用户名不重复if(data && data == "yes"){$("#RequiredFieldValidator3").html("");$("#RequiredFieldValidator3").removeClass("error");}else{$("#RequiredFieldValidator3").html("用户名重复");$("#RequiredFieldValidator3").addClass("error");}},"json");}
}

后台返回json数据

public void checkUserName() {String user_name = user.getUser_name();List<User> list = userService.findUserByUserName(user_name);HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("utf-8");PrintWriter writer = null;try {writer = response.getWriter();if (list != null && list.size() > 0) {writer.print("no");} else {// 没有重复的,可以使用writer.print("yes");}} catch (IOException e) {e.printStackTrace();} 
}

##点击注册##

<FORM id=form1 name=form1 action="${pageContext.request.contextPath }/user_regist.action" onsubmit="return checkForm()" method=post>

checkForm()返回false,就不会走action

登陆和退出登陆

登陆:把user保存到session中

ServletActionContext.getRequest().getSession().setAttribute("existUser", list.get(0));

退出登陆:把user从session中清空

ServletActionContext.getRequest().getSession().removeAttribute("existUser");

分页查询

分页-后端代码

action的编写

public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {private static final long serialVersionUID = -9176812910048769004L;private Customer customer = new Customer();@Overridepublic Customer getModel() {return customer;}//设置默认值   当前页码   private Integer pageCode=1;//get()是才有效public void setPageCode(Integer pageCode) {if(pageCode==null) {pageCode=1;}this.pageCode = pageCode;}//一页显示多少条数据private Integer pageSize=2;public void setPageSize(Integer pageSize) {this.pageSize = pageSize;}/*** 分页查找,调转到list.jsp* @return*/public String findByPage() {DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);...PageBean<Customer> pageBean=customerService.findByPage(pageCode,pageSize,criteria);ValueStack vs = ActionContext.getContext().getValueStack();vs.push(pageBean);return "list";}
}

分页dao的编写

@Override
public PageBean<Customer> findByPage(Integer pageCode, Integer pageSize, DetachedCriteria criteria) {PageBean<Customer> page = new PageBean<>();page.setPageCode(pageCode);page.setPageSize(pageSize);criteria.setProjection(Projections.rowCount());List<Number> customerList = (List<Number>) getHibernateTemplate().findByCriteria(criteria);if(customerList!=null && customerList.size()>0) {page.setTotalCount(customerList.get(0).intValue());criteria.setProjection(null);}List<Customer> list = (List<Customer>) getHibernateTemplate().findByCriteria(criteria, (pageCode-1)*pageSize, pageSize);page.setBeanList(list);return page;
}

PageBean.java

public class PageBean<T> {// 当前页private int pageCode;// 总页数// private int totalPage;// 总记录数private int totalCount;// 每页显示的记录条数private int pageSize;// 每页显示的数据private List<T> beanList;public int getPageCode() {return pageCode;}public void setPageCode(int pageCode) {this.pageCode = pageCode;}/*** 调用getTotalPage() 获取到总页数* JavaBean的属性规定:totalPage是JavaBean是属性 ${pageBean.totalPage}* @return*/public int getTotalPage() {// 计算int totalPage = totalCount / pageSize;// 说明整除if(totalCount % pageSize == 0){return totalPage;}else{return totalPage + 1;}}/*public void setTotalPage(int totalPage) {this.totalPage = totalPage;}*/public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public List<T> getBeanList() {return beanList;}public void setBeanList(List<T> beanList) {this.beanList = beanList;}
}

分页-前端jsp

<DIV style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">共[<B>${totalCount}</B>]条记录,[<B>${totalPage}</B>]页 ,每页显示 <select name="pageSize"><option value="2"<c:if test="${pageSize==2 }">selected</c:if>>2</option><option value="3"<c:if test="${pageSize==3 }">selected</c:if>>3</option></select> 条<c:if test="${pageCode>1 }">[<A href="javascript:to_page(${pageCode-1})">前一页</A>] <B>${pageCode}</B></c:if><c:if test="${pageCode<totalPage }">[<A href="javascript:to_page(${pageCode+1})">后一页</A>]</c:if>到 <inputtype="text" size="3" id="page" name="pageCode" /> 页 <inputtype="button" value="Go" onclick="to_page()" />
</DIV>
// 提交分页的查询的表单
function to_page(page){if(page){$("#page").val(page);}document.customerForm.submit();
}`

页面展示:
在这里插入图片描述源码:
https://gitee.com/ssh_jicheng/cqc_crm28

这篇关于SSH-Day01客户关系管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654771

相关文章

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

图书管理系统系统分享

分享一个图书管理系统,Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 gitee项目地址:https://gitee.com/yuanmomoya/open-source-project/tree/master/books-management-system GitHub项目地址:https://github.com/yuanmomoya/open-source-pro