该项目里的数据库表受我实习的影响,我将表名设计的不是很好,字段也设计的不够清楚,所以在重构的时候,我就懒得修改数据库了,在原有数据库的基础上用Spring重构了,这个网站的设计思维导图很简单,虽然使用的前后端分离,是代码的前后端分离,大概意思就是,前端的部分显示是从数据库里读出来的,通过JS请求后用JS显示到前端,后台只提供接口,但是在物理上没有分开,我只使用了Tomcat服务器,大部分都是jQuery代码,也嵌入部分js代码。
1.1思维导图如下
其中entity类和数据库表是一一对应的对应关系如下:
实体类里的变量和数据库里的字段一一对应,这里设计的不是很好,所以不建议大家借鉴我这份实体类的设计方式。现在对其中一个比较有代表性的实体类进行介绍,Culture.java
package com.caeser.enterpriseportal.entity;public class Culture { //标题 private String Aaa302; //内容 3段 private String Aaa303; private String Aaa304; private String Aaa305; //企业文化图片 3张 private String Aaa309; private String Aaa310; private String Aaa311; //日期 private String Aaa312; public String getAaa302() { return Aaa302; } public void setAaa302(String aaa302) { Aaa302 = aaa302; } public String getAaa303() { return Aaa303; } public void setAaa303(String aaa303) { Aaa303 = aaa303; } public String getAaa304() { return Aaa304; } public void setAaa304(String aaa304) { Aaa304 = aaa304; } public String getAaa305() { return Aaa305; } public void setAaa305(String aaa305) { Aaa305 = aaa305; } public String getAaa309() { return Aaa309; } public void setAaa309(String aaa309) { Aaa309 = aaa309; } public String getAaa310() { return Aaa310; } public void setAaa310(String aaa310) { Aaa310 = aaa310; } public String getAaa311() { return Aaa311; } public void setAaa311(String aaa311) { Aaa311 = aaa311; } public String getAaa312() { return Aaa312; } public void setAaa312(String aaa312) { Aaa312 = aaa312; } }
由于我不会使用富文本编辑器,而且原项目的后台全部代码都是我自己写的,所以很粗糙,导致重构的时候也没想太多,这里对文章的编辑进行了限制,只允许三段文章加上三张图片,其实还不如用富文本编辑器呢。下面是对应的数据库的设计内容。
本项目使用了MyBatis来进行SQL的使用,所以,对数据进行操作的时候,都是先添加XXXDao.java接口,然后添加XXXDao.xml文件。
接口Dao.java文件只用于定义操作的名称和返回值,然后在XML文件里编写具体的操作内容,HonorDao.java
package com.caeser.enterpriseportal.dao;import java.util.List;import com.caeser.enterpriseportal.entity.Honor;public interface HonorDao { /** * 查询首页显示的5个荣誉资质 * @return */ List<Honor> queryHonor(); /** * 查询全部 * @return */ List<Honor> queryHonorAll(); /** * 根据ID删除一个荣誉资质 * @param id * @return */ int deleteHonerById(int id); /** * 根据ID查询一条荣誉资质 * @param id * @return */ Honor queryHonorById(int id); /** * 根据ID更新一条荣誉资质 * @param honor * @return */ int updateHonor(Honor honor); /** * 插入一条荣誉资质 * @param honor * @return */ int insertHonor(Honor honor); }
其对应的XML文件如下,HonorDao.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.caeser.enterpriseportal.dao.HonorDao"> <select id="queryHonor" resultType="com.caeser.enterpriseportal.entity.Honor"> SELECT aaa501,aaa502,aaa503,aaa504,aaa505,aaa506 FROM aa05 LIMIT 5 </select> <select id="queryHonorAll" resultType="com.caeser.enterpriseportal.entity.Honor"> SELECT aaa501,aaa502,aaa503,aaa504,aaa505,aaa506 FROM aa05 </select> <select id="queryHonorById" resultType="com.caeser.enterpriseportal.entity.Honor"> SELECT aaa501,aaa502,aaa503,aaa504,aaa505,aaa506 FROM aa05 WHERE aaa501=#{id} </select> <delete id="deleteHonerById" parameterType="int"> DELETE FROM aa05 WHERE aaa501=#{id} </delete> <update id="updateHonor" parameterType="com.caeser.enterpriseportal.entity.Honor"> update aa05 <set> <if test="aaa502 != null">aaa502=#{aaa502},</if> <if test="aaa503 != null">aaa503=#{aaa503},</if> <if test="aaa504 != null">aaa504=#{aaa504},</if> <if test="aaa505 != null">aaa505=#{aaa505}</if> </set> where aaa501=#{aaa501} </update> <insert id="insertHonor" useGeneratedKeys="true" keyProperty="Aaa501" keyColumn="aaa501"> INSERT INTO aa05(Aaa502,Aaa503,Aaa504,Aaa505) VALUES (#{aaa502},#{aaa503},#{aaa504},#{aaa505}) </insert></mapper>
唯一觉得好用的地方就是支持动态SQL,就是Update的时候,有的时候可能某些字段并没有更新,不必单独写个SQL语句与其对应。本项目其实我觉得我是用AOP思想来实现代码的,就是对某一功能,从前到后完成,实际上这样效率不高,最好的方式还是先编写好全部后台接口然后直接调用,用来编写JS代码完成前端的设计。再介绍一下Service类吧,这个类其实是对Dao类的分装,例如保存图片的时候,你除了要调用保存图片的SQL还要调用其他的SQL这样可以用事务的方式来管理,如果将多个SQL封装到一个Service里,如果遇到某个文件操作失败时,还涉及事务的回滚。
本章就介绍到这里,其实在做完这个项目之后,我就发现,前端不是自己写的,有很多不是很方便的地方,我就打算自己研究一下前端,这样前后端都自己手写,就好像服务器的配置不懂,我就自己练,一遍一遍的打Linux命令,配置系统。本项目完成了文章的增删改查,前端的排版,后端的登陆,源自我自己的真实项目,只不过该公司不再继续支付服务费了,所以我自己用JAVA做了重构,算是对Spring稍微了解了一点。
下面三张图介绍一下项目的基本样子,其中在子页面里有部分是JS调用函数实现的,局部刷新,这样页面不发生刷新动作就可以完成现实,具体如下:
共同学习,写下你的评论
评论加载中...
作者其他优质文章