肥桃的项目笔记02:《记账项目》

记账项目是SSM学习完之后的一个学习总结,用于帮助掌握SSM框架。

项目描述:

在这里插入图片描述
在这里插入图片描述

需求分析:

1:在主页面用户可以根据账单类型和账单起止时间进行搜索。
2:搜索出的内容包括账单标题,记账时间,类别,金额,说明,操作。
3:账单类型的下拉框包括:不限,支出,收入,转账,借出,借入,还入,还出。
4:金额需要根据账单类型显示“+”或者“-”号。
5:表格底部有首页,上一页,下一页,尾页四个按钮,并且显示当总页数和总条数。
6:没有搜索出数据时需要给出相应的提示信息。
7:点击记账按钮进入记账界面,可以新建账单。
8:点击删除按钮可以删除账单。
9:点击修改按钮可以修改账单信息。

完成过程:

在这里插入图片描述

1.创建数据库

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2:环境搭建

2.0:配置web.xml文件

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         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_2_5.xsd" version="2.5">
  <display-name>Archetype Created Web Application</display-name>
  <!--1.配置前端控制器-->
  <servlet>
    <servlet-name>aa</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>aa</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--2.处理post乱码-->
  <filter>
    <filter-name>bb</filter-name>
    <filter-class>
      org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>bb</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

2.1:添加依赖包

创建pom.xml文件,添加依赖包
通过 ${springversion}标签控制所有的spring版本。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kkb</groupId>
    <artifactId>ssm_project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <springversion>5.0.8.RELEASE</springversion>
    </properties>

    <dependencies>
        <!-- 加入ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- MySQL依赖 start -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- 加入MyBatis 依赖 start -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <!-- 引入Spring(包含SpringMVC) 依赖 start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${springversion}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${springversion}</version>
        </dependency>
        <!-- 引用插件依赖:MyBatis整合Spring,如果mybatis版本在3.4及以上版本
           mybatis-spring的版本要在1.3以上	  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- JSTL -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- 德鲁伊数据连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
        <!-- pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>
        <!--处理json-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!--javaee-->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <!--文件上传下载-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>ssm_project</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <configuration>
                        <!--配置文件的路径-->
                        <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                        <overwrite>true</overwrite>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.5</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.2:创建空的包的目录

在这里插入图片描述

2.3:创建spring.xml文件

一共有8个步骤:
配置数据源
创建sqlSessionFactory
创建MapperScannerConfigurer,用于省略dao的实现类
配置事务
启用springmvc注解
配置视图解析器
扫描注解包
配置静态资源访问

完成这八个步骤之后需要在resources文件夹下创建一个mapper文件夹

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/tx
                           http://www.springframework.org/schema/tx/spring-tx.xsd
">
    <!-- 1.配置数据源-->
    <bean id="db" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/mytest?useUnicode=true&amp;characterEncoding=utf-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!--2.创建sqlSessionFactory-->
    <bean id="fac" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="db"></property>
        <property name="configLocation" value="classpath:mybatis.xml"></property> <!--指定mybatis的配置文件路径-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property><!--指定mybatis的mapper文件路径-->
    </bean>
    <!--3.创建MapperScannerConfigurer,用于省略dao的实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="fac"></property>
        <property name="basePackage"  value="com.kkb.dao"></property><!--接口所在包的路径-->
    </bean>
    <!--4.配置事务-->
    <bean id="mytx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="db"></property>
    </bean>
    <tx:annotation-driven transaction-manager="mytx"></tx:annotation-driven>
    <!--5.启用springmvc注解-->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--6.配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--7.扫描注解包-->
    <context:component-scan base-package="com.kkb"></context:component-scan>
    <!--8.配置静态资源访问-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>

2.4:配置mybatis.xml文件

主要用于给类起别名和配置分页插件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>

        <package name="com.kkb.bean"></package>
    </typeAliases>

    <plugins>
        <!-- PageHelper4.1.6 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

</configuration>

2.5:配置generatorConfig.xml文件

需要注意的内容:
1:数据库的链接信息需要修改。
2:生成实体类,生成SQLmapper文件,生成Dao文件的三个部分需要指定包名和路径。
3:表的部分需要根据数据库修改一下表名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!--配置生成器-->
<generatorConfiguration>
    <!--数据库驱动.jar-->
    <classPathEntry location="F:\maven\apache-maven-3.3.3\maven_repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar"/>
    <context id="MyBatis" targetRuntime="MyBatis3">
        <!--去除注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库连接-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mytest"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!--生成实体类,指定包名,以及生成的地址-->
        <javaModelGenerator targetPackage="com.kkb.bean"
                            targetProject="F:\IDEA\ssm_project\src\main\java">
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--生成SQLmapper文件-->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="F:\IDEA\ssm_project\src\main\resources">
        </sqlMapGenerator>
        <!--生成Dao文件,生成接口-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.kkb.dao"
                             targetProject="F:\IDEA\ssm_project\src\main\java">
        </javaClientGenerator>

        <table tableName="bills" enableCountByExample="false"
                enableUpdateByExample="false" enableDeleteByExample="false"
                enableSelectByExample="false" selectByExampleQueryId="false">
        </table>
        <table tableName="billtype" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

2.6:添加maven:mybatis

指令为mybatis-generator:generate -e
添加之后运行,开始反向生成。
在这里插入图片描述生成以下几个文件
在这里插入图片描述
在这里插入图片描述

至此环境搭建完毕。
值得注意的是方向生成的话XML文件建议删除重建,如果方向生成错误最好删除干净重新生成。不然会出现之前bug记录中1中出现的500错误。

3:查询数据部分

index.jsp
在起始页面index.jsp输入以下,让页面在加载的时候就发送请求,去向后台要数据展示已经收录的账单信息。
在这里插入图片描述
创建controller
用于处理index页面发来的请求
在这里插入图片描述
记得加@Controller和@RequestMapping注解
在这里插入图片描述
随后从controller层跳转到show页面
创建一个show页面待使用
在这里插入图片描述

在这里插入图片描述

由需求可以看出需要从数据库中获得账单信息和账单类型信息这两个对象,所以需要创建对应该controller层的service层用来调用数据。
先创建两个接口,接口需要有查询所有账单和查询账单类型的两个方法。
在这里插入图片描述

查询账单
BillsService
在这里插入图片描述
查询账单类型
BillTypesService
在这里插入图片描述
创建实现类实现service接口中的方法
在这里插入图片描述
BillsServiceImpl
在这里插入图片描述BillTypesServiceImpl
在这里插入图片描述将这两个方法分别添加在BillsMapper.xml和BilltypeMapper.xml文件里
在这里插入图片描述
BillsMapper.xml:
在这里插入图片描述

BilltypeMapper.xml:
在这里插入图片描述

随后开始进行逐层调用
先回到controller层
创建账单和账单类型两个对象
在这里插入图片描述
然后创建集合来接收调用service层方法传来的数据
在这里插入图片描述
在service层对应的实现类中添加注解和给属性赋值

BillsServiceImpl
在这里插入图片描述

BillTypesServiceImpl
在这里插入图片描述
来到dao层
此时的方法没有绑定sql语句所以有报错
在这里插入图片描述
前往BillsMapper.xml添加sql语句
在这里插入图片描述
在这里插入图片描述
BillTypesMapper.xml同样操作
在这里插入图片描述
在这里插入图片描述

回到controller,传值给前台
方式用的是ModelMap
在这里插入图片描述前往show页面做一个简单的符合需求的前端页面

先添加标签库,在下拉框中添加选项,用循环从数据库中拿出除了“不限”的选项
之后做一个简单的时间输入框和按钮
整体放入一个form表单中用来提交
在这里插入图片描述
添加fmt标签库

在这里插入图片描述在表单下方添加一个table表格来展示数据
在这里插入图片描述至此可以先进行测试,show页面初步完成
在这里插入图片描述由于要进行两表联查,所以去实体类中添加对应的对象。
Bills是多方,因为一个类型可以有多个账单信息,而一个账单信息只能有一个类型。是多个账单对应一个账单类型。
多方有一方的对象,一方有多方的集合
创建Billtype实体类,并且为其生成getter和setter方法
在这里插入图片描述
同样的在一方创建多方的集合billList
以及getter和setter方法
在这里插入图片描述然后就可在BillsMapper.xml文件中添加两表联查的结果映射
单表的内容可以直接复制之前生成的部分,多表的association部分名称要和bean包内对应
在这里插入图片描述
随后把show页面中的类别修改一下
在这里插入图片描述
重新启动服务器测试
在这里插入图片描述
这里可以发现类别已经显示出来了

之后实现金额列“+”和“-”号的显示
在show页面中将原本的price改成如下,判断是否为增加或者减少金额再进行显示
在这里插入图片描述
结果

在这里插入图片描述回到show页面
为form表单添加post请求,下拉框添加名称
在这里插入图片描述
在controller层添加方法处理请求
添加参数用于传递前端页面发来的数值
在这里插入图片描述同样给service层的接口和实现类添加参数
在这里插入图片描述

实现类,将参数都封装起来传递
在这里插入图片描述
在dao层的BillMapper添加参数
在这里插入图片描述

在这里插入图片描述
回到controller
将参数添加进去

在这里插入图片描述
回到BillsMapper.xml文件,添加一些判断的sql语句
用于之后判断前端页面传来的账单类型和时间
在这里插入图片描述在controller层接收数据,并且传给前台
在这里插入图片描述
启动服务器进行测试
在这里插入图片描述
日期也可以正常筛选
在这里插入图片描述实现数据回显
回到controller层,将需要的起止时间和账单类型回传给前端页面

在这里插入图片描述前端页面
回显时间
在这里插入图片描述
类别
用一个三目运算符进行判断,如果当前类型id和传来的id是相同的就选中当前的类型,如果不是则为空
在这里插入图片描述
测试
在这里插入图片描述
时间已经成功回显了
然而类型在搜索后不见了
在这里插入图片描述在controller界面中将类别信息也添加进去,返回给前台
在这里插入图片描述
完善了
在这里插入图片描述没有借入的数据,这里需要一个提示无数据的信息
在这里插入图片描述
在show页面用if进行一下判断,有值就正常显示
在这里插入图片描述
没有值就合并所有单元格然后显示无数据
在这里插入图片描述
刷新页面,完成
在这里插入图片描述
处理分页功能
先写几条应该有的功能
在这里插入图片描述在service层添加相应参数
在这里插入图片描述
实现类
在这里插入图片描述
controller
在这里插入图片描述新建一个util文件夹,创建一个PageUtil接口,为每页显示的总条数提供一个固定值
在这里插入图片描述

controller层添加每页的条数
在这里插入图片描述
使用分页插件,依赖包在最初已经添加,
把原来的List集合改成info
在这里插入图片描述service层也改一下
在这里插入图片描述
controller层
在这里插入图片描述
show页面中接收的参数bills也需要修改成info.list
在这里插入图片描述

在这里插入图片描述分页部分用来跳转页面的值
在这里插入图片描述由于service层没有使用包装类,所以为了防止空指针,给typeid提供一个默认值。
当然最好使用包装类
在这里插入图片描述添加一下分页的判断 如果是第一页或者最后一页则不能继续跳转
在这里插入图片描述
再添加一下模糊查询筛选之后的页数信息
在这里插入图片描述测试,成功
在这里插入图片描述

4:添加数据部分

在show页面添加请求
在这里插入图片描述controller页面处理请求,给前端add页面传值
在这里插入图片描述

新建一个add页面,按照需求添加对应的内容
在这里插入图片描述启动服务器看一眼
在这里插入图片描述show页面加一个请求名
在这里插入图片描述

在service层添加一个insert方法
在这里插入图片描述
实现类里也添加一下
在这里插入图片描述
controller页面接收从service层传来的数据
在这里插入图片描述
由于是使用对象来接受参数,要求页面里变量的名称和属性名一致
在show页面中添加title,price,billtime,explain这几个名称
在这里插入图片描述
tid也改成typeid
在这里插入图片描述
补全controller层的insert
在这里插入图片描述此外在实现类中应该添加一个 @Transactional注解,因为在springMVC用的是注解型事务
在这里插入图片描述
补充一下数据源的防乱码
在这里插入图片描述测试
在这里插入图片描述完成
在这里插入图片描述

5:修改数据部分

在show页面中添加请求
在这里插入图片描述

在service接口添加方法
在这里插入图片描述
实现类
在这里插入图片描述
在controller层添加处理请求的方法
在这里插入图片描述

创建一个update.jsp,先直接照搬insert方法的界面,把几个show页面需要显示的值都添加一下
在这里插入图片描述controller补充一下需要传的值
在这里插入图片描述
测试
在这里插入图片描述
和查询差不多的操作,也是都能显示成功,说明查询可行
修改一下请求名
在这里插入图片描述
老样子,先service层添加方法
在这里插入图片描述实现类
在这里插入图片描述
controller层补全处理请求的方法
在这里插入图片描述
由于是用的对象传递参数,所以要保持名称一致,这里是直接复制的新增,其他都一致,还少一个主键查询的主键id
这里就使用隐藏域把id一起传递过来,有安全隐患,不建议用
在这里插入图片描述controller层,添加一个if进行判断,传值成功就跳转
在这里插入图片描述

6:删除数据部分

show页面开始,添加请求
在这里插入图片描述
service接口添加方法
在这里插入图片描述实现类
在这里插入图片描述

controller处理请求
这里和其他不一样是因为需要提示是否删除成功,给一个弹窗来作为提醒
在这里插入图片描述补充一下
增删改应该都添加一下事务@Transactional
在这里插入图片描述测试
在这里插入图片描述

至此项目就完成了。

总结

这个项目主要是熟悉SSM框架的使用,写的过程中就一直需要进行逐层调用的操作,所以每一层之间的值得传递需要注意。此外在项目过程中遇到的一些bug也已经写入笔记。有一个bug卡了很久是因为一个字母打错了,前前后后都检查了无数遍最后才发现。项目比较简单这个是作为学习的复习,同时也是做个备忘。希望自己找实习和工作顺利8~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值