基于JdbcTemplate 的动态数据,增删改查功能实现(1)

本文介绍了使用Spring框架下的DbDatabaseService类,展示了如何执行SQL查询、插入、更新操作,以及Kafka在大型分布式系统中的作用。内容涵盖了数据库操作和高级开发资源的学习资源包,包括面试真题解析和源码分析。
摘要由CSDN通过智能技术生成

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.*;

@Service

public class DbDatabaseService {

@Resource

private JdbcTemplate jdbcTemplate;

public List queryColumns(Long id) {

return queryColumns(AppConst.TABLE_PREFIX+ id);

}

public List<Map<String, Object>> queryClazz(Long id, Map<String, Object> params) {

return list(AppConst.TABLE_PREFIX+ id, null, params);

}

public List<Map<String, Object>> queryClazz(Long id, Set columns, Map<String, Object> params) {

return list(AppConst.TABLE_PREFIX+ id, columns, params);

}

public Integer count(Long id, Map<String, Object> params) {

return count(AppConst.TABLE_PREFIX+ id, params);

}

public Boolean insert(Long id, Map<String, Object> map) {

int flag = insert(AppConst.TABLE_PREFIX+ id, map);

return flag > 0;

}

public Boolean insertBatch(Long id,List<Map<String,Object>> list){

Boolean boo=true;

int[] flags=insertBatch(AppConst.TABLE_PREFIX+id,list);

for (int i = 0; i < flags.length; i++) {

int flag = flags[i];

if(flag<1){

boo=false;

}

}

return boo;

}

public Boolean update(Long id,Map<String,Object> map){

int flag=update(AppConst.TABLE_PREFIX+id,map);

if(flag>0){

return true;

}

return false;

}

private List queryColumns(String tableName){

StringBuffer sb = new StringBuffer();

sb.append(“SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE table_schema=‘public’ AND TABLE_NAME='”+tableName+"’ ");

return jdbcTemplate.queryForList(sb.toString(),String.class);

}

public Integer count(String tableName,Map<String,Object> params){

StringBuffer sb = new StringBuffer();

sb.append(“SELECT COUNT(*) FROM “public”.”“+tableName+”" ");

filterMap(tableName,params);

sb.append(getParamsSql(params));

return jdbcTemplate.queryForObject(sb.toString(), Integer.class);

}

public List<Map<String, Object>> list(String tableName,Map<String, Object> params) {

return list(tableName,null,params);

}

public List<Map<String, Object>> list(String tableName, Set columns, Map<String, Object> params) {

StringBuffer sb = new StringBuffer();

if (CollectionUtils.isNotEmpty(columns)) {

String columnSql = StringUtils.join(columns, “,”);

sb.append(“SELECT " + columnSql + " FROM “public”.”" + tableName + “” ");

} else {

sb.append(“SELECT * FROM “public”.”" + tableName + “” ");

}

filterMap(tableName, params);

sb.append(getParamsSql(params));

return jdbcTemplate.queryForList(sb.toString());

}

private String getParamsSql(Map<String,Object> params){

if(params==null||params.size()==0){

return “”;

}

StringBuffer bf = new StringBuffer();

if(params!=null){

bf.append(" WHERE ");

params.forEach((k,v)->{

if(v instanceof String){

v=((String) v).replace(“<”,“<”);

v=((String) v).replace(“>”,“>”);

}

bf.append(k+v+" AND ");

});

int index=bf.lastIndexOf(“AND”);

if(index!=-1){

bf.delete(index,index+3);

}

bf.append(bf);

Object sortObj=params.get(“sortField”);

Object orderObj=params.get(“order”);

if(sortObj!=null && orderObj!=null){

String sortField= (String)sortObj;

if(StringUtil.isNotBlank(sortField)){

bf.append(" order by "+sortField);

}

Boolean order= (Boolean)orderObj;

if(order){

bf.append(" asc");

}else {

bf.append(" desc");

}

}

}

return bf.toString();

}

public int insert(String tableName, Map<String,Object> map){

return jdbcTemplate.update(insertSql(tableName,map),map.values().toArray());

}

private Map<String,Object> filterMap(String tableName, Map<String,Object> map){

List columns= queryColumns(tableName);

if(map!=null && map.size()!=0){

Set keys=map.keySet();

for (String key : keys) {

if(!columns.contains(key)){

map.remove(key);

}

}

}

return map;

}

private String insertSql(String tableName, Map<String,Object> map){

StringBuffer sb = new StringBuffer();

filterMap(tableName,map);

sb.append(“INSERT INTO “public”.”“+tableName+”" (");

map.forEach((k,v)->{ sb.append(k+“,”);});

sb.append(“) VALUES (”);

map.forEach((k,v)->{

sb.append(“?,”);

});

sb.append(“); \n”);

return sb.toString().replace(“,)”,“)”);

}

public int[] insertBatch(String tableName, List<Map<String,Object>> list){

List<Object[]> batchArgs=new ArrayList<Object[]>();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
om: 33%;" />

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

[外链图片转存中…(img-1S29uQBx-1713608654055)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

好的,下面是一个基于Spring框架的增删改查教程。 1. 配置数据库连接 首先需要在Spring配置文件中配置数据库连接信息,例如以下示例: ``` <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> ``` 2. 创建实体类 创建一个Java Bean作为数据库表的映射,例如以下示例: ``` public class Student { private int id; private String name; private int age; private String gender; // 省略getter和setter方法 } ``` 3. DAO层 创建一个DAO(Data Access Object)接口,用于定义数据访问的方法,例如以下示例: ``` public interface StudentDAO { public void addStudent(Student student); public void updateStudent(Student student); public void deleteStudent(int id); public Student getStudentById(int id); public List<Student> getAllStudents(); } ``` 4. DAO实现类 创建一个DAO实现类,实现DAO接口中定义的方法,例如以下示例: ``` @Repository public class StudentDAOImpl implements StudentDAO { @Autowired private JdbcTemplate jdbcTemplate; public void addStudent(Student student) { String sql = "INSERT INTO student(name, age, gender) VALUES (?, ?, ?)"; jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getGender()); } public void updateStudent(Student student) { String sql = "UPDATE student SET name=?, age=?, gender=? WHERE id=?"; jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getGender(), student.getId()); } public void deleteStudent(int id) { String sql = "DELETE FROM student WHERE id=?"; jdbcTemplate.update(sql, id); } public Student getStudentById(int id) { String sql = "SELECT * FROM student WHERE id=?"; return jdbcTemplate.queryForObject(sql, new Object[]{id}, new RowMapper<Student>() { public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setGender(rs.getString("gender")); return student; } }); } public List<Student> getAllStudents() { String sql = "SELECT * FROM student"; return jdbcTemplate.query(sql, new RowMapper<Student>() { public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); student.setGender(rs.getString("gender")); return student; } }); } } ``` 5. Service层 创建一个Service层,用于定义业务逻辑,例如以下示例: ``` @Service public class StudentService { @Autowired private StudentDAO studentDAO; public void addStudent(Student student) { studentDAO.addStudent(student); } public void updateStudent(Student student) { studentDAO.updateStudent(student); } public void deleteStudent(int id) { studentDAO.deleteStudent(id); } public Student getStudentById(int id) { return studentDAO.getStudentById(id); } public List<Student> getAllStudents() { return studentDAO.getAllStudents(); } } ``` 6. 控制器 创建一个控制器,用于处理HTTP请求和响应,例如以下示例: ``` @Controller public class StudentController { @Autowired private StudentService studentService; @RequestMapping(value = "/addStudent", method = RequestMethod.POST) public String addStudent(@ModelAttribute("student") Student student, Model model) { studentService.addStudent(student); model.addAttribute("message", "添加成功"); return "result"; } @RequestMapping(value = "/updateStudent", method = RequestMethod.POST) public String updateStudent(@ModelAttribute("student") Student student, Model model) { studentService.updateStudent(student); model.addAttribute("message", "更新成功"); return "result"; } @RequestMapping(value = "/deleteStudent/{id}", method = RequestMethod.GET) public String deleteStudent(@PathVariable("id") int id, Model model) { studentService.deleteStudent(id); model.addAttribute("message", "删除成功"); return "result"; } @RequestMapping(value = "/getStudent/{id}", method = RequestMethod.GET) public String getStudent(@PathVariable("id") int id, Model model) { Student student = studentService.getStudentById(id); model.addAttribute("student", student); return "student"; } @RequestMapping(value = "/getAllStudents", method = RequestMethod.GET) public String getAllStudents(Model model) { List<Student> students = studentService.getAllStudents(); model.addAttribute("students", students); return "students"; } } ``` 7. 视图 创建视图,用于展示数据和接收用户输入,例如以下示例: student.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>学生信息</title> </head> <body> <h1>学生信息</h1> <p>姓名:${student.name}</p> <p>年龄:${student.age}</p> <p>性别:${student.gender}</p> </body> </html> ``` students.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>学生列表</title> </head> <body> <h1>学生列表</h1> <table> <thead> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach var="student" items="${students}"> <tr> <td>${student.id}</td> <td>${student.name}</td> <td>${student.age}</td> <td>${student.gender}</td> <td><a href="/deleteStudent/${student.id}">删除</a></td> </tr> </c:forEach> </tbody> </table> </body> </html> ``` result.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>操作结果</title> </head> <body> <h1>${message}</h1> <a href="/getAllStudents">返回列表</a> </body> </html> ``` 以上就是一个简单的基于Spring框架的增删改查教程。希望这份教程能够帮助你入门Spring数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值