(前后端的数据交互技术项目七:回顾这个学期的所学):梦幻神游入三国-回望自己这个学期的所学SSM框架总结起来四个字:删 查 增 改 简称(CRUP)。
接收到任务:今天的目标是完成单张表的(CRUP)将数据库的内容展示在页面上:首先完成这项任务要用到那些知识的要点呢!
第一部分:回顾一下所学框架的一些概念和基础的定义:学这个的目的是为了日后的更好的工作.
MyBatis框架。作用于对数据访问层的操作 对数据库的数据增删改查 这里包含多张表的增删改查.
Spring框架。这是一个模块 作用在 Mvc三层的各个领域.
SpringMvc框架.是Spring框架的一个模块 作用在控制层上.
Ajax技术。作用在前后端的数据交互上主要运用到的几个重要的参数信息.
Json数据解析。将控制层发送过来的增删改查的数据在Mvc转换成Json格式,然后在Html页面中对数据进行解析.
Html Css JavaScript Jquery 这是前端的入门基础也是java程序员一定要会的操作.
MySql 这是一门课程要想学更好 又要自己更加的深入的去了解信息。
第二部分:分析Mvc三层架构的执行流程代码是如何执行的呢?本项目采用的是注解开发的项目的.
理清思路:才能更好的解决问题.
方案一:如果采用的是普通的Java代码开发.
控制层.作用控制项目的整个运行流程:@1 接收浏览器发过来的消息,将消息发送到Mvc中的三层中层层返回最后回到控制层.
@2 控制层将最后数据库中的增删改查的数据返回到页面中 这里要用到Ajax+Json两课的灵活运用.
业务逻辑层:处理一些业务逻辑的信息 这里有 一个接口 在接口中定义的方法在实现类中去实现接口中没有实现的方法.
数据访问层:处理一些数据库信息 对数据库的信息增删改查:这里有 一个接口 在接口中定义的方法在实现类中去实现接口中没有实现的方法.
方案二:如果采用的是SSM框架的不用注解的方式用配置文件的方式
控制层:作用控制项目的整个运行流程:@1 接收浏览器发过来的消息,将消息发送到Mvc中的三层中层层返回最后回到控制层.
@2 控制层将最后数据库中的增删改查的数据返回到页面中 这里要用到Ajax+Json两课的灵活运用.
业务逻辑层:处理一些业务逻辑的信息 这里有 一个接口 在接口中定义的方法在实现类中去实现接口中没有实现的方法.
数据访问层:处理一些数据库信息 对数据库的信息增删改查:这里有 一个接口 在接口中定义的方法在实现类中去实现接口中没有实现的方法.这里要运用到的是三个框架的配置文件信息.
方案三:如果采用的是SSM框架的用注解的方式开发.
控制层:作用控制项目的整个运行流程:@1 接收浏览器发过来的消息,将消息发送到Mvc中的三层中层层返回最后回到控制层.
@2 控制层将最后数据库中的增删改查的数据返回到页面中 这里要用到Ajax+Json两课的灵活运用.
业务逻辑层.处理一些业务逻辑的信息 这里有 一个接口 在接口中定义的方法在实现类中去实现接口中没有实现的方法.
数据访问层.这里只需要定义接口文件 利用注解的开发对数据 的增伤改查操作 注解一般以@ 开头
第三部分:分析增删改查定义接口的原理:
如果用户要查整张表的信息要做以下分析
1 表中查到的是一条记录 那你又可以这样做 在java中定义了 Map集合 Map<String, Object>
2 如果查到的是两条记录或者是多条记录 外表用到是list集合 里面是MAP集合
3所以多条记录利用的是 list中调用map集合 List<Map<String, Object>> getCarList()
如果用户查询表的一个字段 中有多条记录
1 多条记录利用List集合 一个字段利用的是String存放 2所以使用的是list中调用String List<String>
如果用户要增加一条记录 在这条记录中 包含多个字段 如果用户要修改一条一条记录 包含多个字段 如果用户要删除一条记录 包含多个字段 返回值 为 int类型
如果用户要增加一条记录 在这条记录中 包含多个字段
1首先服务器要接收用户增加数据的字段名 利用 @RequestParam 将每个字段存放起来
2 然后利用map集合的方式将增加的多个字段 封装起来转入到mvc三层流程图中
3 因为控制层将增加的数据封装成了Map集合方式 所以 在mvc三层的所有接口中定义 int 方法名称(Map<String, Object> map)
如果用户查询表的一个字段 中有多条记录
1多条记录利用List集合 一个字段利用的是String存放
2所以使用的是list中调用String List<String> 如果用户要增加一条记录 在这条记录中 包含多个字段 如果用户要修改一条一条记录 包含多个字段 如果用户要删除一条记录 包含多个字段 返回值 为 int类型 如果用户要增加一条记录 在这条记录中 包含多个字段
1首先服务器要接收用户增加数据的字段名 利用 @RequestParam 将每个字段存放起来
2 然后利用map集合的方式将增加的多个字段 封装起来转入到mvc三层流程图中
3 因为控制层将增加的数据封装成了Map集合方式 所以 在mvc三层的所有接口中定义 int 方法名称(Map<String, Object> map)
如果用户要删除一条记录 包含多个字段
int del(String ids); 删除为多条记录 int del(int id); 删除为一条记录 返回值为int类型 更据id删除 所以服务器器要接收到浏览器发过来的id更据主键id删除数据库指定的数据记录在第几条
如果用户查询表的一个字段 中有多条记录
1多条记录利用List集合 一个字段利用的是String存放
2所以使用的是list中调用String List<String> 如果用户要增加一条记录 在这条记录中 包含多个字段 如果用户要修改一条一条记录 包含多个字段 如果用户要删除一条记录 包含多个字段 返回值 为 int类型 如果用户要增加一条记录 在这条记录中 包含多个字段
1首先服务器要接收用户增加数据的字段名 利用 @RequestParam 将每个字段存放起来
2 然后利用map集合的方式将增加的多个字段 封装起来转入到mvc三层流程图中
3 因为控制层将增加的数据封装成了Map集合方式 所以 在mvc三层的所有接口中定义 int 方法名称(Map<String, Object> map)
如果用户要修改一条一条记录 包含多个字段 同理在SSM框架中修改数据
1 首先用户要将你要修改的是哪条记录的参数发到服务器中 然后服务器利用mvc三层原理最终将其转到数据库中
2 我查到的每一条记录 的存放方式是 Map<String, Object>
3 所以 返回的类型为 Map<String, Object> 方法名称(转入的参数) Map<String, Object> getInfoById(int id);
4 将修改信息如何展示在页面上这里需要你的前端基础
5 将浏览器修改后的信息返回到服务器 中到数据库中完成数据的修改
6 将修改的信息利用Map封装起来 所以 返回的类型为 int方法名称(转入的参数) int updateInfo(Map<String, Object> map); 思考你要修改的是一条记录 而一条记录利用的是 Map<String, Object> 存放
返回一条记录的值为 int 类型 所以接口定义下面方案 int updateInfo(Map<String, Object> map);
第四部分:Mvc三层架构增删改查执行流程.
查询功能
在查询的数据库中的表中肯定是多条记录 每个条记录中有多个字段 因此使用Java存放的方式是
在这里我使用的是MVC三层架构的普通方式介绍
因此你要在数据反问层的接口中定义方法
List<Map<String, Object>> getStudentList();}或者是List<Student,student>gestudentList();}
同理在业务逻辑思层中:
List<Map<String, Object>> getStudentList();}或者是List<Student,student>gestudentList();}
那么如何将控制层 业务逻辑层 数据反问层 连接起来呢!
在控制层中: ITeacherService service = new TeacherServiceImp();
在业务逻辑层中
ITeacherDao dao=new TeacherDaoImp();
然后层层返回 到控制层
List<Map<String, Object>> teacherList = service.getTeacherList(); Map<String, Object> map = new HashMap<>(); map.put("list", teacherList); new ObjectMapper().writeValue(response.getWriter(), map);
发到HTML页面进行JSON解析。
JSON解析后会将数据展示在页面。
删除功能
写出SQL语句
delete from emp where id=?
分析SQL语句在Java中利用什么方式存放起来的
在增删改中返回值为int类型值。删除是根据编号删除的因此控制器要将浏览器发来的ID接收 利用是是resquest对象
在控制层调用业务逻辑层的方法利用。
IEmpService service=new EmpServiceImp()
同理在业务逻辑层是实现类中
IEmpDao dao = new EmpDaoImp();
在业务逻辑层接口中定义方法利用int del(int Id)
同理在数据访问层接口中定义方法
int del(int Id) int delete service.delete(ids);if(delete>0){response.sendRedirect("workList.html"); }
利用重定向的方式
增加功能
SQL语句当我点击按钮跳转到一个新的页面用于增加数据的信息。
当用户增加成功要进行页面的查询操作。
insert into emp values(?,?,?,?,?,?)",
返回值为int类型 在没条记录中但对应的属性和值。
在业务逻辑层接口中定义方法 int add(Map<String, Object> map);
同理在数据访问层
int add(Map<String, Object> map);
在控制层中
Map<String, String[]> parameterMap = request.getParameterMap(); int add = service.add(parameterMap); if (add > 0) { //添加成功,跳回主页面 response.sendRedirect("index.html");}
修改功能
首先第一部要获得你要修改那一条数据的id
第二步你要用jQuery的属性选择器将数据显示在页面上
第三步 你要将修改后的页面数据信息发回到服务器 经历MVC 三层架构 将修改后上,信息在数据库中更新
第四步将更新后的数据刷新到页面上查看。
总结遇到修改不用慌
先分清楚流程是什么 利用的技术是 Ajax+JSON解析。当我要修改的的记录编号ID 为1001001 时候
首先浏览器要将ID编号发送给服务器 在控制层中
将浏览器发过来的ID等于1001001接收
利用的是resquest 对象 然后将ID 参数发送到 业务逻辑层 在到数据访问层
为了更好的理解一般是从数据访问层的接口中定义方法
Map<String, Object> getInfoStudentById(int id);
在数据反问层实现类中实现
DBUtil.jt.queryForMap("select * from student where id=?", new Object[]{id});}
这里数据反问层使用的方案是
Ajax+Json+Mvc+JdbcTemplate+Servlect+Html+JavaScript+Jquery+Mysql
同理在业务实现类的接口
Map<String, Object> getInfoStudentById(int id);
在业务逻辑层接口的实现类中实现。
在控制层中调用以下方法
Map<String, Object> infoStudentById = service.getInfoStudentById(Integer.parseInt(id)); //我要获得 年龄 姓名 电话 地址 List<String> age = service.getAge(); List<String> name = service.getName(); List<String> phone = service.getPhone(); List<String> address = service.getAddress();
第二步步分上面的数据利用什么方式封装起来
Map<String, Object> map = new HashMap<>(); map.put("infoStudentById", infoStudentById); map.put("age", age); map.put("name", name); map.put("phone", phone); map.put("address", address); new ObjectMapper().writeValue(response.getWriter(), map);
比如在浏览器中要在input标签中显示性别 年龄如何实现呢!
$("input[name=age]").val(json.infoStudentById.age)//将数据库中的年龄展示在页面中 (json.infoStudentById.sex = "男") { $("input[value='男']").attr("checked", true) } else { $("input[value='女']").attr("checked", true) }
用户单机修改按钮将修改后的数据发送到数据库中去步骤
浏览器中页面完成修改后数据库也要更新
因此根据MVC三层架构思想
控制器要接收到浏览器要修改的页面数据信息
在控制层的第一步
Map<String, String[]> parameterMap = request.getParameterMap(); String id = (String) request.getSession().getAttribute("id");
接下来从数据访问层的接口中定义方法
int updateStudent(Map<String, Object> map);
同理在业务逻辑层中的接口中写下以下方法
int updateStudent(Map<String, Object> map);
最终控制器回执行下面的内容
int student = service.updateStudent(parameterMap, Integer.parseInt(id)); if(student>0){ System.out.println("恭喜用户修改信息已完成"); response.sendRedirect("workList1.html"); }
最后修改页面完成。仔细分析发现也不是那么难吧!🤗
项目代码:
前端代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style type="text/css"> div{ font-size: 23px; font-weight: normal; font-family: 楷体; background-color: lightskyblue; color: red; } </style> <script src="js/jquery-3.6.js"></script> <script type="text/javascript"> $(function () { $.ajax({ url: "list.do", type: "GET", data: "", success: function (json) { parsTale(json); }, error: function () { alert("连接失败") }, dataType: "json" }); }); // 定义方法 function parsTale(jsons) { for (var i = 0; i < jsons.length; i++) { $("table").append("<tr>" + "<td>"+jsons[i].id+"</td>" + "<td>"+jsons[i].bookid +"</td>" + "<td>"+jsons[i].scribe+"</td>" + "<td>"+jsons[i].price+"</td>" + "<td>"+jsons[i].number+"</td>" + "<td>"+jsons[i].redingwriter+"</td>" + "<td>"+jsons[i].dianjinumber+"</td>" + "<td><input type='button' value='删除' onclick='del("+jsons[i].id+")'></td>" + "<td><input type='button' value='增加' onclick='add()'></td>" + // 修改页面忘记转入id "<td><input type='button' value='修改' onclick='update("+jsons[i].id+")'></td>" + "</tr>") } } // 定义方法删除数据 function del(id) { location.href="del.do?id="+id; } // 定义反发增加语句 function add() { confirm("开始增加数据") location.href="add.html"; } // 定义方法修改页面 //转入参数id function update(id) { confirm("开始修改页面的数据") location.href="update1.do?id="+id; } </script> <body> <div align="center"> <!-- id bookid scribe price number redingwriter dianjinumber (3001001, '《人生》', 23, 34, '王晓丽', 345)--> <h1>图书管理系统的首页查询页面</h1> <table> <tr> <th>编号</th> <th>书籍编号</th> <th>书籍名称</th> <th>价格</th> <th>用户浏览量</th> <th>阅读人</th> <th>网上点击量</th> <th>删除</th> <th>增加</th> <th>修改></th> </tr> </table> <h1><a href="index1.html">第二张表的增删改查</a></h1> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ font-size: 23px; font-weight: normal; font-family: 楷体; background-color: darkcyan; color: white; } </style> </head> <body> <div align="center"> <h1>增加数据页面</h1> <form action="add.do" method="post"> <table> <!--(`bookid`, `scribe`, `price`, `number`, `redingwriter`, `dianjinumber`)--> <tr> <td>书籍编号</td> <td><input type="text" placeholder="请输入书籍的编号" name="bookid"></td> </tr> <tr> <td>书籍名称</td> <td><input type="text" placeholder="请输入书籍名称" name="scribe"></td> </tr> <tr> <td>书籍价格</td> <td><input type="number" placeholder="请输入书籍价格" name="price"></td> </tr> <tr> <td>书籍数量</td> <td><input type="number" placeholder="请输入书籍数量" name="number"></td> </tr> <tr> <td>阅读的作者</td> <td><input type="text" placeholder="请输入阅读的作者" name="redingwriter"></td> </tr> <tr> <td>点击量</td> <td><input type="number" placeholder="请输入点击量" name="dianjinumber"></td> </tr> <th colspan="2"><input type="submit" value="增加一条记录"></th> </table> </form> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ font-size: 23px; font-weight: normal; font-family: 楷体; background-color: darkcyan; color: white; } </style> </head> <script src="js/jquery-3.6.js"></script> <script type="text/javascript"> /*获得id修改数据*/ $(function () { $.ajax({ url:"Update2.do", type:"GET", /*要转入的参数*/ data:"", success : function(json){ $("input[name='bookid']").val(json.bookid) $("input[name='scribe']").val(json.scribe) $("input[name='price']").val(json.price) $("input[name='number']").val(json.number) $("input[name='redingwriter']").val(json.redingwriter) $("input[name='dianjinumber']").val(json.dianjinumber) }, error :function () { // alert("修改失败") }, dataType:"json" }); }); </script> <body> <div align="center"> <!--修改页面--> <h1>修改数据页面</h1> <form action="update3.do" method="post"> <table> <!--(`bookid`, `scribe`, `price`, `number`, `redingwriter`, `dianjinumber`)--> <tr> <td>书籍编号</td> <td><input type="text" placeholder="请输入书籍的编号" name="bookid"></td> </tr> <tr> <td>书籍名称</td> <td><input type="text" placeholder="请输入书籍名称" name="scribe"></td> </tr> <tr> <td>书籍价格</td> <td><input type="number" placeholder="请输入书籍价格" name="price"></td> </tr> <tr> <td>书籍数量</td> <td><input type="number" placeholder="请输入书籍数量" name="number"></td> </tr> <tr> <td>阅读的作者</td> <td><input type="text" placeholder="请输入阅读的作者" name="redingwriter"></td> </tr> <tr> <td>点击量</td> <td><input type="number" placeholder="请输入点击量" name="dianjinumber"></td> </tr> <th colspan="2"><input type="submit" value="修改一条记录"></th> </table> </form> </div> </body> </html>
package Com.BookSystem.Controller; import Com.BookSystem.Service.IBookSystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 控制层 */ @Controller public class ControllerBookSystem { @Autowired IBookSystemService service; // 定义方法查询书籍 @RequestMapping("list.do") @ResponseBody public Object ListS() { List<Map<String, Object>> list = service.getListS(); return list; } // 定义方法删除数据 @RequestMapping("del.do") public String del(@RequestParam int id) { int i = service.del(id); return "index.html"; } // 定义方法增加数据 /*增加的页面不用 @ResponseBody*/ @RequestMapping("add.do") public String add(@RequestParam int bookid, @RequestParam String scribe, @RequestParam int price, @RequestParam int number, @RequestParam String redingwriter, @RequestParam int dianjinumber) { System.out.println("开始增加数据信息"); // <!--(`bookid`, `scribe`, `price`, `number`, `redingwriter`, `dianjinumber`)--> Map<String, Object> map = new HashMap<>(); map.put("bookid", bookid); map.put("scribe", scribe); map.put("price", price); map.put("number", number); map.put("redingwriter", redingwriter); map.put("dianjinumber", dianjinumber); int i = service.add(map); return "index.html"; } // 定义方修改页面 @RequestMapping("update1.do") public String update1(@RequestParam int id, HttpSession session) { session.setAttribute("id", id); return "update.html"; } //定义方法 @ResponseBody @RequestMapping("Update2.do") public Object update2(HttpSession session) { int id = (int) session.getAttribute("id"); Map<String, Object> map = service.update2(id); return map; } @RequestMapping("update3.do") public String update3(@RequestParam int bookid, @RequestParam String scribe, @RequestParam int price, @RequestParam int number, @RequestParam String redingwriter, @RequestParam int dianjinumber, HttpSession session) { // <!--(`bookid`, `scribe`, `price`, `number`, `redingwriter`, `dianjinumber`)--> Map<String, Object> map = new HashMap<>(); int id = (int) session.getAttribute("id"); map.put("bookid", bookid); map.put("scribe", scribe); map.put("price", price); map.put("number", number); map.put("redingwriter", redingwriter); map.put("dianjinumber", dianjinumber); map.put("id", id); int i = service.update3(map); return "index.html"; } //操作第二张表的数据 @RequestMapping("BookList.do") @ResponseBody public Object BookList() { List<Map<String, Object>> BookList = service.getBookList(); return BookList; } //定义方法删除数据记录 @RequestMapping("DelBook.do") public String DelBook(@RequestParam int id) { int i = service.getDeleteBook(id); return "index1.html"; } // 定义方法增加数据记录 // 转入增加的参数<!--INSERT INTO `demossmtest`.`cardidsystem`(`name`, `age`, `dateime`, `carid`, `address`, `natives`) //VALUES ('胡子欣', 21, '2022-06-06 22:26:05', 4567, '南昌', '青山湖区')--> @RequestMapping("CarAdd.do") public String CarAdd(@RequestParam String name, @RequestParam int age, @RequestParam Object datetime, @RequestParam int CarId, @RequestParam String address, @RequestParam String addressCar) { Map<String, Object> map = new HashMap<>(); map.put("name",name ); map.put(" age", age ); map.put("DateTime", datetime); map.put("CarId",CarId ); map.put("address",address ); map.put("addressCar", addressCar); int i=service.addCar(map); return "index1.html"; } // 修改数据的记录页面 @RequestMapping("UpdateCar1.do") public String UpdateCar1(@RequestParam int id,HttpSession session){ session.setAttribute("id",id); return "update1.html"; } // 定义方法 @RequestMapping("UpdateCar2.do") @ResponseBody public Object UpdateCar2(HttpSession session){ int id = (int) session.getAttribute("id"); Map<String, Object> map = service.SelectCar2(id); return map; } //定义方法完成修改 @RequestMapping("UpdateCar3.do") public String UpdateCar3(@RequestParam String name, @RequestParam int age, @RequestParam String datetime, @RequestParam int CarId, @RequestParam String address, @RequestParam String addressCar, HttpSession session) { Map<String, Object> map = new HashMap<>(); map.put("name",name ); map.put(" age", age ); map.put("DateTime", datetime); map.put("CarId",CarId ); map.put("address",address ); map.put("addressCar", addressCar); int id = (int) session.getAttribute("id"); map.put("id",id); int i=service.UpdateCar3(map); return "index1.html"; } }
package Com.BookSystem.Service; import java.util.List; import java.util.Map; /** * 业务逻辑层接口 */ public interface IBookSystemService { List<Map<String, Object>> getListS(); int del(int id); int add(Map<String, Object> map); Map<String, Object> update2(int id); int update3(Map<String, Object> map); List<Map<String, Object>> getBookList(); int getDeleteBook(int id); int addCar(Map<String, Object> map); Map<String, Object> SelectCar2(int id); int UpdateCar3(Map<String, Object> map); }
package Com.BookSystem.Service; import Com.BookSystem.Dao.IBookSystemDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * 业务逻辑层实现类 */ @Service(value = "sService") public class BookSystemServiceImp implements IBookSystemService { @Autowired IBookSystemDao dao; @Override public List<Map<String, Object>> getListS() { return dao.getListS(); } @Override public int del(int id) { return dao.del(id); } @Override public int add(Map<String, Object> map) { return dao.add(map); } @Override public Map<String, Object> update2(int id) { return dao.update2(id); } @Override public int update3(Map<String, Object> map) { return dao.update3(map); } @Override public List<Map<String, Object>> getBookList() { return dao.getBookList(); } @Override public int getDeleteBook(int id) { return dao.deleteBook(id); } @Override public int addCar(Map<String, Object> map) { return dao.addCar(map); } @Override public Map<String, Object> SelectCar2(int id) { return dao.selectCar2(id); } @Override public int UpdateCar3(Map<String, Object> map) { return dao.updateCar3(map); } }
package Com.BookSystem.Dao; import org.apache.ibatis.annotations.*; import java.util.List; import java.util.Map; /** * 数据访问层 */ public interface IBookSystemDao { @Select("select * from booksystem") List<Map<String, Object>> getListS(); @Delete("delete from booksystem where id=#{id} ") int del(@Param("id") int id); @Insert("INSERT INTO `demossmtest`.`booksystem`(`bookid`, `scribe`, `price`, `number`, `redingwriter`, `dianjinumber`) VALUES (#{bookid}, #{scribe}, #{price}, #{number}, #{redingwriter}, #{dianjinumber})") int add(Map<String, Object> map); /*Sql语句写的有问题*/ @Select("SELECT * FROM booksystem WHERE id=#{id}") Map<String, Object> update2(@Param("id") int id); @Update("UPDATE `demossmtest`.`booksystem` SET bookid = #{bookid}, scribe =#{scribe},price = #{price}, number =#{number} ,redingwriter = #{redingwriter}, `dianjinumber` = #{dianjinumber} WHERE id = #{id}") int update3(Map<String, Object> map); // 操作第二张表 @Select("SELECT * FROM cardidsystem") List<Map<String, Object>> getBookList(); @Delete("delete from cardidsystem where id=#{id} ") int deleteBook(@Param("id") int id); @Insert("INSERT INTO `demossmtest`.`cardidsystem`(name, age, dateime, CarId, address, addressCar) VALUES (#{name}, #{ age},#{dateime},#{CarId},#{ address},#{addressCar})") int addCar(Map<String, Object> map); @Select("SELECT * FROM cardidsystem WHERE id=#{id}") Map<String, Object> selectCar2(@Param("id") int id); @Update("UPDATE cardidsystem SET name=#{name}, age=#{age}, dateime=#{dateime}, CarId=#{CarId}, address=#{address}, addressCar=#{addressCar} where id=#{id}") int updateCar3(Map<String, Object> map); }