百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

使用Springboot/Thymelef/Layui添加数据的几个步骤和注意事项

bigegpt 2024-08-10 12:13 6 浏览

通过几个示例,进一步总结了Springboot框架的基本应用。下面是添加数据的几个注意事项:

一、实体类的建立

根据数据库的字段名和字段类型建立实体类,可借助Lombok

这里是一个“一对多”的例子

@Data
public class JM_kkpc {
   private Integer id;
   private String pch;
   private String kkyh;
   private String skhm;
   private String skzh;
   private String tjr;
   private String bz;
   private Date create_time;
   private List<JM_kkmx> jm_kkmxes;
}

二、Mapper.xml

定义resultMap,使用inner join联合查询,实现“一对多”的查询语句。

<?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="pers.gl.mapper.bank.JM_kkpcMapper">
   <!--一对多,一个PCH对应多名人员,property对应实体类中对象的名称,column对应sql查询语句查询结果的字段名-->
   <resultMap id="getOneByPchMap" type="pers.gl.model.bank.JM_kkpc">
       <result property="pch" column="pch"></result>
       <result property="kkyh" column="kkyh"></result>
       <result property="skhm" column="skhm"></result>
       <result property="skzh" column="skzh"></result>
       <collection property="jm_kkmxes"
                   ofType="pers.gl.model.bank.JM_kkmx">
           <id column="id" property="id"></id>
           <result column="tjr" property="tjr"></result>
           <result column="create_time" property="create_time"></result>
           <result column="xm" property="xm"></result>
           <result column="sfzh" property="sfzh"></result>
           <result column="yhzh" property="yhzh"></result>
           <result column="ykkje" property="ykkje"></result>
           <result column="bz" property="bz"></result>
           <result column="yhzh" property="yhzh"></result>
       </collection>
   </resultMap>
   <!--根据一个PCH,查询到实体类列表-->
   <select id="getOneByPch" parameterType="String"
           resultMap="getOneByPchMap">
      SELECT       a.pch,a.kkyh,a.skhm,a.skzh,b.tjr,b.bz,b.create_time,b.xm,b.sfzh,b.ykkje,b.id,b.yhzh
      FROM jm_kkpc a
      inner join jm_kkmx b
      on a.pch=b.pch
      where a.pch=#{pch}
      order by id desc
   </select>

   <!-- 全部数据查询扣款批次 -->
   <select id="findAll" resultType="pers.gl.model.bank.JM_kkpc">
      select * from jm_kkpc order by id desc
   </select>

   <!-- 插入数据-->
   <insert id="insertData" parameterType="pers.gl.model.bank.JM_kkpc">
      insert into jm_kkpc(pch,kkyh,skhm,skzh,tjr,bz,create_time) values(#{pch},#{kkyh},#{skhm},#{skzh},#{tjr},#{bz},#{create_time})
   </insert>
</mapper>

三、数据接口Interface

public interface JM_kkpcMapper {
   //全部数据
   public List<JM_kkpc> findAll();
   //插入数据
   public int insertData(JM_kkpc jm_kkpc);
   //根据一个PCH,查询到实体类列表
   public List<JM_kkpc> getOneByPch(String pch);
}

四、服务Service

使用ResultData产生Layui接口要求的JSON数据;插入数据时,插入“当前日期时间”和“用户登录信息”,这里的登录使用shiro。

@Service
public class JM_kkpcService {
   @Autowired
   private JM_kkpcMapper jm_kkpcMapper;
   // 列表全部数据,使用分页插件pagehelper
   public ResultData<JM_kkpc> findAllPage(int page, int limit) {
       Page<JM_kkpc> pages = PageHelper.startPage(page, limit);
       // 查询数据
       List<JM_kkpc> lists = jm_kkpcMapper.findAll();
       // 组装
       ResultData<JM_kkpc> listData = new ResultData<>();
       listData.setCode(0);
       listData.setMsg("");
       listData.setCount(pages.getTotal());
       listData.setData(lists);
       // 返回组装后的数据
       return listData;
  }

   // 插入数据
   public int insertData(JM_kkpc jm_kkpc) {
       // 添加创建时间为当前日期时间
       jm_kkpc.setCreate_time(new Date());
       // 添加登录用户的信息
       jm_kkpc.setTjr((String) SecurityUtils.getSubject().getPrincipal());
       return jm_kkpcMapper.insertData(jm_kkpc);
  }

   //根据一个PCH,查询实体类列表
   public List<JM_kkpc> getOneByPch(String pch){
       return jm_kkpcMapper.getOneByPch(pch);
  }
}

五、前端页面

1、列表页面使用的Layui的表格渲染

注意toolbar的两种情况:第1个是表头的按钮;第2个是每行的按钮,分别对应不同的事件。

table.on('toolbar(table-list-filter)', function (obj) {})
//每行的按钮事件
table.on('tool(table-list-filter)', function (obj) {
   var data = obj.data;
   var layEvent = obj.event;
  //触发事件
   switch(obj.event){
   case 'view':
     layer.open({
           type: 2,
           title: "扣款人员明细",
           area: ['80%', '80%'],
           shadeClose: true,
           content:getContextPath()+ '/kkpc/view/'+ data.pch
          });
   break;
   case 'del':
     layer.msg('删除');
   break;
   case 'edit':
     layer.msg('编辑');
   break;
  };
});

2、添加页面为了让表单自动产生yyyyMMdd格式的文本,使用如下JS语句

//格式化日期
function formatDate(date) {
   date = new Date();
   var y = date.getFullYear();
   var m = date.getMonth() + 1;
   m = m < 10 ? '0' + m : m;
   var d = date.getDate();
   d = d < 10 ? ('0' + d) : d;
   return y + m +d;
}
var today=new Date();
var submitTime=formatDate(today);
$("#pch").attr('value',submitTime);

3、在添加前验证表单的必填项,使用如下JS语句(其实另一个页面使用的layui的form.on)。这里面实现了,添加数据后,弹窗提示成功添加,然后关闭当前页面,刷新父页面。

function check() {
//根据ID获取值
var xm = document.getElementById("pch").value;
if(xm ==  null || xm == '') {
alert("不能为空");
return false;
}
       return true;
}

$("#btn-add").click(function() {
   if(check()){
       $.ajax({
           url: getContextPath() +"/kkpc/insertData",
           type: "post",
           data: $("#form-add").serialize(),
           dataType: "json",
           success: function(res) {
                    if (res.success) {
                   alert(res.msg); window.close();parent.location.reload();
              } else {
                  alert(res.msg);
                }
          },
           error:function(xhr){
                alert("发生错误"+xhr.status);
          }
      });
  }
});

4、查看页面使用了Thymeleaf模板引擎,表格的主要代码如下:

注意:序号的生成、删除链接的两种形式对比

<table class="layui-table" th:each="pcmx:${onebypch}">
       <colgroup>
           <col width="150">
           <col width="150">
           <col width="200">
           <col>
       </colgroup>
       <thead>
       <tr>
           <th>序号</th>
           <th >姓名</th>
           <th >身份证号码</th>
           <th >银行账号</th>
           <th >应扣款金额</th>
           <th>操作</th>
       </tr>
       </thead>
       <tbody>
       <tr th:each="rymx:${pcmx.jm_kkmxes}">
           <td th:text="${rymxStat.index+1}">序号</td>
           <td th:text="${rymx.xm}">张三</td>
           <td th:text="${rymx.sfzh}">3703**</td>
           <td th:text="${rymx.yhzh}">9137***</td>
           <td th:text="${rymx.ykkje}">100.00</td>
        <!--<td><a th:href="@{/kkmx/del(id=${rymx.id})}">删除</a></td>-->
           <td><a href="javascript:;" th:onclick="shanchu([[${rymx.id}]]);">删除</a></td>
       </tr>
       </tbody>
</table>

这是删除的JS代码:

//删除代码
function shanchu(id){
if (prompt("请输入密码:") == 'ok') {
$.ajax({
 url:getContextPath() +'/kkmx/del',
 data:{'id':id},
 type:'post',
 success:function(data){
 if(data.success){
          alert(data.msg);
          window.location.reload();
}
 else{
          alert(data.msg);
          window.location.reload();
  }
}
});
};
};

相关推荐

C#.NET Autofac 详解(c# autoit)

简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注...

webapi 全流程(webapi怎么部署)

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一:背景1.讲故事上一篇我们讲到了注解特性,harmony在内部提供了20个HarmonyPatch重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决95%...

C# 使用SemanticKernel调用本地大模型deepseek

一、先使用ollama部署好deepseek大模型。具体部署请看前面的头条使用ollama进行本地化部署deepseek大模型二、创建一个空的控制台dotnetnewconsole//添加依赖...

C#.NET 中间件详解(.net core中间件use和run)

简介中间件(Middleware)是ASP.NETCore的核心组件,用于处理HTTP请求和响应的管道机制。它是基于管道模型的轻量级、模块化设计,允许开发者在请求处理过程中插入自定义逻辑。...

IoC 自动注入:让依赖注册不再重复劳动

在ASP.NETCore中,IoC(控制反转)功能通过依赖注入(DI)实现。ASP.NETCore有一个内置的依赖注入容器,可以自动完成依赖注入。我们可以结合反射、特性或程序集扫描来实现自动...

C#.NET 依赖注入详解(c#依赖注入的三种方式)

简介在C#.NET中,依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,IoC),以降低代码耦合、提高可...

C#从零开始实现一个特性的自动注入功能

在现代软件开发中,依赖注入(DependencyInjection,DI)是实现松耦合、模块化和可测试代码的一个重要实践。C#提供了优秀的DI容器,如ASP.NETCore中自带的Micr...

C#.NET 仓储模式详解(c#仓库货物管理系统)

简介仓储模式(RepositoryPattern)是一种数据访问抽象模式,它在领域模型和数据访问层之间创建了一个隔离层,使得领域模型无需直接与数据访问逻辑交互。仓储模式的核心思想是将数据访问逻辑封装...

C#.NET 泛型详解(c# 泛型 滥用)

简介泛型(Generics)是指在类型或方法定义时使用类型参数,以实现类型安全、可重用和高性能的数据结构与算法为什么需要泛型类型安全防止“装箱/拆箱”带来的性能损耗,并在编译时检测类型错误。可重用同一...

数据分析-相关性分析(相关性 分析)

相关性分析是一种统计方法,用于衡量两个或多个变量之间的关系强度和方向。它通过计算相关系数来量化变量间的线性关系,从而帮助理解变量之间的相互影响。相关性分析常用于数据探索和假设检验,是数据分析和统计建模...

geom_smooth()函数-R语言ggplot2快速入门18

在每节,先运行以下这几行程序。library(ggplot2)library(ggpubr)library(ggtext)#用于个性化图表library(dplyr)#用于数据处理p...

规范申报易错要素解析(规范申报易错要素解析)

为什么要规范申报?规范申报是以满足海关监管、征税、统计等工作为目的,纳税义务人及其代理人依法向海关如实申报的行为,也是海关审接单环节依法监管的重要工作。企业申报的内容须符合《中华人民共和国海关进出口货...

「Eurora」海关编码归类 全球海关编码查询 关务服务

  海关编码是什么?  海关编码即HS编码,为编码协调制度的简称。  其全称为《商品名称及编码协调制度的国际公约》(InternationalConventionforHarmonizedCo...

9月1日起,河南省税务部门对豆制品加工业试行新政7类豆制品均适用投入产出法

全媒体记者杨晓川报道9月2日,记者从税务部门获悉,为减轻纳税人税收负担,完善农产品增值税进项税额抵扣机制,根据相关规定,结合我省实际情况,经广泛调查研究和征求意见,从9月1日起,我省税务部门对豆制品...