时间过来的真快,不知不觉已经来到了2024年4月份了,很长时间没有更新博客信息。四月也是一个适合回忆和感慨的月份。在这个季节里,人们会回想起过去的美好时光,也会思考未来的方向和计划。这种思考让人更加珍惜现在的生活,也让人对未来充满了信心和期待。今天继续为为大家介绍比较基础的Java web项目:客户关系管理系统,系统中拥有游客、客户经理、系统管理员三种用户。 系统管理员在系统中具有最大的权限,可以发布客户动态,对客户经理进行增删改查,对客户进行增删改查,分配客户给指定的客户经理。客户经理可以对自己的客户进行维护,包括增删改查,同时可以查看客户动态,统计客户分布情况等。游客在系统的权限最小,只能查看系统中的客户动态,其他权限,游客都不具备。目前系统功能已经比较完善,比较合适做。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步。
软件架构
本系统采用SSM的系统进行架构。SSM架构实现了View层,控制层,服务层,数据库访问层相互分离独立,Spring MVC负责请求的处理,Spring负责事务的管理,MyBatis负责数据库的持久化。
- 轻量级与高效性:SSM框架是轻量级的,不会占用过多的内存和系统资源,部署简单且启动速度快。同时,它采用了优秀的设计模式和算法,从而提高了系统的运行效率。
- 模块化设计:SSM框架采用了模块化的设计,将业务逻辑分成多个模块,这便于开发、测试和维护。模块化的设计使得开发人员可以更加专注于特定的功能或业务逻辑,提高了开发效率和代码的可维护性。
- 灵活性:SSM框架支持依赖注入(DI)和面向切面编程(AOP),这使得开发人员可以更加灵活地组织和管理代码。依赖注入降低了代码之间的耦合度,提高了代码的可重用性和可维护性;而面向切面编程则使得开发人员能够更方便地处理横切关注点,如日志、事务管理等。
- 可扩展性:SSM框架提供了丰富的扩展点和插件机制,可以方便地扩展和定制框架的功能。这使得SSM框架能够根据不同的项目需求进行灵活调整,满足各种复杂的业务需求。
- 易于集成:SSM框架与其他第三方库和工具的集成比较容易,例如与数据库、缓存、消息队列等的集成。这降低了技术集成的难度,提高了系统的整体性能和稳定性。
- 良好的社区支持:SSM框架拥有庞大的用户社区和丰富的技术文档,这为开发人员提供了有力的技术支持和学习资源。社区中的经验分享和技术讨论可以帮助开发人员快速解决遇到的问题,提高开发效率
系统主要功能
系统管理员在系统中具有最大的权限,可以发布客户动态,对客户经理进行增删改查,对客户进行增删改查,分配客户给指定的客户经理。客户经理可以对自己的客户进行维护,包括增删改查,同时可以查看客户动态,统计客户分布情况等。游客在系统的权限最小,只能查看系统中的客户动态,其他权限,游客都不具备。其中整个系统功能结构如下图所示意:

实现效果
1 主页

2 用户注册

3 管理员登陆

4 客户动态管理

5 客户分类管理

6 客户经理管理

6 客户管理

7 统计分析

8 我的客户

关键代码
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:端口/ssmcustomer?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="***>
<property name="password" value="****"/>
</bean>
<!-- 配置mybatis的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mappers.xml文件 -->
<property name="mapperLocations" value="classpath:com/customer/mappers/*.xml"></property>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.customer.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事务通知属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 定义事务传播属性 -->
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="new*" propagation="REQUIRED" />
<tx:method name="set*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="change*" propagation="REQUIRED" />
<tx:method name="check*" propagation="REQUIRED" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="load*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 配置事务切面 -->
<aop:config>
<aop:pointcut id="serviceOperation"
expression="execution(* com.customer.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
<!-- 自动扫描 -->
<context:component-scan base-package="com.*" />
</beans>
项目总结
(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。
(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。

被折叠的 条评论
为什么被折叠?



