https://www.cnblogs.com/qianjinyan/p/10065160.html 

在我上一篇随笔中介绍了关于要做的系统的数据结构,连接如上

今天实现连接mssql server,查询出所有buglist的效果,CRUD

实现方法极其简单,如下图

 Bug类对象中列出字段

package com.jasmine.demo.bean;

public class Bug {

    private long id;
private String pname;
private String crname;
private String crnum;
private String tasknum;
private String oname;
private String description;
private String rca;
private String solution;
private String developer;
private String tester;
private String creationdt;
private String updatedt; public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public String getCrname() {
return crname;
} public void setCrname(String crname) {
this.crname = crname;
} public String getCrnum() {
return crnum;
} public void setCrnum(String crnum) {
this.crnum = crnum;
} public String getTasknum() {
return tasknum;
} public void setTasknum(String tasknum) {
this.tasknum = tasknum;
} public String getOname() {
return oname;
} public void setOname(String oname) {
this.oname = oname;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public String getRca() {
return rca;
} public void setRca(String rca) {
this.rca = rca;
} public String getSolution() {
return solution;
} public void setSolution(String solution) {
this.solution = solution;
} public String getDeveloper() {
return developer;
} public void setDeveloper(String developer) {
this.developer = developer;
} public String getTester() {
return tester;
} public void setTester(String tester) {
this.tester = tester;
} public String getCreationdt() {
return creationdt;
} public void setCreationdt(String creationdt) {
this.creationdt = creationdt;
} public String getUpdatedt() {
return updatedt;
} public void setUpdatedt(String updatedt) {
this.updatedt = updatedt;
} @Override
public String toString() {
return "Bug{" +
"id=" + id +
", pname='" + pname + '\'' +
", crname='" + crname + '\'' +
", crnum='" + crnum + '\'' +
", tasknum='" + tasknum + '\'' +
", oname='" + oname + '\'' +
", description='" + description + '\'' +
", rca='" + rca + '\'' +
", solution='" + solution + '\'' +
", developer='" + developer + '\'' +
", tester='" + tester + '\'' +
", creationdt='" + creationdt + '\'' +
", updatedt='" + updatedt + '\'' +
'}';
} public Bug() {
super();
} public Bug(long id, String pname, String crname, String crnum, String tasknum, String oname, String description, String rca, String solution, String developer, String tester, String creationdt, String updatedt) {
this.id = id;
this.pname = pname;
this.crname = crname;
this.crnum = crnum;
this.tasknum = tasknum;
this.oname = oname;
this.description = description;
this.rca = rca;
this.solution = solution;
this.developer = developer;
this.tester = tester;
this.creationdt = creationdt;
this.updatedt = updatedt;
}
}

 

BugService 接口中定义了增删查改等方法
具体实现是在对应的impl中
package com.jasmine.demo.service;

import com.jasmine.demo.bean.Bug;

import java.util.List;

public interface BugService {

    List<Bug> findAll();

    Bug findById(int id);

    int create(String pname,String crname,String crnum, String tasknum, String oname, String description, String rca, String solution, String developer, String tester);

    int update(long id, String crnum, String tasknum, String oname, String description, String rca, String solution, String developer, String tester);

    int deleteByID(int id);

}

  

 

package com.jasmine.demo.service.impl;

import com.jasmine.demo.bean.Bug;
import com.jasmine.demo.jdbc.BugRowMapper;
import com.jasmine.demo.service.BugService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class BugServiceImpl implements BugService { @Autowired
private JdbcTemplate jdbcTemplate; @Override
public List<Bug> findAll() { String sql = "SELECT BUG_ID,PROJECT_NAME,CR_NAME,BUG_CR_NUM,BUG_TASK_NUM,OBJECT_NAME,BUG_DESCRIPTION\n" +
",BUG_RCA,BUG_SOLUTION,B.EMPLOY_NAME DEVELOPER,A.EMPLOY_NAME TESTER,QA_CREATIONDT,QA_UPDATEDT,BUG_DELETED_FLAG\n" +
"FROM QA_BUGLIST\n" +
"JOIN QA_PROJECT ON BUG_PROJECT_ID = PROJECT_ID\n" +
"JOIN QA_CRTYPE ON CR_ID = BUG_CR_TYPE_ID\n" +
"JOIN QA_RTYPE ON OBJECT_ID = QA_TYPE_ID\n" +
"JOIN QA_EMPLOY A ON A.[EMPLOY_ID] = QA_TESTER_ID AND A.[EMPLOY_GROUP] = 1 ---表示测试\n" +
"JOIN QA_EMPLOY B ON B.[EMPLOY_ID] = QA_ASSIGNEE_ID AND B.[EMPLOY_GROUP] = 2 ---表示开发人员\n" +
"WHERE BUG_DELETED_FLAG =0 order by 1 desc";
List<Bug> bugs = jdbcTemplate.query(sql,new BugRowMapper() );
return bugs; } @Override
public Bug findById(int id) {
String sql = "SELECT BUG_ID,PROJECT_NAME,CR_NAME,isnull(BUG_CR_NUM,'') as BUG_CR_NUM,isnull(BUG_TASK_NUM,'') as BUG_TASK_NUM,OBJECT_NAME,isnull(BUG_DESCRIPTION,'') as BUG_DESCRIPTION\n" +
",isnull(BUG_RCA,'') as BUG_RCA,isnull(BUG_SOLUTION,'') as BUG_SOLUTION,B.EMPLOY_NAME DEVELOPER,A.EMPLOY_NAME TESTER,QA_CREATIONDT,QA_UPDATEDT,BUG_DELETED_FLAG\n" +
"FROM QA_BUGLIST\n" +
"JOIN QA_PROJECT ON BUG_PROJECT_ID = PROJECT_ID\n" +
"JOIN QA_CRTYPE ON CR_ID = BUG_CR_TYPE_ID\n" +
"JOIN QA_RTYPE ON OBJECT_ID = QA_TYPE_ID\n" +
"JOIN QA_EMPLOY A ON A.[EMPLOY_ID] = QA_TESTER_ID AND A.[EMPLOY_GROUP] = 1 ---表示测试\n" +
"JOIN QA_EMPLOY B ON B.[EMPLOY_ID] = QA_ASSIGNEE_ID AND B.[EMPLOY_GROUP] = 2 ---表示开发人员\n" +
"WHERE BUG_DELETED_FLAG =0 and BUG_ID = ?";
Bug bug = jdbcTemplate.queryForObject(sql,new BugRowMapper(),id);
return bug;
} @Override
public int create(String pname,String crname,String crnum, String tasknum, String oname, String description, String rca, String solution, String developer, String tester) {
String sql ="INSERT QA_BUGLIST(BUG_PROJECT_ID,BUG_CR_TYPE_ID,BUG_CR_NUM,BUG_TASK_NUM,QA_TYPE_ID,BUG_DESCRIPTION,BUG_RCA,BUG_SOLUTION,QA_ASSIGNEE_ID,QA_TESTER_ID,QA_CREATIONDT,QA_UPDATEDT)\n" +
"VALUES(?,?,?,?,?,?,?,?,?,?,GETDATE(),GETDATE())";
return jdbcTemplate.update(sql,pname,crname,crnum,tasknum,oname,description,rca,solution,developer,tester);
} @Override
public int update(long id, String crnum, String tasknum, String description, String rca, String solution, String developer, String tester,String oname){
String sql = "update QA_BUGLIST set BUG_CR_NUM =?,BUG_TASK_NUM =?,BUG_DESCRIPTION=?,BUG_RCA=?,BUG_SOLUTION= ?,QA_UPDATEDT =getdate() where BUG_ID = ?";
System.out.println(sql);
return jdbcTemplate.update(sql,crnum,tasknum,description,rca,solution,id);
} @Override
public int deleteByID(int id) {
String sql = "update QA_BUGLIST set BUG_DELETED_FLAG = 1, BUG_DELETED_COMMENT = '逻辑删除' where BUG_ID = ?";
System.out.println(sql);
int count = jdbcTemplate.update(sql,id);
return count;
}
}

DB的配置写在application.xml中

启动类之后,跳转的所有页面,写在controller中,

启动后,打开连接,看到自己的数据

接下来要做的就是让页面好看一点,这样的数据看不清楚

JdbcTemplate

thymeleaf

页面跳转等等,页面比较丑,还没做分页,搜寻条件也没有添加

1. 查看所有bug

2. 查看指定bug的详细信息

点击查看按钮后显示单个bug的信息

3. 删除单列bug信息,点击单个bug信息后面的删除按钮即可删除,删除之前最好有确定按钮用来提示,以免误删

4. 更新,我这边做在查看单个详细列表页面中,如上图,有信息更新按钮,点击后带入原先的参数跳转到更新页面,在新的页面进行更新,然后保存

5. 新增bug页面,在查看所有bug页面有新增按钮,点击进入如下页面,保存进行新增操作

源代码提交在github地址如下:

https://github.com/JasmineQian/TestPlatform

Springboot+JdbcTemplate +thymeleaf 页面 做迷你版的bug系统的更多相关文章

  1. 迷你版jQuery——zepto核心源码分析

    前言 zepto号称迷你版jQuery,并且成为移动端dom操作库的首选 事实上zepto很多时候只是借用了jQuery的名气,保持了与其基本一致的API,其内部实现早已面目全非! 艾伦分析了jQue ...

  2. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  3. Springboot+JPA+Thymeleaf 校园博客完整小网站

    本文所属[知识林]:http://www.zslin.com/web/article/detail/35 此项目是一个比较简易的校园博客.麻雀虽小五脏俱全,虽然是比较简易的但是涉及的知识点还是比较全面 ...

  4. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

    上一篇<[原]无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限>介绍了实现Shiro的基础认证.本篇谈谈实现 ...

  5. 从.Net到Java学习第六篇——SpringBoot+mongodb&Thymeleaf&模型验证

    SpringBoot系列目录 SpringBoot整合mongodb MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.如果你没用过Mong ...

  6. springboot整合Thymeleaf模板引擎

    引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</ ...

  7. Springboot整合thymeleaf模板

    Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...

  8. 【SpringBoot】SpringBoot与Thymeleaf模版(六)

    ---恢复内容开始--- 模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码. Thymeleaf介绍 Thymeleaf是适 ...

  9. SpringBoot 整合 Thymeleaf & 如何使用后台模板快速搭建项目

    如果你和我一样,是一名 Java 道路上的编程男孩,其实我不太建议你花时间学 Thymeleaf,当然他的思想还是值得借鉴的.但是他的本质在我看来就是 Jsp 技术的翻版(Jsp 现在用的真的很少很少 ...

随机推荐

  1. 前端框架VUE----nodejs中npm的使用

    NPM是什么? 简单的说,npm就是JavaScript的包管理工具.类似Java语法中的maven,gradle,python中的pip. 安装 傻瓜式的安装. 第一步:打开https://node ...

  2. 爬虫学习06用selenium爬取空间

    用selenium爬取空间 from selenium import webdriver from lxml import etree import time pro = webdriver.Chro ...

  3. java基础之包装类型

    包装类型引入该类型的原因:      因为基本数据类型不具备对象的特性,不能调用方法,所以有时需要将其转换为包装类. 包装类型有两大类方法:      1.将本类型和其它基本类型进行转换方法.    ...

  4. Docker MySQL5.5镜像

    定制MySQL的镜像有个很大的难题:mysqld启动之前要初始化数据目录,5.5自带有空账号密码需要初始化. Dockerfile FROM centos # 拷贝需要的安装和MySQL初始脚本 CO ...

  5. Golang面向对象_继承

    package main import "fmt" type Person struct { name string //名字 sex byte //性别 age int //年龄 ...

  6. Codeforces 40E Number Table - 组合数学

    题目传送门 传送门I 传送门II 题目大意 给定一个$n\times m$的网格,每个格子上要么填$1$,要么填$-1$,有$k$个位置上的数是已经填好的,其他位置都是空的.问有多少种填法使得任意一行 ...

  7. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(3)

    4. 主从表关系 名称 类型 说明 MasterSource 从表对应于主表的DataSource组件 DetailFields 从表中对应于主表字段的外键字段 MasterFields 主表中关联从 ...

  8. sublime使用技巧总结

    软件右下角可以选择文档语法模式 Ctrl + Shift + P ------------------命令模式sshtml模糊匹配-----语法切换到html模式,同理所得,ss+相应文件名匹配相应模 ...

  9. CF981D Bookshelves

    按位贪心+DP的好题qwq 首先看到题目的要求,统计价值的时候的操作是按位与,就要有按位分别计算的意识 开始没意识到结果想了好久还是看了题解才想到 由于统计价值的方式不是加和,所以可能会出现两个较大的 ...

  10. 关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)

    关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset) 2018-01-22  21:49:17 ...