JavaWeb项目【源码】——图书项目3.0:Tomcat版本 & Mybatis + vue + axios + js + mysql + log4j 技术栈实现

目录

  • 项目简介
  • 思考 & 改进
    • 1.Jsp都是同步请求---->改成异步Ajax【完成】
    • 2.前端用Jsp技术落后----->用Vue框架【完成】
    • 3.架构问题:配置数据和Java代码耦合【完成】
    • 3.SQL语句和Java代码耦合【完成】
    • 4.架构问题:servlet只能处理一个请求
    • 5.响应方式为响应一个Json,但是servlet写法很繁琐
    • 6.在servlet中接收前端传的参数都是String,用的时候还需要类型转换
  • 用mybatis框架解耦SQL和Java
    • 1.导包pom.xml文件
    • 2.jdbc.properties文件【注意】易错点& 和 &;
      • 【注意】易错点& 和 &;
    • 3.log4j.properties日志配置文件
  • 思考 & 改进
    • 4.架构问题:servlet只能处理一个请求
    • 5.响应方式为响应一个Json,但是servlet写法很繁琐
    • 6.在servlet中接收前端传的参数都是String,用的时候还需要类型转换
    • 7.全局配置文件繁琐,xml和java必须一一对应


项目简介

本项目是一个简单的图书管理系统,本博客在tomcat中采用servlet 和vue和mybatis技术实现如下功能:

  • 用户登陆,输入用户名,密码,登陆成功后保存到session中,跳转到首页;
  • 用户注册,输入相关信息,以及验证码,注册成功到登陆页面;
  • 用户信息修改,昵称修改,密码修改;
  • 图书信息页面:展示所有信息,到数据分页显示,到分页展示+模糊查询+只看自己的书;
  • 新增图书信息,新增一条图书信息,类型下拉框选择,书名,简介输入,session中获取用户名和id,数据插入数据库中,再回到图书信息页面;
  • 删除图书信息:只能删除自己的书,删除成功再回到图书信息页面;
  • 修改图书信息:原有的信息进行回显,修改成功后再回到图书信息页面;
  • 图书类型分类统计:按照图书类型进行统计,数量为0显示0

在这里插入图片描述

思考 & 改进

1.Jsp都是同步请求---->改成异步Ajax【完成】

2.前端用Jsp技术落后----->用Vue框架【完成】

3.架构问题:配置数据和Java代码耦合【完成】

3.SQL语句和Java代码耦合【完成】

在这里插入图片描述

4.架构问题:servlet只能处理一个请求

在这里插入图片描述

5.响应方式为响应一个Json,但是servlet写法很繁琐

resp.getWriter().write(JSON.toJSONString(new ResData(

        // 4.new PageInfo对象,共享页数等,以及查询到的数据
        List<Company> list = companyService.queryByLikeNameLimit(pageNum, pageSize,name);
        PageInfo<Company> pageInfo = new PageInfo<>(pageNum, pageSize, total, pages, list);

        resp.getWriter().write(JSON.toJSONString(
                new ResData(200, "ok", pageInfo)
        ));

6.在servlet中接收前端传的参数都是String,用的时候还需要类型转换

        String name = req.getParameter("name");
        String typeId = req.getParameter("typeId");
        String birthday = req.getParameter("birthday");

当用的时候,如果想要的类型其实不是String,还需要自己转换格式

        // 日期类型转换
        private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            comUser.setBirthday(sdf.parse(birthday));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        
        // int类型转换
        opus.setTypeId(Integer.parseInt(typeId));

用mybatis框架解耦SQL和Java

JavaWeb项目【源码】——图书项目3.0:Tomcat版本 & Mybatis + vue + axios + js + mysql + log4j 技术栈实现_第1张图片

  • mybatis 是一个优秀的基于 java 的持久层框架,主要应用于关系型数据库(sql),它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement ,封装数据等繁杂的过程。

  • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。

  • 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

ORM思想是什么?

ORM(Object Relation Mapping)对象关系映射,是一种思想,主要包含三种对应关系:

关系映射 对应关系
类和表对应 一个pojo类 ←→ 一张数据库表
字段和列名对应 pojo类中的一个字段 ←→ 数据库表中的一列
类实例化对象和数据对应 pojo类的一个对象 ←→ 数据库表中的一行数据

ORM思想是所有持久层框架的基本思想,也是目前所有数据传输的思想。就是把数据和对象一一对应起来。从本质上来说SpringMVC也是做的这样的事情,数据在页面时,传到后台就成了对象。

在这里插入图片描述

1.导包pom.xml文件


DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>


    <properties resource="jdbc.properties"/>


    <settings>

        <setting name="mapUnderscoreToCamelCase" value="true"/>

        <setting name="logImpl" value="LOG4J"/>
    settings>


    <typeAliases>
        <package name="com.tianju.entity"/>

    typeAliases>


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


    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">

                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.connectionURL}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>





            dataSource>
        environment>
    environments>

    <mappers>


        <package name="com.tianju.dao"/>
    mappers>

configuration>

2.jdbc.properties文件【注意】易错点& 和 &;

jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.connectionURL = jdbc:mysql://127.0.0.1:3306/javaweb?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
#jdbc.connectionURL = "jdbc:mysql://"+ip+"?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
jdbc.username = root
jdbc.password = 123

【注意】易错点& 和 &;

注意在xml文件中,要用

&amp;

而在其他文件中,要用&

3.log4j.properties日志配置文件

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
#log4j.rootCategory=debug, CONSOLE, LOGFILE
# ??LOGFILE?????????
log4j.rootCategory=debug, CONSOLE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=D:/axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

思考 & 改进

4.架构问题:servlet只能处理一个请求

在这里插入图片描述

5.响应方式为响应一个Json,但是servlet写法很繁琐

resp.getWriter().write(JSON.toJSONString(new ResData(

        // 4.new PageInfo对象,共享页数等,以及查询到的数据
        List<Company> list = companyService.queryByLikeNameLimit(pageNum, pageSize,name);
        PageInfo<Company> pageInfo = new PageInfo<>(pageNum, pageSize, total, pages, list);

        resp.getWriter().write(JSON.toJSONString(
                new ResData(200, "ok", pageInfo)
        ));

6.在servlet中接收前端传的参数都是String,用的时候还需要类型转换

        String name = req.getParameter("name");
        String typeId = req.getParameter("typeId");
        String birthday = req.getParameter("birthday");

当用的时候,如果想要的类型其实不是String,还需要自己转换格式

        // 日期类型转换
        private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            comUser.setBirthday(sdf.parse(birthday));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        
        // int类型转换
        opus.setTypeId(Integer.parseInt(typeId));

7.全局配置文件繁琐,xml和java必须一一对应

在这里插入图片描述

你可能感兴趣的:(Java,javascript,mybatis,vue.js,xml,mysql,tomcat)