springMVC入门增删改查理解

清疚 2022-06-09 01:23 342阅读 0赞

springMVC入门增删改查理解

真的好久没有发原创博文了,懒惰啊!

最近忙于对H5页面的理解,工作大都是前端移动端的工作,虽然技能熟练和代码理解深刻了,但对于目前的状态来说,自我提升的时间太少,公司是主要开发java web的项目,所以不得不对java框架的增删改查做到熟练使用,起码不用等到后台java大神给到我接口数据,自己能理解原理,自己去数据库拿到数据,开发起来更方便些。

再来前端工程师掌握一门后台语言也没啥不好的,博主之前自己也是用php进行学习的,只能说面向对象的语言都大同小异吧,以下只是我这个java菜鸟对spring简单使用的理解,大家看看就好,当做学习记录保存。

增删改查的核心原理

一、核心原理

  1. 用于发送请求给服务器
  2. 请求被DispatchServlet拦截到
  3. DispatchServlet通过HandleMapping检查url有没有对应的Controller, 如果有则调用Controller
  4. Controller开始执行业务逻辑
  5. Controller执行完毕后, 如果返回字符串, 则ViewResolver将字符串转化成相应的视图对象;
    如果返回ModelAndView对象, 该对象本身就包含了视图对象信息.
  6. DispatchServlet将视图对象中的数据输出给服务器.
  7. 服务器将数据输出给客户端.

目录结构

首先可以先了解一下框架的基本目录结构(结构有很多种,此处以我的项目做参考)

这里写图片描述

简单操作顺序

这里是在已经配置好的框架上进行学习操作的
简单来说,前台连接数据库的原理。
通过建立实体类器调用对,控制应的service方法,service调用mapper层的接口方法,并且在xml上写好sql语句,通过相关配置完成操作。
这一套流程顺序因人而异,看个人的写法,对于新手的我来说,其实都差不多,仅供自己参考学习记录。
1.建立entity实体类

在已经连接好的数据库上进行操作,此处是对供应商表进行连接操作。
数据表

这里写图片描述

实体类,对应的是数据库的字段内容,补充getter和setter方法

  1. package com.oil.admin.entity;
  2. public class OilSupplier extends Base{
  3. //供油商ID
  4. private String supplierId;
  5. //供油商名称
  6. private String supplierName;
  7. //联系人姓名
  8. private String contactName;
  9. //联系人手机号
  10. private String mobile;
  11. //备注
  12. private String remark;
  13. //创建时间(筛选条件)
  14. private String beginDate;
  15. //更新时间(筛选条件)
  16. private String endDate;
  17. public String getSupplierId() {
  18. return supplierId;
  19. }
  20. public void setSupplierId(String supplierId) {
  21. this.supplierId = supplierId;
  22. }
  23. public String getSupplierName() {
  24. return supplierName;
  25. }
  26. public void setSupplierName(String supplierName) {
  27. this.supplierName = supplierName;
  28. }
  29. public String getContactName() {
  30. return contactName;
  31. }
  32. public void setContactName(String contactName) {
  33. this.contactName = contactName;
  34. }
  35. public String getMobile() {
  36. return mobile;
  37. }
  38. public void setMobile(String mobile) {
  39. this.mobile = mobile;
  40. }
  41. public String getRemark() {
  42. return remark;
  43. }
  44. public void setRemark(String remark) {
  45. this.remark = remark;
  46. }
  47. public String getBeginDate() {
  48. return beginDate;
  49. }
  50. public void setBeginDate(String beginDate) {
  51. this.beginDate = beginDate;
  52. }
  53. public String getEndDate() {
  54. return endDate;
  55. }
  56. public void setEndDate(String endDate) {
  57. this.endDate = endDate;
  58. }
  59. }

2.在service层新增一个interface接口,用来得到列表,定义一些有List返回的抽象方法,抛出异常,标准增删改查

  1. package com.oil.admin.service;
  2. import java.util.List;
  3. import com.oil.admin.entity.OilSupplier;
  4. public interface OilSupplierService{
  5. /**
  6. * 获取油卡供应商列表
  7. * @param oilSupplier
  8. * @return
  9. * @throws exception
  10. */
  11. List<OilSupplier> getOilSupplierList(OilSupplier oilSupplier) throws Exception;
  12. /**
  13. * 根据Id获取供应商
  14. * @param supplierId
  15. * @return
  16. * @throws exception
  17. */
  18. OilSupplier getOilSupplierById(String supplierId) throws Exception;
  19. /**
  20. * 增加供应商
  21. * @param oilSupplier
  22. * @throws exception
  23. */
  24. void addOilSupplier(OilSupplier oilSupplier) throws Exception;
  25. /**
  26. * 删除供应商
  27. * @param oilSupplier
  28. * @throws exception
  29. */
  30. void deleteOilSupplier(String supplierId) throws Exception;
  31. /**
  32. * 编辑供应商
  33. * @param oilSupplier
  34. * @throws exception
  35. */
  36. void updateOilSupplier(OilSupplier oilSupplier) throws Exception;
  37. }

3.在impl接口继承层,新建一个.java class接口关联于以上接口,并自动注入mapper层的map,重写接口的静态方法。这里注意mapper层没写的话,会找不到路径,报错;

  1. package com.oil.admin.service.impl;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import com.oil.admin.entity.OilSupplier;
  6. import com.oil.admin.mapper.OilSupplierMapper;
  7. import com.oil.admin.service.OilSupplierService;
  8. @Service
  9. public class OilSupplierServiceImpl implements OilSupplierService{
  10. @Autowired
  11. private OilSupplierMapper oilSupplierMapper;
  12. /**
  13. * 获取油卡供应商列表
  14. * @param oilSupplier
  15. * @return
  16. * @throws exception
  17. */
  18. @Override
  19. public List<OilSupplier> getOilSupplierList(OilSupplier oilSupplier) throws Exception{
  20. return oilSupplierMapper.getOilSupplierList(oilSupplier);
  21. }
  22. /**
  23. * 根据Id获取供应商
  24. * @param supplierId
  25. * @return
  26. * @throws exception
  27. */
  28. @Override
  29. public OilSupplier getOilSupplierById(String supplierId) throws Exception{
  30. return oilSupplierMapper.getOilSupplierById(supplierId);
  31. }
  32. /**
  33. * 增加供应商
  34. * @param oilSupplier
  35. * @throws exception
  36. */
  37. @Override
  38. public void addOilSupplier(OilSupplier oilSupplier) throws Exception{
  39. oilSupplierMapper.addOilSupplier(oilSupplier);
  40. }
  41. /**
  42. * 删除供应商
  43. * @param oilSupplier
  44. * @throws exception
  45. */
  46. @Override
  47. public void deleteOilSupplier(String supplierId) throws Exception{
  48. oilSupplierMapper.deleteOilSupplier(supplierId);
  49. }
  50. /**
  51. * 编辑供应商
  52. * @param oilSupplier
  53. * @throws exception
  54. */
  55. @Override
  56. public void updateOilSupplier(OilSupplier oilSupplier) throws Exception{
  57. oilSupplierMapper.updateOilSupplier(oilSupplier);
  58. }
  59. }

4.构造mapper层的接口静态方法,可以发现和service的方法类似,只是少了抛出异常throws Excpetion;

  1. package com.oil.admin.mapper;
  2. import java.util.List;
  3. import org.springframework.stereotype.Repository;
  4. import com.oil.admin.entity.OilSupplier;
  5. @Repository
  6. public interface OilSupplierMapper{
  7. /**
  8. * 获取油卡供应商列表
  9. * @param oilSupplier
  10. * @return
  11. * @throws exception
  12. */
  13. List<OilSupplier> getOilSupplierList(OilSupplier oilSupplier);
  14. /**
  15. * 根据Id获取供应商
  16. * @param supplierId
  17. * @return
  18. * @throws exception
  19. */
  20. OilSupplier getOilSupplierById(String supplierId);
  21. /**
  22. * 增加供应商
  23. * @param oilSupplier
  24. * @throws exception
  25. */
  26. void addOilSupplier(OilSupplier oilSupplier);
  27. /**
  28. * 删除供应商
  29. * @param oilSupplier
  30. * @throws exception
  31. */
  32. void deleteOilSupplier(String supplierId);
  33. /**
  34. * 编辑供应商
  35. * @param oilSupplier
  36. * @throws exception
  37. */
  38. void updateOilSupplier(OilSupplier oilSupplier);
  39. }

5.在mapper层的xml文件中,开始写对应的映射和sql语句,完成和数据库交互的操作。

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.oil.admin.mapper.OilSupplierMapper">
  4. <resultMap id="oilSupplierMap" type="com.oil.admin.entity.OilSupplier">
  5. <result column="supplier_name" property="supplierName"/>
  6. <result column="contact_name" property="contactName"/>
  7. <result column="contact_mobile" property="mobile"/>
  8. <result column="remark" property="remark"/>
  9. <result column="created_date" property="createdDate"/>
  10. <result column="updated_date" property="updatedDate"/>
  11. </resultMap>
  12. <!-- 获取供油商列表 -->
  13. <select id="getOilSupplierList" parameterType="com.oil.admin.entity.OilSupplier" resultMap="oilSupplierMap">
  14. select supplier_id,supplier_name,contact_name,contact_mobile,created_date
  15. from oil_supplier where valid_flag = 'Y'
  16. <if test="supplierName != null and supplierName != ''">
  17. and supplier_name like CONCAT('%',#{supplierName},'%')
  18. </if>
  19. <if test="beginDate != null and beginDate != ''">
  20. <![CDATA[
  21. and DATE_FORMAT(created_date,'%Y-%m-%d %H:%i:%s') >= DATE_FORMAT(CONCAT(#{beginDate},' 00:00:00'),'%Y-%m-%d %H:%i:%s')
  22. ]]>
  23. </if>
  24. <if test="endDate != null and endDate != ''">
  25. <![CDATA[
  26. and DATE_FORMAT(created_date,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT(CONCAT(#{endDate},' 23:59:59'),'%Y-%m-%d %H:%i:%s')
  27. ]]>
  28. </if>
  29. order by created_date desc
  30. </select>
  31. <!-- 根据ID获取供油商 -->
  32. <select id="getOilSupplierById" parameterType="string" resultMap="oilSupplierMap">
  33. select supplier_id,supplier_name,contact_name,contact_mobile,remark
  34. from oil_supplier where valid_flag = 'Y' and supplier_id = #{supplierId}
  35. </select>
  36. <!--新增供应商 -->
  37. <insert id="addOilSupplier" parameterType="com.oil.admin.entity.OilSupplier">
  38. insert into oil_supplier (supplier_name, contact_name, contact_mobile, remark, created_date)
  39. values(#{supplierName},#{contactName},#{mobile},#{remark},now())
  40. </insert>
  41. <!-- 编辑供油商 -->
  42. <update id="updateOilSupplier" parameterType="com.oil.admin.entity.OilSupplier" >
  43. update oil_supplier
  44. set supplier_name = #{supplierName},contact_name = #{contactName},contact_mobile = #{mobile},remark = #{remark},updated_date = now()
  45. where valid_flag = 'Y' and supplier_id = #{supplierId}
  46. </update>
  47. <!-- 删除供油商 -->
  48. <update id="deleteOilSupplier" parameterType="String" >
  49. update oil_supplier set valid_flag = 'N' where supplier_id = #{supplierId}
  50. </update>
  51. </mapper>

6.最后我们需要在controller层,完成controller控制器的编写,才能调用出这三层的方法数据。
将Service@Autowired进入控制器,通过注入service进行交集

  1. package com.oil.admin.controller;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import sun.reflect.generics.tree.Tree;
  9. import com.oil.admin.component.Response;
  10. import com.oil.admin.entity.OilSupplier;
  11. import com.oil.admin.service.OilSupplierService;
  12. @Controller
  13. @RequestMapping("/oilCard")
  14. public class OilSupplierController extends CommonController{
  15. @Autowired
  16. private OilSupplierService oilSupplierService;
  17. /**
  18. * 供应商列表页面
  19. * @return
  20. */
  21. @RequestMapping("/supplierListPage")
  22. public String oilSupplierPage(){
  23. return "/supplier/oilSupplierList";
  24. }
  25. /**
  26. * 供应商列表数据
  27. * @param oilSupplier
  28. * @return
  29. */
  30. @ResponseBody
  31. @RequestMapping("/supplierList")
  32. public Response getSupplierList(OilSupplier oilSupplier){
  33. List<OilSupplier> list;
  34. try{
  35. list = oilSupplierService.getOilSupplierList(oilSupplier);
  36. }catch(Exception e){
  37. logger.error("获取供油商列表出错!",e);
  38. return Response.fail();
  39. }
  40. return Response.success(list);
  41. }
  42. /**
  43. * 删除选中供应商
  44. * @param supplierId
  45. * @return
  46. */
  47. @ResponseBody
  48. @RequestMapping("/deleteOilSupplier")
  49. public Response deleteOilSupplier(String supplierId){
  50. try {
  51. oilSupplierService.deleteOilSupplier(supplierId);
  52. } catch (Exception e) {
  53. logger.error("删除供应商出错!",e);
  54. return Response.fail();
  55. }
  56. return Response.success();
  57. }
  58. /**
  59. * 供应商编辑页面
  60. * @return
  61. */
  62. @RequestMapping("/updateSupplierPage")
  63. public String updateSupplierPage(Model model,String supplierId){
  64. try {
  65. OilSupplier osEdit = oilSupplierService.getOilSupplierById(supplierId);
  66. model.addAttribute("oilSupplier", osEdit);
  67. } catch (Exception e) {
  68. logger.error("供应商编辑页面加载出错!",e);
  69. }
  70. return "/supplier/updateSupplier";
  71. }
  72. /**
  73. * 编辑供应商
  74. * @param oilSuplier
  75. * @return
  76. */
  77. @ResponseBody
  78. @RequestMapping("/updateOilSupplier")
  79. public Response updateOilSupplier(OilSupplier oilSuplier){
  80. try {
  81. oilSupplierService.updateOilSupplier(oilSuplier);
  82. } catch (Exception e) {
  83. logger.error("编辑供应商出错!",e);
  84. return Response.fail();
  85. }
  86. return Response.success();
  87. }
  88. /**
  89. * 供应商新增页面
  90. * @return
  91. */
  92. @RequestMapping("/addSupplierPage")
  93. public String addSupplierPage(){
  94. return "/supplier/addSupplier";
  95. }
  96. /**
  97. * 新增供应商
  98. * @param oilSuplier
  99. * @return
  100. */
  101. @ResponseBody
  102. @RequestMapping("/addOilSupplier")
  103. public Response addOilSupplier(OilSupplier oilSuplier){
  104. try {
  105. oilSupplierService.addOilSupplier(oilSuplier);
  106. } catch (Exception e) {
  107. logger.error("新增供应商出错!",e);
  108. return Response.fail();
  109. }
  110. return Response.success();
  111. }
  112. }

这里使用的ajax返回前端的数据遍历操作,使用EL表达式遍历也是可以的,结合项目需要。
最后无错误的话,输入地址localhost/项目名/映射/映射地址
可以显示页面。

完成以上的操作,其实花了很多时间去理解,许多代码也是尽量手动敲的,尽量不去看同事写的,磕磕碰碰,总算完成了数据的展示,其实我想框架的搭建和缓存等其他业务,才是比较难的,对于偏爱前端的我来说,理解java的使用,和相关javase基础,可能比较适合吧。。。
所以此博文仅供大家参考学习~~~~太浅显了

发表评论

表情:
评论列表 (有 0 条评论,342人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SQLite 入门教程增删

    一、插入数据 INSERT INTO 表(列...) VALUES(值...) 根据前面几篇的内容,我们可以很轻送的创建一个数据表,并向其中插入一些数据,不多说,看例子:

    相关 springMVC入门增删理解

    springMVC入门增删改查理解 真的好久没有发原创博文了,懒惰啊! 最近忙于对H5页面的理解,工作大都是前端移动端的工作,虽然技能熟练和代码理解深刻了,但对于目