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. 一款用于对 WiFi 接入点安全进行渗透测试的工具

    越来越多的设备通过无线传输的方式连接到互联网,以及,大范围可用的 WiFi 接入点为攻击者攻击用户提供了很多机会.通过欺骗用户连接到虚假的 WiFi 接入点,攻击者可以完全控制用户的网络连接,这将使得 ...

  2. TensorFlow for distributed

    TensorFlow for distributed 本目录包括了运行时分布式TensorFlow的实现,其底层使用了gRPC 作为进程内通信的支持库. Quick start 首先,需要构建一个Te ...

  3. bind的封装

    1.bind.call.apply三者的区别: 1)bind的返回值是一个函数体,不会被立即调用 2)call.apply会立即调用,第一个参数都是用来改变this的指向,两者的区别是前者传递参数的时 ...

  4. printf("loops %u / %u%c[K\n", loops + 1, opts->loops, 27); printf("%cM", 27);

    serialcheck.c中的一段代码一直弄不明白: do { status = stress_test_uart_once(opts, fd, data, data_len); memset(opt ...

  5. react复习总结(1)--react组件开发基础

    这次是年后第一次发文章,也有很长一段时间没有写文章了.准备继续写.总结是必须的. 最近一直在业余时间学习和复习前端相关知识点,在一个公司呆久了,使用的技术不更新,未来真的没有什么前景,特别是我们这种以 ...

  6. GitHub使用笔记2:github常用操作

    1: 绑定ssh keys 2:github新建仓库 echo "# SpringStack" >> README.md git init git add README ...

  7. 基于ZooKeeper和Thrift构建动态RPC调用

    一.基本功能 实现服务端向ZooKeeper集群注册自己提供的服务,并且把自己的IP地址和服务端口创建到具体的服务目录下.客户端向ZooKeeper集群监听自己关注的RPC服务(例如:sayHello ...

  8. [c/c++] programming之路(7)、数据类型转换、偷钱小程序、进制转换

    一.数据类型转换 #include<stdio.h> //某些场合,必须进行数据类型转换,以匹配调用 void main0(){ printf();//printf不管你是什么类型,解析失 ...

  9. windows安装 php-redis redis 扩展

    1.查看phpinfo(),确定要下载的扩展版本,扩展的下载地址在:https://pecl.php.net/package/redis 上图对应是是以下版本 2.把下载包里的文件放到php的ext文 ...

  10. thinkphp5 中使用 七牛云 上传图片和文件

    原文链接:http://www.thinkphp.cn/code/3279.html 参考:https://blog.csdn.net/rain_web/article/details/7910542 ...