• 【JavaWeb】品牌管理系统前后端代码实现


     ✨✨个人主页:沫洺的主页

    📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                               📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                               📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

    💖💖如果文章对你有所帮助请留下三连✨✨

    🍔品牌(Brand)管理系统

    具体实现的功能包括:

    • 🎐查询所有(查询所有品牌数据)
    • 🎐新增品牌(增加新的品牌数据)
    • 🎐修改品牌(修改品牌数据)
    • 🎐删除品牌(删除品牌数据)
    • 🎐批量删除(删除多条品牌数据)
    • 🎐分页查询(分页展示品牌数据)
    • 🎐条件查询(通过条件精确查询品牌数据)

    🍟环境搭建

    💖💖环境搭建步骤

    • 🎐创建maven Web项目,配置pom.xml文件,添加坐标依赖,配置tomcat服务器
    • 🎐采用三层架构(web service mapper)的模式创建项目目录结构,工具类文件夹util,实体类文件夹pojo
    • 🎐搭建MyBatis环境,创建mybatis-config.xml核心配置文件,BrandMapper.xml映射文件,BrandMapper接口
    • 🎐使用navicat工具创建数据库db5,表tb_brand,添加数据,(也可使用其他工具,自定义库名,记得在mybatis核心配置文件中修改连接信息)
    • 🎐webapp创建js文件夹引入vue.js和axios-0.18.0.js本地js,引入element-ui饿了么组件库

    💖💖前言说明

    • 🎐由于本片文章给出的主要是项目源码,在复制时不用将import导包部分一同复制,原因是如果是自定义的项目目录,导包的路径就不一致会让你重新导包,最好的方法是先创建文件,再将除了import的其他部分复制,再IDEA工具中有个自动导包的设置,会根据自己的项目目录进行导包,可以设置一下,这里的项目目录就是com/moming

    💖💖IDEA工具设置自动导包

    💖💖接下来开始搭建环境:

    🍱创建maven Web项目

    🍱配置pom.xml文件(添加坐标依赖,配置tomcat服务器)

    🍚注意在tomcat配置中,端口号和虚拟目录可自定义

    🍖pom.xml

    1. "1.0" encoding="UTF-8"?>
    2. <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">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>org.examplegroupId>
    5. <artifactId>brand-caseartifactId>
    6. <version>1.0-SNAPSHOTversion>
    7. <packaging>warpackaging>
    8. <properties>
    9. <maven.compiler.source>8maven.compiler.source>
    10. <maven.compiler.target>8maven.compiler.target>
    11. properties>
    12. <dependencies>
    13. <dependency>
    14. <groupId>org.mybatisgroupId>
    15. <artifactId>mybatisartifactId>
    16. <version>3.5.5version>
    17. dependency>
    18. <dependency>
    19. <groupId>mysqlgroupId>
    20. <artifactId>mysql-connector-javaartifactId>
    21. <version>5.1.49version>
    22. dependency>
    23. <dependency>
    24. <groupId>com.github.pagehelpergroupId>
    25. <artifactId>pagehelperartifactId>
    26. <version>5.1.2version>
    27. dependency>
    28. <dependency>
    29. <groupId>javax.servletgroupId>
    30. <artifactId>javax.servlet-apiartifactId>
    31. <version>3.1.0version>
    32. <scope>providedscope>
    33. dependency>
    34. <dependency>
    35. <groupId>junitgroupId>
    36. <artifactId>junitartifactId>
    37. <version>4.13version>
    38. dependency>
    39. <dependency>
    40. <groupId>cn.hutoolgroupId>
    41. <artifactId>hutool-allartifactId>
    42. <version>5.8.5version>
    43. dependency>
    44. <dependency>
    45. <groupId>ch.qos.logbackgroupId>
    46. <artifactId>logback-classicartifactId>
    47. <version>1.2.3version>
    48. dependency>
    49. <dependency>
    50. <groupId>ch.qos.logbackgroupId>
    51. <artifactId>logback-coreartifactId>
    52. <version>1.2.3version>
    53. dependency>
    54. <dependency>
    55. <groupId>org.projectlombokgroupId>
    56. <artifactId>lombokartifactId>
    57. <version>1.18.24version>
    58. <scope>compilescope>
    59. dependency>
    60. <dependency>
    61. <groupId>javax.servlet.jspgroupId>
    62. <artifactId>jsp-apiartifactId>
    63. <version>2.2version>
    64. <scope>providedscope>
    65. dependency>
    66. <dependency>
    67. <groupId>jstlgroupId>
    68. <artifactId>jstlartifactId>
    69. <version>1.2version>
    70. dependency>
    71. <dependency>
    72. <groupId>taglibsgroupId>
    73. <artifactId>standardartifactId>
    74. <version>1.1.2version>
    75. dependency>
    76. <dependency>
    77. <groupId>org.springframeworkgroupId>
    78. <artifactId>spring-webmvcartifactId>
    79. <version>5.3.2version>
    80. dependency>
    81. <dependency>
    82. <groupId>com.alibabagroupId>
    83. <artifactId>fastjsonartifactId>
    84. <version>1.2.62version>
    85. dependency>
    86. dependencies>
    87. <build>
    88. <plugins>
    89. <plugin>
    90. <groupId>org.apache.tomcat.mavengroupId>
    91. <artifactId>tomcat7-maven-pluginartifactId>
    92. <version>2.2version>
    93. <configuration>
    94. <port>8080port>
    95. <path>/momingpath>
    96. <uriEncoding>utf-8uriEncoding>
    97. configuration>
    98. plugin>
    99. plugins>
    100. build>
    101. project>

    🍱创建项目目录结构

    🍚目录结构com/moming可自定义

    🍱搭建MyBatis环境

    🍚如果自定义了目录结构,那么在核心配置文件中将com.moming改为自己的结构路径

    然后就是数据库连接信息配置,数据库名,账号,密码

    🍖mybatis-config.xml核心配置文件

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <typeAliases>
    7. <package name="com.moming.pojo"/>
    8. typeAliases>
    9. <plugins>
    10. <plugin interceptor="com.github.pagehelper.PageInterceptor">
    11. plugin>
    12. plugins>
    13. <environments default="development">
    14. <environment id="development">
    15. <transactionManager type="JDBC"/>
    16. <dataSource type="POOLED">
    17. <property name="driver" value="com.mysql.jdbc.Driver"/>
    18. <property name="url" value="jdbc:mysql:///db5?useSSL=false&useServerPrepStmts=true&characterencoding=utf-8&allowPublicKeyRetrieval=true"/>
    19. <property name="username" value="root"/>
    20. <property name="password" value="123456"/>
    21. dataSource>
    22. environment>
    23. environments>
    24. <mappers>
    25. <package name="com.moming.mapper"/>
    26. mappers>
    27. configuration>

    🍱创建BrandMapper.xml映射文件,BrandMapper接口

    🍱创建数据库db5,表tb_brand,添加数据(库名可自定义,和MyBatis核心配置文件中的库名保持一致)

     🍖tb_brand.sql

    1. -- 删除tb_brand表
    2. drop table if exists tb_brand;
    3. -- 创建tb_brand表
    4. create table tb_brand
    5. (
    6. -- id 主键
    7. id int primary key auto_increment,
    8. -- 品牌名称
    9. brand_name varchar(20),
    10. -- 企业名称
    11. company_name varchar(20),
    12. -- 排序字段
    13. ordered int,
    14. -- 描述信息
    15. description varchar(100),
    16. -- 状态:0:禁用 1:启用
    17. status int
    18. );
    19. -- 添加数据
    20. insert into tb_brand (brand_name, company_name, ordered, description, status)
    21. values
    22. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    23. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    24. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    25. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    26. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    27. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    28. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1),
    29. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    30. ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
    31. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    32. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    33. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    34. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    35. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    36. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    37. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1),
    38. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    39. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    40. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    41. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    42. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    43. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    44. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1),
    45. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    46. ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
    47. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    48. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    49. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    50. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    51. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    52. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    53. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1),
    54. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    55. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    56. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    57. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    58. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    59. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    60. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1),
    61. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    62. ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
    63. ('华为', '华为技术有限公司', 100, '万物互联', 1),
    64. ('小米', '小米科技有限公司', 50, 'are you ok', 1),
    65. ('格力', '格力电器股份有限公司', 30, '让世界爱上中国造', 1),
    66. ('阿里巴巴', '阿里巴巴集团控股有限公司', 10, '买买买', 1),
    67. ('腾讯', '腾讯计算机系统有限公司', 50, '玩玩玩', 0),
    68. ('百度', '百度在线网络技术公司', 5, '搜搜搜', 0),
    69. ('京东', '北京京东世纪贸易有限公司', 40, '就是快', 1)
    70. ;
    71. SELECT * FROM tb_brand;

    🍱webapp配置js和element组件库

    由于文件比较大,在上一篇结尾处可找到这三个文件,将element-ui解压后复制到项目中,上一篇文章可去JavaWeb专栏去找

    🍟后端代码实现

    🌭 实体类pojo

    🍖Brand

    1. package com.moming.pojo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. public class Brand {
    9. // id 主键
    10. private Integer id;
    11. // 品牌名称
    12. private String brandName;
    13. // 企业名称
    14. private String companyName;
    15. // 排序字段
    16. private Integer ordered;
    17. // 描述信息
    18. private String description;
    19. // 状态:0:禁用 1:启用
    20. private Integer status;
    21. //逻辑视图
    22. public String getStatusStr(){
    23. if(status == null){
    24. return "未知";
    25. }
    26. return status == 0 ? "禁用" : "启用";
    27. }
    28. }

    🍖PageBean

    1. package com.moming.pojo;
    2. import lombok.Data;
    3. import java.util.List;
    4. //分页查询的JavaBean
    5. @Data
    6. public class PageBean {
    7. // 总记录数
    8. private int totalCount;
    9. // 当前页数据
    10. private List rows;
    11. }

    🌭 工具类util

    🍖SqlSessionFactoryUtils

    1. package com.moming.util;
    2. import org.apache.ibatis.io.Resources;
    3. import org.apache.ibatis.session.SqlSessionFactory;
    4. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    5. import java.io.IOException;
    6. import java.io.InputStream;
    7. public class SqlSessionFactoryUtils {
    8. private SqlSessionFactoryUtils() {
    9. }
    10. private static SqlSessionFactory sqlSessionFactory;
    11. static {
    12. try {
    13. //1.加载mybatis的核心配置文件,获取SqlSessionFactory
    14. //定义配置文件的路径
    15. String resource = "mybatis-config.xml";
    16. //资源加载返回字节输入流
    17. InputStream inputStream = Resources.getResourceAsStream(resource);
    18. //获取工厂
    19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    20. } catch (IOException e) {
    21. e.printStackTrace();
    22. }
    23. }
    24. public static SqlSessionFactory getSqlSessionFactory() {
    25. return sqlSessionFactory;
    26. }
    27. }

    🍖BaseServlet

    1. package com.moming.util;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.lang.reflect.InvocationTargetException;
    8. import java.lang.reflect.Method;
    9. /**
    10. * 对tomcat来讲,都是找servlet中的service方法,因此将来定义的servlet只需要继承BaseServlet
    11. * 在BaseServlet中,重写service方法,根据url的地址值获取方法名并反射对应的方法,执行即可
    12. */
    13. //用来替换HttpServlet,根据请求的最后一段路径进行方法分发,代替HttpServlet根据请求方法分发
    14. public class BaseServlet extends HttpServlet {
    15. @Override
    16. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17. //1.获取请求路径 // /moming/brand/selectAll
    18. String uri = req.getRequestURI();
    19. //2.获取最后一段路径,方法名 // /selectAll
    20. String[] arr = uri.split("/");
    21. String methodName = arr[arr.length - 1];
    22. //int index = uri.lastIndexOf("/");
    23. //String methodName = uri.substring(index+1);
    24. //3.执行方法
    25. //3.1获取BrandServlet 或者 UserServlet的字节码对象
    26. //谁调用(this 所在的方法),(this)就代表谁
    27. //也就是BaseServlet的子类对象
    28. Classextends BaseServlet> cls = this.getClass();
    29. //3.2通过反射获取方法的Method对象
    30. try {
    31. Method method = cls.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
    32. //3.3通过反射执行方法
    33. method.invoke(this, req, resp);
    34. } catch (NoSuchMethodException e) {
    35. e.printStackTrace();
    36. } catch (InvocationTargetException e) {
    37. e.printStackTrace();
    38. } catch (IllegalAccessException e) {
    39. e.printStackTrace();
    40. }
    41. }
    42. }

    🌭 dao层

    🍖BrandMapper接口

    1. package com.moming.mapper;
    2. import com.moming.pojo.Brand;
    3. import org.apache.ibatis.annotations.*;
    4. import java.util.List;
    5. public interface BrandMapper {
    6. //注意数据库字段名称和实体类字段名称不一致问题,可以通过开启驼峰命名支持,也可以使用resultMap映射
    7. //如果使用resultMap需要在这里添加注解@ResultMap("brandResultMap")
    8. /**
    9. * 查询所有
    10. *
    11. * @return
    12. */
    13. @Select("select * from tb_brand")
    14. @ResultMap("brandResultMap")
    15. List selectAll();
    16. /**
    17. * 添加数据
    18. *
    19. * @param brand
    20. */
    21. @Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
    22. int add(Brand brand);
    23. /**
    24. * 修改
    25. *
    26. * @param brand
    27. * @return
    28. */
    29. int updateBrand(Brand brand);
    30. /**
    31. * 批量删除
    32. *
    33. * @param ids
    34. */
    35. void deleteByIds(@Param("ids") int[] ids);
    36. /**
    37. * 单个删除
    38. *
    39. * @param id
    40. */
    41. @Delete("delete from tb_brand where id=#{id}")
    42. void deleteById(String id);
    43. /**
    44. * 分页查询
    45. *
    46. * @param begin
    47. * @param size
    48. * @return
    49. */
    50. @Select("select * from tb_brand limit #{begin} , #{size}")
    51. @ResultMap("brandResultMap")
    52. List selectByPage(@Param("begin") int begin, @Param("size") int size);
    53. /**
    54. * 查询总记录数
    55. *
    56. * @return
    57. */
    58. @Select("select count(*) from tb_brand ")
    59. int selectTotalCount();
    60. /**
    61. * 分页条件查询
    62. *
    63. * @param begin
    64. * @param size
    65. * @return
    66. */
    67. List selectByPageAndCondition(@Param("begin") int begin, @Param("size") int size, @Param("brand") Brand brand);
    68. /**
    69. * 根据条件查询总记录数
    70. *
    71. * @return
    72. */
    73. int selectTotalCountByCondition(Brand brand);
    74. }

    🍚注意配置中namespace路径改为自己的

    🍖BrandMapper.xml

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.moming.mapper.BrandMapper">
    6. <resultMap id="brandResultMap" type="brand">
    7. <result column="brand_name" property="brandName">result>
    8. <result column="company_name" property="companyName">result>
    9. resultMap>
    10. <update id="updateBrand">
    11. update tb_brand
    12. <set>
    13. <if test="brandName !=null and brandName!=''">
    14. brand_name = #{brandName},
    15. if>
    16. <if test="companyName !=null and companyName!=''">
    17. company_name = #{companyName},
    18. if>
    19. <if test="ordered !=null and ordered!=0">
    20. ordered = #{ordered},
    21. if>
    22. <if test="description !=null and description!=''">
    23. description = #{description},
    24. if>
    25. <if test="status !=null ">
    26. status = #{status}
    27. if>
    28. set>
    29. where id=#{id};
    30. update>
    31. <delete id="deleteByIds">
    32. delete from tb_brand where id in
    33. <foreach collection="ids" item="id" separator="," open="(" close=")">
    34. #{id}
    35. foreach>
    36. delete>
    37. <select id="selectByPageAndCondition" resultMap="brandResultMap">
    38. select *
    39. from tb_brand
    40. <where>
    41. <if test="brand.brandName != null and brand.brandName != '' ">
    42. and brand_name like #{brand.brandName}
    43. if>
    44. <if test="brand.companyName != null and brand.companyName != '' ">
    45. and company_name like #{brand.companyName}
    46. if>
    47. <if test="brand.status != null">
    48. and status = #{brand.status}
    49. if>
    50. where>
    51. limit #{begin} , #{size}
    52. select>
    53. <select id="selectTotalCountByCondition" resultType="java.lang.Integer">
    54. select count(*)
    55. from tb_brand
    56. <where>
    57. <if test="brandName != null and brandName != '' ">
    58. and brand_name like #{brandName}
    59. if>
    60. <if test="companyName != null and companyName != '' ">
    61. and company_name like #{companyName}
    62. if>
    63. <if test="status != null">
    64. and status = #{status}
    65. if>
    66. where>
    67. select>
    68. mapper>

    🌭 service层

    🍚为了方便代码维护,创建一个接口BrandService,创建impl/BrandServiceImpl实现类去实现接口

    🍖BrandService接口

    1. package com.moming.service;
    2. import com.moming.pojo.Brand;
    3. import com.moming.pojo.PageBean;
    4. import java.util.List;
    5. public interface BrandService {
    6. /**
    7. * 查询所有
    8. * @return
    9. */
    10. List selectAll();
    11. /**
    12. * 添加数据
    13. * @param brand
    14. */
    15. void add(Brand brand);
    16. /**
    17. * 添加或修改
    18. * @param brand
    19. * @return
    20. */
    21. String addOrUpdate(Brand brand);
    22. /**
    23. * 批量删除
    24. * @param ids
    25. */
    26. void deleteByIds(int[] ids);
    27. /**
    28. * 单个删除
    29. * @param id
    30. */
    31. void deleteById(String id);
    32. /**
    33. * 分页条件查询
    34. * @param currentPage 当前页码
    35. * @param pageSize 每页展示条数
    36. * @return
    37. */
    38. PageBean selectByPage(int currentPage, int pageSize);
    39. /**
    40. * 分页条件查询
    41. * @param currentPage
    42. * @param pageSize
    43. * @param brand
    44. * @return
    45. */
    46. PageBean selectByPageAndCondition(int currentPage, int pageSize,Brand brand);
    47. }

    🍖BrandServiceImpl

    1. package com.moming.service.impl;
    2. import com.moming.mapper.BrandMapper;
    3. import com.moming.pojo.Brand;
    4. import com.moming.pojo.PageBean;
    5. import com.moming.service.BrandService;
    6. import com.moming.util.SqlSessionFactoryUtils;
    7. import org.apache.ibatis.session.SqlSession;
    8. import org.apache.ibatis.session.SqlSessionFactory;
    9. import java.util.List;
    10. public class BrandServiceImpl implements BrandService {
    11. //1.创建SqlSessionFactory 工厂对象
    12. SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
    13. /**
    14. * 查询所有
    15. *
    16. * @return
    17. */
    18. @Override
    19. public List selectAll() {
    20. //2.获取SqlSession对象
    21. SqlSession sqlSession = sqlSessionFactory.openSession();
    22. //3.获取mapper
    23. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    24. //4.调用方法
    25. List brands = mapper.selectAll();
    26. //5.释放资源
    27. sqlSession.close();
    28. return brands;
    29. }
    30. /**
    31. * 添加
    32. *
    33. * @param brand
    34. */
    35. @Override
    36. public void add(Brand brand) {
    37. //2.获取SqlSession对象
    38. SqlSession sqlSession = sqlSessionFactory.openSession();
    39. //3.获取mapper
    40. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    41. //4.调用方法
    42. mapper.add(brand);
    43. //提交事务
    44. sqlSession.commit();
    45. //5.释放资源
    46. sqlSession.close();
    47. }
    48. /**
    49. * 添加或修改
    50. * @param brand
    51. * @return
    52. */
    53. @Override
    54. public String addOrUpdate(Brand brand) {
    55. //2.获取SqlSession对象
    56. SqlSession sqlSession = sqlSessionFactory.openSession();
    57. //3.获取mapper
    58. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    59. //判断brand对象中的id是否有效,如果有效,则执行修改的行为,无效则执行添加的行为
    60. //业务层,返回1表示添加成功,2修改成功,3添加失败,4修改失败
    61. if(brand.getId()!=null&&brand.getId()!=0){
    62. //修改
    63. int i = mapper.updateBrand(brand);
    64. //提交事务
    65. sqlSession.commit();
    66. //5.释放资源
    67. sqlSession.close();
    68. if(i>=1){
    69. return "修改成功";
    70. }else {
    71. return "修改失败";
    72. }
    73. }else {
    74. //添加
    75. int i = mapper.add(brand);
    76. //提交事务
    77. sqlSession.commit();
    78. //5.释放资源
    79. sqlSession.close();
    80. if(i>=1){
    81. return "添加成功";
    82. }else {
    83. return "添加失败";
    84. }
    85. }
    86. }
    87. /**
    88. * 批量删除
    89. * @param ids
    90. */
    91. @Override
    92. public void deleteByIds(int[] ids) {
    93. //2.获取SqlSession对象
    94. SqlSession sqlSession = sqlSessionFactory.openSession();
    95. //3.获取mapper
    96. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    97. //4.调用方法
    98. mapper.deleteByIds(ids);
    99. //提交事务
    100. sqlSession.commit();
    101. //5.释放资源
    102. sqlSession.close();
    103. }
    104. /**
    105. * 单个删除
    106. * @param id
    107. */
    108. @Override
    109. public void deleteById(String id) {
    110. //2.获取SqlSession对象
    111. SqlSession sqlSession = sqlSessionFactory.openSession();
    112. //3.获取mapper
    113. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    114. //4.调用方法
    115. mapper.deleteById(id);
    116. //提交事务
    117. sqlSession.commit();
    118. //5.释放资源
    119. sqlSession.close();
    120. }
    121. /**
    122. * 分页查询
    123. * @param currentPage 当前页码
    124. * @param pageSize 每页展示条数
    125. * @return
    126. */
    127. @Override
    128. public PageBean selectByPage(int currentPage, int pageSize) {
    129. //2.获取SqlSession对象
    130. SqlSession sqlSession = sqlSessionFactory.openSession();
    131. //3.获取mapper
    132. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    133. //4. 计算开始索引
    134. int begin = (currentPage - 1) * pageSize;
    135. // 计算查询条目数
    136. int size = pageSize;
    137. //5. 查询当前页数据
    138. List rows = mapper.selectByPage(begin, size);
    139. //6. 查询总记录数
    140. int totalCount = mapper.selectTotalCount();
    141. //7. 封装PageBean对象
    142. PageBean pageBean = new PageBean<>();
    143. pageBean.setRows(rows);
    144. pageBean.setTotalCount(totalCount);
    145. //8. 释放资源
    146. sqlSession.close();
    147. return pageBean;
    148. }
    149. /**
    150. * 分页条件查询
    151. * @param currentPage
    152. * @param pageSize
    153. * @param brand
    154. * @return
    155. */
    156. @Override
    157. public PageBean selectByPageAndCondition(int currentPage, int pageSize, Brand brand) {
    158. //2.获取SqlSession对象
    159. SqlSession sqlSession = sqlSessionFactory.openSession();
    160. //3.获取mapper
    161. BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
    162. //4. 计算开始索引
    163. int begin = (currentPage - 1) * pageSize;
    164. // 计算查询条目数
    165. int size = pageSize;
    166. // 处理brand条件,模糊表达式
    167. String brandName = brand.getBrandName();
    168. if (brandName != null && brandName.length() > 0) {
    169. brand.setBrandName("%" + brandName + "%");
    170. }
    171. String companyName = brand.getCompanyName();
    172. if (companyName != null && companyName.length() > 0) {
    173. brand.setCompanyName("%" + companyName + "%");
    174. }
    175. //5. 查询当前页数据
    176. List rows = mapper.selectByPageAndCondition(begin, size, brand);
    177. //6. 查询总记录数
    178. int totalCount = mapper.selectTotalCountByCondition(brand);
    179. //7. 封装PageBean对象
    180. PageBean pageBean = new PageBean<>();
    181. pageBean.setRows(rows);
    182. pageBean.setTotalCount(totalCount);
    183. //8. 释放资源
    184. sqlSession.close();
    185. return pageBean;
    186. }
    187. }

    🌭 web层

    🍖BrandServlet

    1. package com.moming.web;
    2. import com.alibaba.fastjson.JSON;
    3. import com.moming.pojo.Brand;
    4. import com.moming.pojo.PageBean;
    5. import com.moming.service.BrandService;
    6. import com.moming.service.impl.BrandServiceImpl;
    7. import com.moming.util.BaseServlet;
    8. import javax.servlet.ServletException;
    9. import javax.servlet.annotation.WebServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. import java.io.BufferedReader;
    13. import java.io.IOException;
    14. import java.util.List;
    15. /**
    16. * 这个类就是专门写所有于商品增删改查相关的类
    17. */
    18. @WebServlet("/brand/*")
    19. public class BrandServlet extends BaseServlet {
    20. private BrandService brandService = new BrandServiceImpl();
    21. //这个方法就是专门出来查询所有商品的方法
    22. public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    23. //1.调用service查询
    24. List brands = brandService.selectAll();
    25. //2.将list集合转换为JSON
    26. String jsonString = JSON.toJSONString(brands);
    27. //3.响应JSON数据
    28. //设置响应编码格式
    29. response.setContentType("text/json;charset=utf-8");
    30. response.getWriter().write(jsonString);
    31. }
    32. //添加
    33. public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    34. //1.接收品牌数据
    35. BufferedReader reader = request.getReader();
    36. String params = reader.readLine();
    37. //转为Brand对象
    38. Brand brand = JSON.parseObject(params,Brand.class);
    39. //2.调用service添加
    40. brandService.add(brand);
    41. //3.响应成功标识
    42. response.getWriter().write("success");
    43. }
    44. //添加或修改
    45. public void addOrUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    46. //1.接收品牌数据
    47. BufferedReader reader = request.getReader();
    48. String params = reader.readLine();
    49. //转为Brand对象
    50. Brand brand = JSON.parseObject(params,Brand.class);
    51. //调用service 业务层,返回1表示添加成功,2修改成功,3添加失败,4修改失败
    52. //2.调用service添加
    53. String msg = brandService.addOrUpdate(brand);
    54. response.setContentType("text/html;charset=utf-8");
    55. //3.响应
    56. response.getWriter().write(msg);
    57. }
    58. //批量删除
    59. public void deleteByIds(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    60. //1.接收数据
    61. BufferedReader reader = request.getReader();
    62. String params = reader.readLine();
    63. //转为int[]
    64. int[] ids = JSON.parseObject(params, int[].class);
    65. //2.调用service添加
    66. brandService.deleteByIds(ids);
    67. //3.响应成功标识
    68. response.getWriter().write("success");
    69. }
    70. //删除
    71. public void deleteById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    72. //1.接收数据
    73. String id = request.getParameter("id");
    74. //2.调用service添加
    75. brandService.deleteById(id);
    76. //3.响应成功标识
    77. response.getWriter().write("success");
    78. }
    79. /**
    80. * 分页查询
    81. * @param request
    82. * @param response
    83. * @throws ServletException
    84. * @throws IOException
    85. */
    86. public void selectByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    87. //1. 接收 当前页码 和 每页展示条数 url?currentPage=1&pageSize=5
    88. String _currentPage = request.getParameter("currentPage");
    89. String _pageSize = request.getParameter("pageSize");
    90. //转换
    91. int currentPage = Integer.parseInt(_currentPage);
    92. int pageSize = Integer.parseInt(_pageSize);
    93. //2. 调用service查询
    94. PageBean pageBean = brandService.selectByPage(currentPage, pageSize);
    95. //2. 转为JSON
    96. String jsonString = JSON.toJSONString(pageBean);
    97. //3. 写数据
    98. response.setContentType("text/json;charset=utf-8");
    99. response.getWriter().write(jsonString);
    100. }
    101. /**
    102. * 分页条件查询
    103. * @param request
    104. * @param response
    105. * @throws ServletException
    106. * @throws IOException
    107. */
    108. public void selectByPageAndCondition(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    109. //1. 接收 当前页码 和 每页展示条数 url?currentPage=1&pageSize=5
    110. String _currentPage = request.getParameter("currentPage");
    111. String _pageSize = request.getParameter("pageSize");
    112. int currentPage = Integer.parseInt(_currentPage);
    113. int pageSize = Integer.parseInt(_pageSize);
    114. // 获取查询条件对象
    115. BufferedReader br = request.getReader();
    116. String params = br.readLine();//json字符串
    117. //转为 Brand
    118. Brand brand = JSON.parseObject(params, Brand.class);
    119. //2. 调用service查询
    120. PageBean pageBean = brandService.selectByPageAndCondition(currentPage,pageSize,brand);
    121. //2. 转为JSON
    122. String jsonString = JSON.toJSONString(pageBean);
    123. //3. 写数据
    124. response.setContentType("text/json;charset=utf-8");
    125. response.getWriter().write(jsonString);
    126. }
    127. }

    🍟前端代码实现

    🌭 前端页面

    🍚在发送axios异步请求设置中url的路径要改成自己的

    🍖brand.xml

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. <style>
    7. .el-table .warning-row {
    8. background: oldlace;
    9. }
    10. .el-table .success-row {
    11. background: #f0f9eb;
    12. }
    13. style>
    14. head>
    15. <body>
    16. <div id="app">
    17. <el-form :inline="true" :model="brand" class="demo-form-inline">
    18. <el-form-item label="当前状态">
    19. <el-select v-model="brand.status" placeholder="当前状态">
    20. <el-option label="当前状态" value="">el-option>
    21. <el-option label="启用" value="1">el-option>
    22. <el-option label="禁用" value="0">el-option>
    23. el-select>
    24. el-form-item>
    25. <el-form-item label="企业名称">
    26. <el-input v-model="brand.companyName" placeholder="企业名称">el-input>
    27. el-form-item>
    28. <el-form-item label="品牌名称">
    29. <el-input v-model="brand.brandName" placeholder="品牌名称">el-input>
    30. el-form-item>
    31. <el-form-item>
    32. <el-button type="primary" @click="onSubmit">查询el-button>
    33. el-form-item>
    34. el-form>
    35. <el-row>
    36. <el-button type="danger" plain @click="deleteByIds">批量删除el-button>
    37. <el-button type="primary" plain @click="openDialog('新增商品')">新增el-button>
    38. el-row>
    39. <el-dialog
    40. :title="title"
    41. :visible.sync="dialogVisible"
    42. width="30%">
    43. <el-form ref="form" :model="brand" label-width="80px">
    44. <el-form-item label="品牌名称">
    45. <el-input v-model="brand.brandName">el-input>
    46. el-form-item>
    47. <el-form-item label="企业名称">
    48. <el-input v-model="brand.companyName">el-input>
    49. el-form-item>
    50. <el-form-item label="排序">
    51. <el-input v-model="brand.ordered">el-input>
    52. el-form-item>
    53. <el-form-item label="备注">
    54. <el-input type="textarea" v-model="brand.description">el-input>
    55. el-form-item>
    56. <el-form-item label="状态">
    57. <el-switch v-model="brand.status"
    58. :active-value="1"
    59. :inactive-value="0"
    60. >el-switch>
    61. el-form-item>
    62. <el-form-item>
    63. <el-button type="primary" @click="addOrUpdateBrand">提交el-button>
    64. <el-button @click="dialogVisible = false">取消el-button>
    65. el-form-item>
    66. el-form>
    67. el-dialog>
    68. <template>
    69. <el-table
    70. :data="tableData"
    71. style="width: 100%"
    72. :row-class-name="tableRowClassName"
    73. @selection-change="handleSelectionChange">
    74. <el-table-column
    75. type="selection"
    76. width="55">
    77. el-table-column>
    78. <el-table-column
    79. type="index"
    80. width="50">
    81. el-table-column>
    82. <el-table-column
    83. prop="brandName"
    84. label="品牌名称"
    85. align="center">
    86. el-table-column>
    87. <el-table-column
    88. prop="companyName"
    89. label="企业名称"
    90. align="center">
    91. el-table-column>
    92. <el-table-column
    93. prop="ordered"
    94. align="center"
    95. label="排序">
    96. el-table-column>
    97. <el-table-column
    98. prop="statusStr"
    99. align="center"
    100. label="当前状态">
    101. el-table-column>
    102. <el-table-column
    103. align="center"
    104. label="操作">
    105. <template slot-scope="scope">
    106. <el-button
    107. @click="handleEdit(scope.$index, scope.row)">修改
    108. el-button>
    109. <el-button
    110. type="danger"
    111. @click="handleDelete(scope.$index, scope.row)">删除
    112. el-button>
    113. template>
    114. el-table-column>
    115. el-table>
    116. template>
    117. <el-pagination
    118. @size-change="handleSizeChange"
    119. @current-change="handleCurrentChange"
    120. :current-page="currentPage"
    121. :page-sizes="[5, 10, 15, 20]"
    122. :page-size="5"
    123. layout="total, sizes, prev, pager, next, jumper"
    124. :total="totalCount">
    125. el-pagination>
    126. div>
    127. <script src="js/axios-0.18.0.js">script>
    128. <script src="js/vue.js">script>
    129. <script src="element-ui/lib/index.js">script>
    130. <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
    131. <script>
    132. let v = new Vue({
    133. el: "#app",
    134. data() {
    135. return {
    136. //每页显示条数
    137. pageSize: 5,
    138. //总记录数
    139. totalCount: 100,
    140. //当前页码
    141. currentPage: 1,
    142. //添加数据对话框是否展示的标记
    143. dialogVisible: false,
    144. //对话框标题
    145. title: '新增商品',
    146. // 品牌模型数据
    147. brand: {
    148. status: '',
    149. brandName: '',
    150. companyName: '',
    151. id: "",
    152. ordered: "",
    153. description: ""
    154. },
    155. //被选中的id数组
    156. selectedIds: [],
    157. // 复选框选中数据集合
    158. multipleSelection: [],
    159. // 表格数据,假数据
    160. tableData: [{
    161. id: '',
    162. brandName: '华为',
    163. companyName: '华为科技有限公司',
    164. ordered: '100',
    165. status: "1"
    166. }]
    167. }
    168. },
    169. mounted() {
    170. this.selectAll();
    171. },
    172. methods: {
    173. //查询所有的方法
    174. selectAll() {
    175. //提升生命周期
    176. //没有发送异步请求之前,this表示vue对象,发送之后this表示window对象
    177. // var _this=this;
    178. // //页面加载完成之后执行的函数,发送异步请求,获取JSON函数,给vue中的tableDate变量赋值
    179. // axios({
    180. // method: "get",
    181. // url: "http://localhost:8080/moming/brand/selectAll"
    182. // }).then(function (resp) {
    183. // _this.tableData = resp.data;
    184. // })
    185. // //查询分页数据
    186. // var _this=this;
    187. // //页面加载完成之后执行的函数,发送异步请求,获取JSON函数,给vue中的tableDate变量赋值
    188. // axios({
    189. // method: "post",
    190. // url: "http://localhost:8080/moming/brand/selectByPageAndCondition?currentPage="+this.currentPage+"&pageSize="+this.pageSize,
    191. // data: this.brand
    192. // }).then(function (resp) {
    193. // //设置表格数据
    194. // _this.tableData = resp.data.rows;// {rows:[],totalCount:100}
    195. // //设置总记录数
    196. // _this.totalCount = resp.data.totalCount;
    197. // })
    198. //查询分页数据
    199. var _this = this;
    200. //页面加载完成之后执行的函数,发送异步请求,获取JSON函数,给vue中的tableDate变量赋值
    201. axios({
    202. method: "post",
    203. url: "http://localhost:8080/moming/brand/selectByPageAndCondition?currentPage=" + this.currentPage + "&pageSize=" + this.pageSize,
    204. data: this.brand
    205. }).then(resp => {
    206. //设置表格数据
    207. this.tableData = resp.data.rows;// {rows:[],totalCount:100}
    208. //设置总记录数
    209. this.totalCount = resp.data.totalCount;
    210. })
    211. },
    212. tableRowClassName({row, rowIndex}) {
    213. if (rowIndex % 4 === 1) {
    214. return 'warning-row';
    215. } else if (rowIndex % 4 === 3) {
    216. return 'success-row';
    217. }
    218. return '';
    219. },
    220. // 复选框选中后执行的方法
    221. handleSelectionChange(val) {
    222. this.multipleSelection = val;
    223. console.log(this.multipleSelection)
    224. },
    225. // 提交按钮时查询方法
    226. onSubmit() {
    227. // console.log(this.brand);
    228. this.selectAll();
    229. },
    230. //添加或修改数据执行方法
    231. addOrUpdateBrand() {
    232. var _this = this;
    233. //发送ajax请求,添加数据
    234. axios({
    235. method: "post",
    236. url: "http://localhost:8080/moming/brand/addOrUpdate",
    237. data: _this.brand
    238. }).then(function (r) {
    239. //添加或修改成功
    240. //提示信息
    241. _this.$message({
    242. message: r.data,
    243. type: 'success'
    244. });
    245. //刷新页面,重新查询数据
    246. _this.selectAll();
    247. //关闭窗口
    248. _this.dialogVisible = false;
    249. })
    250. },
    251. //批量删除方法
    252. deleteByIds() {
    253. //弹出确认提示框
    254. this.$confirm('此操作将删除该数据, 是否继续?', '提示', {
    255. confirmButtonText: '确定',
    256. cancelButtonText: '取消',
    257. type: 'warning'
    258. }).then(() => {
    259. //1.创建id数组,从this.multipleSelection获取即可
    260. for (let i = 0; i < this.multipleSelection.length; i++) {
    261. let selectionElement = this.multipleSelection[i];
    262. this.selectedIds[i] = selectionElement.id;
    263. }
    264. //2.发送AJAX请求
    265. var _this = this;
    266. //发送ajax请求,添加数据
    267. axios({
    268. method: "post",
    269. url: "http://localhost:8080/moming/brand/deleteByIds",
    270. data: _this.selectedIds
    271. }).then(function (r) {
    272. if (r.data == "success") {
    273. //添加成功
    274. //提示信息
    275. _this.$message({
    276. message: '恭喜你,删除成功',
    277. type: 'success'
    278. });
    279. //刷新页面,重新查询数据
    280. _this.selectAll();
    281. }
    282. })
    283. }).catch(() => {
    284. this.$message({
    285. type: 'info',
    286. message: '已取消删除'
    287. });
    288. });
    289. },
    290. //修改按钮回显数据的方法
    291. handleEdit(i, row) {
    292. //打开对话框(可以和添加商品的对话框公用同一个)
    293. //需要给对话框设置一个标题和回显的数据
    294. v.dialogVisible = true;
    295. v.title = '修改商品';
    296. v.brand = row;
    297. },
    298. //单个删除
    299. handleDelete(i, row) {
    300. this.$confirm('此操作将删除' + row.brandName + ', 是否继续?', '提示', {
    301. confirmButtonText: '确定',
    302. cancelButtonText: '取消',
    303. type: 'warning'
    304. }).then(() => {
    305. //点击确定按钮会执行到这里
    306. //发送ajax请求
    307. //2.发送AJAX请求
    308. var _this = this;
    309. //发送ajax请求,添加数据
    310. axios({
    311. method: "post",
    312. url: "http://localhost:8080/moming/brand/deleteById?id=" + row.id,
    313. }).then(function (r) {
    314. if (r.data == "success") {
    315. //删除成功
    316. //提示信息
    317. _this.$message({
    318. message: '恭喜你,删除成功',
    319. type: 'success'
    320. });
    321. //刷新页面,重新查询数据
    322. _this.selectAll();
    323. }
    324. })
    325. }).catch(() => {
    326. this.$message({
    327. type: 'info',
    328. message: '已取消删除'
    329. });
    330. });
    331. },
    332. //分页
    333. handleSizeChange(val) {
    334. // console.log(`每页 ${val} 条`);
    335. //重新设置每页显示的条数
    336. this.pageSize = val;
    337. this.selectAll();
    338. },
    339. handleCurrentChange(val) {
    340. // console.log(`当前页: ${val}`);
    341. //重新设置当前页码
    342. this.currentPage = val;
    343. this.selectAll();
    344. },
    345. //打开添加商品对话框
    346. openDialog(t) {
    347. v.brand = {};
    348. v.title = t;
    349. v.dialogVisible = true;
    350. }
    351. },
    352. })
    353. script>
    354. body>
    355. html>

    🍕总结说明

    💖💖以上就是全部源代码了,可以结合我前几篇有关JavaWeb登录注册案例进行一下整合,在登录注册案例中,有个success.jsp文件,可用brand.html将其替换,然后在SuccessServlet中将转发到success.jsp改为brand.html

    (request.getRequestDispatcher("/brand.html").forward(request,response);)

    这样就可以实现登录成功后跳转到Brand管理系统界面

    具体的登录注册案例连接如下(三篇)

    第一篇,第二篇,第三篇

    代码量比较大,如果想要进一步了解的我找到了一篇大佬详解的步骤可去参考

    博主:鲁棒最小二乘支持向量机 --- 黑马程序员最新版JavaWeb综合案例(前后端完整版)

  • 相关阅读:
    Pytorch模型转ONNX部署
    TMGM外汇平台官网最全测评(2022年版)
    【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】
    开放式运动耳机排行榜,盘点五款最适合入手的运动耳机
    使用sipParseArgs/sipBuildResult进行python/C++对象的转换
    【注释和反射】类加载的过程
    敬请期待!
    Python 位运算的操作
    【云原生之k8s】kubernetes核心组件
    个人网页制作 个人网页设计作业 HTML CSS个人网页模板 大学生个人介绍网站毕业设计 DW个人主题网页模板下载 个人网页成品代码 个人网页作品下载
  • 原文地址:https://blog.csdn.net/HeyVIrBbox/article/details/126923568