From 5f931e926840d9791ecc30b4cd82225792ad7d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=BF=97=E5=8B=87?= <2711273115@qq.com> Date: Fri, 12 Jan 2024 14:41:16 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈志勇 <2711273115@qq.com> --- ...36\345\210\240\346\224\271\346\237\245.MD" | 207 ++++++++ ...0102 \345\210\235\350\257\206springMvc.md" | 324 ++++++++++++ .../20240104 REST\351\243\216\346\240\274.md" | 468 ++++++++++++++++++ .../20240105 SSM\346\225\264\345\220\210.md" | 455 +++++++++++++++++ ...10\345\256\214\346\225\264\347\211\210.md" | 424 ++++++++++++++++ ...64\347\211\210\344\274\230\345\214\226.md" | 116 +++++ .../20240111 \344\274\230\345\214\2262.md" | 109 ++++ 7 files changed, 2103 insertions(+) create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20231219\345\242\236\345\210\240\346\224\271\346\237\245.MD" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240102 \345\210\235\350\257\206springMvc.md" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240104 REST\351\243\216\346\240\274.md" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240105 SSM\346\225\264\345\220\210.md" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240108 \346\225\264\345\220\210\345\256\214\346\225\264\347\211\210.md" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240109 \345\256\214\346\225\264\347\211\210\344\274\230\345\214\226.md" create mode 100644 "09 \351\231\210\345\277\227\345\213\207/20240111 \344\274\230\345\214\2262.md" diff --git "a/09 \351\231\210\345\277\227\345\213\207/20231219\345\242\236\345\210\240\346\224\271\346\237\245.MD" "b/09 \351\231\210\345\277\227\345\213\207/20231219\345\242\236\345\210\240\346\224\271\346\237\245.MD" new file mode 100644 index 0000000..e45bebc --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20231219\345\242\236\345\210\240\346\224\271\346\237\245.MD" @@ -0,0 +1,207 @@ +# 日志 + +2023年12月29日 + +## 作业 + +### 增删改查 + +```java +package com.pxx.mapper; + +import com.pxx.domain.User; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +public interface UserMapper { + @Select("select * from tb_user") + List selectAll(); + @Select("select * from tb_user where id = #{id}") + List selectById(int id); + @Insert("insert into tb_user (id,username,password,gender,addr) value (#{id},#{username},#{password},#{gender},#{addr})") + public void insert(User user); + @Update("update tb_user set username=#{username},password=#{password},gender=#{gender},addr=#{addr} where id=#{id}" ) + public void update(User user); + @Delete("delete from tb_user where id = #{id}") + public void delete(int id); +} + + + + + + + + + + + +package com.pxx.service.impl; + +import com.pxx.domain.User; +import com.pxx.mapper.UserMapper; +import com.pxx.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +@Service + +public class UserServiceImpl implements UserService { + @Autowired + public UserMapper userMapper; + @Override + public List selectAll() { + return userMapper.selectAll(); + } + + @Override + public List selectById(int id) { + return userMapper.selectById(id); + } + + @Override + public void insert(User user) { + userMapper.insert(user); + } + + @Override + public void update(User user) { + userMapper.update(user); + } + + @Override + public void delete(int id) { + userMapper.delete(id); + } + + +} + + + + + + +package com.pxx.service; + +import com.pxx.domain.User; + +import java.util.List; + +public interface UserService { + List selectAll(); + List selectById(int id); + public void insert(User user); + public void update(User user); + public void delete(int id); +} + + + + + + + + + + + +package com.pxx.test; + +import com.pxx.config.SpringConfig; +import com.pxx.domain.User; +import com.pxx.mapper.UserMapper; +import com.pxx.service.UserService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = SpringConfig.class) +public class UserTest { + @Autowired + public UserMapper userMapper; + + @Autowired + public UserService userService; + + @Test + public void selectAll(){ + List users = userMapper.selectAll(); + System.out.println(users); + List users1 = userService.selectById(2); + System.out.println(users1); + } + @Test + public void selectById(){ + List users = userMapper.selectById(1); + System.out.println(users); + } + @Test + public void insert(){ + User user = new User(7,"闪电","114514","蛆","撤硕"); + userService.insert(user); + System.out.println("添加成功"); + } + @Test + public void update(){ + User user = new User(7,"闪电秀六根","1145141919","妖","朝阳区公园冰湖"); + userService.update(user); + System.out.println("修改成功"); + } + @Test + public void delete(){ + userService.delete(2); + System.out.println("删除成功"); + } +} + +``` + +### Mvc初体验 + +```xml +This XML file does not appear to have any style information associated with it. The document tree is shown below. + +4.0.0 +org.example +springmvc_0 +war +1.0-SNAPSHOT + + +org.springframework +spring-webmvc +5.2.25.RELEASE + + +javax.servlet +javax.servlet-api +3.1.0 +provided + + + + + +org.apache.tomcat.maven +tomcat7-maven-plugin +2.2 + +666 +/ + + + + + +``` \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240102 \345\210\235\350\257\206springMvc.md" "b/09 \351\231\210\345\277\227\345\213\207/20240102 \345\210\235\350\257\206springMvc.md" new file mode 100644 index 0000000..fad4b38 --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240102 \345\210\235\350\257\206springMvc.md" @@ -0,0 +1,324 @@ +# 日志 + +2024年1月2日 + +## 笔记 + +### 入门案例 + +```java +1.使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标 + +javax.servlet +javax.servlet-api +3.1.0 +provided + + +org.springframework +spring-webmvc +5.2.25.RELEASE + + + +2.创建SpringMVC控制器类(等同于Servlet功能) +@Controller +public class UserController { + @RequestMapping("/save") + @ResponseBody + public String save(){ + System.out.println("user save ..."); + return "{'info':'springmvc'}"; + } +} + + +3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean + @Configuration + @ComponentScan("com.mdd.controller") + public class SpringMvcConfig { + } + + +4.初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求,这边直接使用简化开发AbstractAnnotationConfigDispatcherServletInitializer + public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{ + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + protected String[] getServletMappings() { + return new String[]{"/"}; + } + protected Class[] getRootConfigClasses() { + return new Class[]{SpringConfig.class}; + } +} + +``` + +### 注解 + +```java +名称:@Controller +类型:类注解 +位置:SpringMVC控制器类定义上方 +作用:设定SpringMVC的核心控制器bean +范例: +@Controller + public class UserController { +} +//@Component注解的三个衍生注解之一,用于表现层 + + +名称:@RequestMapping +类型:方法注解 类注解 +位置:SpringMVC控制器方法定义上方 +作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀 +范例: +@Controller + @RequestMapping("/user") + public class UserController { + @RequestMapping("/save") + @ResponseBody + public String save(){ + System.out.println("user save ..."); + return "{'module':'user save'}"; + } + } + +相关属性: +value(默认):请求访问路径,或访问路径前缀 +produces : 浏览器传回的数据字符编码处理 + + +名称:@ResponseBody +类型:方法注解 +位置:SpringMVC控制器方法定义上方 +作用:设置当前控制器方法响应内容为当前返回值,无需解析 +范例: +@RequestMapping("/save") + @ResponseBody + public String save(){ + System.out.println("user save ..."); + return "{'info':'springmvc'}"; +} +//@ResponseBody也可如@RequestMapping般当作类注解,表示整个类都为当前控制器方法响应内容为当前返回值 + + + +名称:@RequestParam +类型:形参注解 +位置:SpringMVC控制器方法形参定义前面 +作用:绑定请求参数与处理器方法形参间的关系 +范例: +@RequestMapping("/commonParamDifferentName") + @ResponseBody + public String commonParamDifferentName(@RequestParam("name")String userName , int age){ + System.out.println("普通参数传递 userName ==> "+userName); + System.out.println("普通参数传递 age ==> "+age); + return "{'module':'common param different name'}"; +} +参数: +required:是否为必传参数 +defaultValue:参数默认值 + +``` + +### 请求 + +```java +使用postman + +get请求传参: +普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数 +@RequestMapping("/commonParam") + @ResponseBody + public String commonParam(String name ,int age){ + System.out.println("普通参数传递 name ==> "+name); + System.out.println("普通参数传递 age ==> "+age); + return "{'module':'common param'}"; + + +普通参数:请求参数名与形参变量名不同,使用@RequestParam绑定参数关系 +@RequestMapping("/commonParamDifferentName") + @ResponseBody + public String commonParamDifferentName(@RequestParam("name")String userName , int age){ + System.out.println("普通参数传递 userName ==> "+userName); + System.out.println("普通参数传递 age ==> "+age); + return "{'module':'common param different name'}"; +} + + +POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数 +@RequestMapping("/pojoParam") + @ResponseBody + public String pojoParam(User user){ + System.out.println("pojo参数传递 user ==> "+user); + return "{'module':'pojo param'}"; +} + +若嵌套POJO参数:POJO对象中包含POJO对象,请求参数名与形参对象属性名相同,在postman中按照对象层次结构关系即可接收嵌套POJO属性参数 +例如: + name:xx + price:100 + brand.name:xxx + brand.id:6 + + +数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数 + like:1 + like:2 + like:3 +@RequestMapping("/arrayParam") + @ResponseBody + public String arrayParam(String[] likes){ + System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes)); + return "{'module':'array param'}"; +} + + + +集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系 + like:1 + like:2 + like:3 +@RequestMapping("/listParam") + @ResponseBody + public String listParam(@RequestParam List likes){ + System.out.println("集合参数传递 likes ==> "+ likes); + return "{'module':'list param'}"; +} + + + + + + +post请求参数:在postman改成post,body,x-www-form-urlencoded,与get无异 +普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数 + + + +``` + +### 中文乱码处理 + +```java +在@RequestMapping设置当前控制器方法请求访问路径位置,添加参数produces = "text/html;charset=utf-8" +@Controller +@RequestMapping("save") +@ResponseBody +public class BookController { + @RequestMapping(value = "find",produces = "text/html;charset=utf-8") + public String find(String bookName,Integer price){ + System.out.println("找到"+bookName+"价格"+price); + return "找到"+bookName+"价格"+price; + } +} +``` + + + +## 作业 + +```java +导入坐标 + + 4.0.0 + org.example + untitled + war + 1.0-SNAPSHOT + + + + org.springframework + spring-webmvc + 5.2.25.RELEASE + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + / + 80 + utf-8 + + + + + + + + + + + +spring核心配置 +package com.pxx.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.pxx") +public class SpringConfig { +} + + + + +webmvc配置 +package com.pxx.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class MvcConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[0]; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + + + + +controller类 +package com.pxx.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("save") +@ResponseBody +public class BookController { + @RequestMapping(value = "find",produces = "text/html;charset=utf-8") + public String find(String bookName,Integer price){ + System.out.println("找到"+bookName+"价格"+price); + return "找到"+bookName+"价格"+price; + } +} + +``` \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240104 REST\351\243\216\346\240\274.md" "b/09 \351\231\210\345\277\227\345\213\207/20240104 REST\351\243\216\346\240\274.md" new file mode 100644 index 0000000..7b9ea78 --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240104 REST\351\243\216\346\240\274.md" @@ -0,0 +1,468 @@ +# 日志 + +2024年1月4日 + +## 笔记 + +### 请求参数(传递json数据) + +```java +POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数 +POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数 + + +入门案例 +1.添加json数据转换相关坐标 + + com.fasterxml.jackson.core + jackson-databind + 2.9.0 + + +2.在postman中设置发送json数据 body>raw>json + +3.使用 @EnableWebMvc 开启自动转换json数据的支持 +@Configuration + @ComponentScan("com.mdd.controller") + @EnableWebMvc + public class SpringMvcConfig { + } +//@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换 + +4.设置接收json数据 +@RequestMapping("/listParamForJson") + @ResponseBody + public String listParamForJson(@RequestBody List likes){ + System.out.println("list common(json)参数传递 list ==> "+likes); + return "{'module':'list common for json param'}"; +} + + + +注解: +名称:@EnableWebMvc +类型:配置类注解 +位置:SpringMVC配置类定义上方 +作用:开启SpringMVC多项辅助功能 +范例: +@Configuration + @ComponentScan("com.mdd.controller") + @EnableWebMvc + public class SpringMvcConfig { + } + + +名称:@RequestBody +类型:形参注解 +位置:SpringMVC控制器方法形参定义前面 +作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次 +范例: +@RequestMapping("/listParamForJson") + @ResponseBody + public String listParamForJson(@RequestBody List likes){ + System.out.println("list common(json)参数传递 list ==> "+likes); + return "{'module':'list common for json param'}"; +} + + +``` + +### @RequestBody与@RequestParam区别 + +```java +区别 +@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】 +@RequestBody用于接收json数据【application/json】 +应用 +后期开发中,发送json格式数据为主,@RequestBody应用较广 +如果发送非json格式数据,选用@RequestParam接收请求参数 + +``` + +### 日期类型参数传递 + +```java +日期类型数据基于系统不同格式也不尽相同 +2088-08-18 +2088/08/18 +08/18/2088 +接收形参时,根据不同的日期格式设置不同的接收方式 +@RequestMapping("/dataParam") + @ResponseBody + public String dataParam(Date date, + @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1, + @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")Date date2){ + System.out.println("参数传递 date ==> "+date); + System.out.println("参数传递 date(yyyy-MM-dd) ==> "+date1); + System.out.println("参数传递 date(yyyy/MM/dd HH:mm:ss) ==> "+date2); + return "{'module':'data param'}"; +} + +//http://localhost/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08 + + + +注解 +名称:@DateTimeFormat +类型:形参注解 +位置:SpringMVC控制器方法形参前面 +作用:设定日期时间型数据格式 +范例 + @RequestMapping("/dataParam") + @ResponseBody + public String dataParam(Date date){ + System.out.println("参数传递 date ==> "+date); + return "{'module':'data param'}"; +} +属性:pattern:日期时间格式字符串 + +``` + +### 相应 + +```java +响应json数据(对象转json) +@RequestMapping("/toJsonPOJO") + @ResponseBody + public User toJsonPOJO(){ + User user = new User(); + user.setName("赵云"); + user.setAge(41); + return user; +} + + + + +注解 + 原: +名称:@ResponseBody +类型:方法注解 +位置:SpringMVC控制器方法定义上方 +作用:设置当前控制器方法响应内容为当前返回值,无需解析 + + 实际作为 +名称:@ResponseBody +类型:方法注解 +位置:SpringMVC控制器方法定义上方 +作用:返回值作为响应体 +范例: + @RequestMapping("/save") + @ResponseBody + public String save(){ + System.out.println("save..."); + return "{'info':'springmvc'}"; +} +``` + +### REST风格 + +```java +REST(Representational State Transfer),表现形式状态转换 +传统风格资源描述形式 + http://localhost/user/getById?id=1 + http://localhost/user/saveUser +REST风格描述形式 + http://localhost/user/1 + http://localhost/user +优点: +隐藏资源的访问行为,无法通过地址得知对资源是何种操作 +书写简化 + + + +按照REST风格访问资源时使用行为动作区分对资源进行了何种操作 +http://localhost/users 查询全部用户信息 GET +http://localhost/users/1 查询指定用户信息 GET +http://localhost/users 添加用户信息 POST +http://localhost/users 修改用户信息 PUT +http://localhost/users/1 删除用户信息 DELETE +根据REST风格对资源进行访问称为RESTful + +//上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范 +//描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts + +``` + +### REST入门案例 + +```java +1.设定http请求动作(动词) +@RequestMapping(value = "/users", method = RequestMethod.POST) + @ResponseBody + public String save(@RequestBody User user){ + System.out.println("user save..." + user); + return "{'module':'user save'}"; +} + +@RequestMapping(value = "/users" ,method = RequestMethod.PUT) +@ResponseBody +public String update(@RequestBody User user){ + System.out.println("user update..."+user); + return "{'module':'user update'}"; +} + +2.设定请求参数(路径变量 +@RequestMapping(value = "/users/{id}" ,method = RequestMethod.DELETE) + @ResponseBody + public String delete(@PathVariable Integer id){ + System.out.println("user delete..." + id); + return "{'module':'user delete'}"; +} + + + + +注解 +名称:@RequestMapping +类型:方法注解 +位置:SpringMVC控制器方法定义上方 +作用:设置当前控制器方法请求访问路径 +范例: + @RequestMapping(value = "/users", method = RequestMethod.POST) + @ResponseBody + public String save(@RequestBody User user){ + System.out.println("user save..." + user); + return "{'module':'user save'}"; +} +属性 +value(默认):请求访问路径 +method:http请求动作,标准动作(GET/POST/PUT/DELETE) + + + +名称:@PathVariable +类型:形参注解 +位置:SpringMVC控制器方法形参定义前面 +作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应 +范例: +@RequestMapping(value = "/users/{id}" ,method = RequestMethod.DELETE) + @ResponseBody + public String delete(@PathVariable Integer id){ + System.out.println("user delete..." + id); + return "{'module':'user delete'}"; +} + +``` + +### @RequestParam,@RequestBody,@PathVariable三者区别 + +```java +区别 +@RequestParam用于接收url地址传参或表单传参 +@RequestBody用于接收json数据 +@PathVariable用于接收路径参数,使用{参数名称}描述路径参数 +应用 +后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广 +如果发送非json格式数据,选用@RequestParam接收请求参数 +采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值 + +``` + +### RESR快速开发 + +```java +用@RestController替换@Controller与@ResponseBody,将@RequestMapping(value = "/books",produces = "html/text;charset=utf-8")写在类上方,用@GetMapping等替换为 @RequestMapping(value = "books",method = RequestMethod.GET)等,如有id参数则参数照常写 + + +注解 +名称:@RestController +类型:类注解 +位置:基于SpringMVC的RESTful开发控制器类定义上方 +作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能 +范例: +@RestController + public class BookController { + } + + + +名称:@GetMapping @PostMapping @PutMapping @DeleteMapping +类型:方法注解 +位置:基于SpringMVC的RESTful开发控制器方法定义上方 +作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求 +范例: +@GetMapping("/{id}") + public String getById(@PathVariable Integer id){ + System.out.println("book getById..."+id); + return "{'module':'book getById'}"; +} +属性 +value(默认):请求访问路径 + +``` + + + +## 作业 + +```java +SpringCongif核心配置 +package com.pxx.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@Configuration +@ComponentScan("com.pxx.controller") +@EnableWebMvc +public class SpringConfig { +} + + + + +MvcWebConfig配置 +package com.pxx.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + protected Class[] getRootConfigClasses() { + return new Class[0]; + } + + protected Class[] getServletConfigClasses() { + return new Class[]{SpringConfig.class}; + } + + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + + + +controller +Mvc请求与响应 +package com.pxx.controller; + +import com.pxx.domain.Book; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController + +public class BookController { + @RequestMapping("/bookGet") + public String get(@RequestBody Book book){ + System.out.println(book.toString()); + return "66"; + } + @RequestMapping("/bookPost") + public Book postBook(){ + Book book = new Book(); + book.setId(2); + book.setName("我是闪电"); + return book; + } + +} + + + + + + + +REST开发入门 +package com.pxx.controller; + +import com.pxx.domain.User; +import org.springframework.web.bind.annotation.*; + +@RestController + +public class UserController { + @RequestMapping(value = "books",method = RequestMethod.GET,produces = "html/text;charset=utf-8") + public String find(@RequestBody User user){ + System.out.println("查询成功"); + return user.toString(); + } + + @RequestMapping(value = "books",method = RequestMethod.POST,produces = "html/text;charset=utf-8") + public String insert(){ + User user = new User(); + user.setId(1); + user.setName("闪电秀六根"); + user.setAge(28); + System.out.println("添加成功"); + return user.toString(); + } + + @RequestMapping(value = "books",method = RequestMethod.PUT,produces = "html/text;charset=utf-8") + public String update(){ + User user = new User(); + user.setId(1); + user.setName("秀六根进化"); + user.setAge(25); + System.out.println("修改成功"); + return user.toString(); + } + + @RequestMapping(value = "books/{id}",method = RequestMethod.GET,produces = "html/text;charset=utf-8") + public String findById(@PathVariable Integer id){ + System.out.println("查询成功"); + return "查询"+id; + } + @RequestMapping(value = "books/{id}",method = RequestMethod.DELETE,produces = "html/text;charset=utf-8") + public String delete(@PathVariable Integer id){ + System.out.println("删除成功"); + return "删除"+id; + } +} + + + + + +RESR简化开发 +package com.pxx.controller; + +import com.pxx.domain.User; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping(value = "/books",produces = "html/text;charset=utf-8") +public class UserController { + @GetMapping + public String find(@RequestBody User user){ + System.out.println("查询成功"); + return user.toString(); + } + + @PostMapping + public String insert(){ + User user = new User(); + user.setId(1); + user.setName("闪电秀六根"); + user.setAge(28); + System.out.println("添加成功"); + return user.toString(); + } + + @PutMapping + public String update(){ + User user = new User(); + user.setId(1); + user.setName("秀六根进化"); + user.setAge(25); + System.out.println("修改成功"); + return user.toString(); + } + + @GetMapping("/{id}") + public String findById(@PathVariable Integer id){ + System.out.println("查询成功"); + return "查询"+id; + } + @DeleteMapping("/{id}") + public String delete(@PathVariable Integer id){ + System.out.println("删除成功"); + return "删除"+id; + } +} + +``` \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240105 SSM\346\225\264\345\220\210.md" "b/09 \351\231\210\345\277\227\345\213\207/20240105 SSM\346\225\264\345\220\210.md" new file mode 100644 index 0000000..6ec2be8 --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240105 SSM\346\225\264\345\220\210.md" @@ -0,0 +1,455 @@ +# 日志 + +2024年1月5日 + +## 笔记/作业 + +### 1.打开服务,开启MySQL服务 + +### 2.创建一个22级1班xx的文件夹,将给的素材ssm拖进里面 + +### 3.打开idea,打开22级1班xx地址的ssm,设置配置maven仓库地址,并加载maven配置 + +### 4.将给的webapp素材拖进webapp + +### 5.创建com.mdd包,在里面再创建config配置,domain实体类,controller表现层,service业务层,mapper数据层五个包 + +### 6.在config包里面配置 + +#### 6.1.配置JdbcConfig + +```java +package com.mdd.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class JdbcConfig { + @Bean + public DataSource dataSource(){ + DruidDataSource ds = new DruidDataSource(); + ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); + ds.setUrl("jdbc:mysql:///ssm"); + ds.setUsername("root"); + ds.setPassword("123456"); + return ds; + } +} +``` + +#### 6.2.配置MybatisConfig + +```java +package com.mdd.config; + +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setDataSource(dataSource); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} +``` + +#### 6.3.配置SpringConfig + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@ComponentScan({"com.mdd.mapper", "com.mdd.service"}) +@Import({JdbcConfig.class, MybatisConfig.class}) +public class SpringConfig { +} + +``` + +#### 6.4.配置SpringMvcConfig以及拦截器 + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@ComponentScan("com.mdd.controller") +@EnableWebMvc +//实现WebMvcConfigurer接口,并实现arh方法 +public class SpringMvcConfig implements WebMvcConfigurer { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/css/**").addResourceLocations("/css/"); + registry.addResourceHandler("/js/**").addResourceLocations("/js/"); + registry.addResourceHandler("/lib/**").addResourceLocations("/lib/"); + registry.addResourceHandler("/favicon.ico").addResourceLocations("/favicon.ico"); + registry.addResourceHandler("/index.html").addResourceLocations("/index.html"); + } +} + +``` + +#### 6.5.配置WebConfig + +```java +package com.mdd.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[]{SpringConfig.class}; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + +``` + +### 7.写domain实体类 + +#### 7.1.Book实体类,用来接收与传输book数据的实例 + +```java +package com.mdd.domain; + +public class Book { + private Integer id; + private String bookName; + private String author; + private String publisher; + + @Override + public String toString() { + return "Book{" + + "id=" + id + + ", bookName='" + bookName + '\'' + + ", author='" + author + '\'' + + ", publisher='" + publisher + '\'' + + '}'; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBookName() { + return bookName; + } + + public void setBookName(String bookName) { + this.bookName = bookName; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + public Book(Integer id, String bookName, String author, String publisher) { + this.id = id; + this.bookName = bookName; + this.author = author; + this.publisher = publisher; + } + + public Book() { + } +} + +``` + +#### 7.2.用来作为返回值的类R,返回操作成功或失败的信息 + +```java +package com.mdd.domain; + +import com.sun.javafx.binding.IntegerConstant; + +public class R { + private Integer code; + private String msg; + private Object data; + public static R success(Integer code,Object data){ + R r = new R(); + r.setCode(code); + r.setData(data); + return r; + } + public static R success(Integer code,String msg){ + R r = new R(); + r.setCode(code); + r.setMsg(msg); + return r; + } + public static R failuer(Integer code,String msg){ + R r = new R(); + r.setCode(code); + r.setMsg(msg); + return r; + } + + public R() { + } + + public R(Integer code, String msg, Object data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + @Override + public String toString() { + return "R{" + + "code=" + code + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} + +``` + +### 8.编写controller表面层 + +```java +package com.mdd.controller; + +import com.mdd.domain.Book; +import com.mdd.domain.R; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/books") +public class BookController { + @Autowired + private BookService bookService; + @GetMapping + public R selectAll(){ + List books = bookService.selectAll(); + if(books != null){ + return R.success(200,books); + }else { + return R.failuer(400,"没找到"); + } + } + @PostMapping + public R insert(@RequestBody Book book){ + Integer i = bookService.insert(book); + if(i>0){ + return R.success(200,"添加成功"); + }else { + return R.failuer(400,"添加失败"); + } + } + @PutMapping + public R update(@RequestBody Book book) { + Integer i = bookService.update(book); + if (i > 0) { + return R.success(200, "修改成功"); + } else { + return R.failuer(400, "修改失败"); + } + } + @GetMapping("/{id}") + public R selectById(@PathVariable Integer id){ + Book book = bookService.selectById(id); + if(book != null){ + return R.success(200,book); + }else { + return R.failuer(400,"没找到"); + } + } + @DeleteMapping("/{id}") + public R delete(@PathVariable Integer id){ + Integer i = bookService.delete(id); + if (i > 0) { + return R.success(200, "删除成功"); + } else { + return R.failuer(400, "删除失败"); + } + } + +} + +``` + +### 9.通过表面层调用业务层未编写的方法,直接在服务层BookService接口自动生成代码 + +#### 9.1.BookService接口 + +```java +package com.mdd.service; + +import com.mdd.domain.Book; + +import java.util.List; + +public interface BookService { + + List selectAll(); + + Integer insert(Book book); + + Integer update(Book book); + + Book selectById(Integer id); + + Integer delete(Integer id); +} + +``` + +#### 9.2.在service里创建impl包,并创建BookServiceImpl类实现BookService的方法 + +```java +package com.mdd.service.impl; + +import com.mdd.domain.Book; +import com.mdd.mapper.BookMapper; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BookServiceImpl implements BookService { + @Autowired + private BookMapper bookMapper; + + @Override + public List selectAll() { + return bookMapper.selectAll(); + } + + @Override + public Integer insert(Book book) { + return bookMapper.insert(book); + } + + @Override + public Integer update(Book book) { + return bookMapper.update(book); + } + + @Override + public Book selectById(Integer id) { + return bookMapper.selectById(id); + } + + @Override + public Integer delete(Integer id) { + return bookMapper.delete(id); + } + + +} + +``` + +### 10.通过业务层调用数据层未编写的方法,直接在数据层BookMpppar接口自动生成代码,并编写sql语句 + +```java +package com.mdd.mapper; + +import com.mdd.domain.Book; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +public interface BookMapper { + @Select("select id, book_name as bookName, author, publisher from tb_book;") + List selectAll(); + @Insert("insert into tb_book (book_name, author, publisher) value (#{bookName},#{author},#{publisher});") + Integer insert(Book book); + @Update("update tb_book set book_name = #{bookName},author = #{author},publisher = #{publisher} where id=#{id};") + Integer update(Book book); + @Select("select id, book_name as bookName, author, publisher from tb_book where id=#{id};") + Book selectById(Integer id); + @Delete("delete from tb_book where id=#{id};") + Integer delete(Integer id); +} + +``` + +### 11.右上角编辑配置,选择当前文件,tomcat7:run,运行 \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240108 \346\225\264\345\220\210\345\256\214\346\225\264\347\211\210.md" "b/09 \351\231\210\345\277\227\345\213\207/20240108 \346\225\264\345\220\210\345\256\214\346\225\264\347\211\210.md" new file mode 100644 index 0000000..b95935b --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240108 \346\225\264\345\220\210\345\256\214\346\225\264\347\211\210.md" @@ -0,0 +1,424 @@ +# 日志 + +2024年1月8日 + +## 作业 + +这一版本优化了返回对象R以及返回方式,mapper数据层返回增删改操作的行数,在service业务层中判断是否为大于0返回一个布尔值,在表现层用三元运算符来判断返回R; + +新增code与前端约定的状态码 + +```java +package com.mdd.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class JdbcConfig { + @Bean + public DataSource dataSource(){ + DruidDataSource ds = new DruidDataSource(); + ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); + ds.setUrl("jdbc:mysql:///ssm"); + ds.setUsername("root"); + ds.setPassword("123456"); + return ds; + } +} + + + + + + + +package com.mdd.config; + +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + ssfb.setDataSource(dataSource); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} + + + + + + + + +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@ComponentScan({"com.mdd.mapper", "com.mdd.service"}) +@Import({JdbcConfig.class, MybatisConfig.class}) +public class SpringConfig { +} + + + + + + +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + + +@Configuration +@ComponentScan("com.mdd.controller") +@EnableWebMvc +public class SpringMvcConfig implements WebMvcConfigurer { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/index.html").addResourceLocations("/index.html"); + } +} + + + + + + + +package com.mdd.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[]{SpringConfig.class}; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + + + + + + + + + + +package com.mdd.domain; + +public class Book { + private Integer id; + private String bookName; + private String author; + private String publisher; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBookName() { + return bookName; + } + + public void setBookName(String bookName) { + this.bookName = bookName; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + public Book() { + } + + public Book(Integer id, String bookName, String author, String publisher) { + this.id = id; + this.bookName = bookName; + this.author = author; + this.publisher = publisher; + } +} + + + + + + + + + +package com.mdd.domain; + +public class Code { + public static final Integer GET_OK = 2001; + public static final Integer POST_OK = 3001; + public static final Integer DELETE_OK = 4001; + public static final Integer PUT_OK =5001; + public static final Integer GET_ERROR =2000; + public static final Integer POST_ERROR =3000; + public static final Integer DELETE_ERROR =4000; + public static final Integer PUT_ERROR =5000; + +} + + + + + + + + + + +package com.mdd.domain; + +public class R { + private Integer code; + private Object data; + + public R(Integer code, Object data) { + this.code = code; + this.data = data; + } + + public R() { + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} + + + + + + + + + +package com.mdd.controller; + +import com.mdd.domain.Book; +import com.mdd.domain.R; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/books") +public class BookController { + @Autowired + private BookService bookService; + @GetMapping + public R selectAll() { + List books = bookService.selectAll(); + Integer code = books != null ? 2001 : 2000; + Object data = books != null ? books : "没找到哦"; + return new R(code,data); + } + @PostMapping + public R insert(@RequestBody Book book){ + Boolean flag = bookService.insert(book); + Integer code = flag ? 2001 : 2000; + Object data = flag ? "添加成功" : "杂鱼添加失败了呢"; + return new R(code,data); + } + @PutMapping + public R update(@RequestBody Book book){ + Boolean flag = bookService.update(book); + Integer code = flag ? 2001 : 2000; + Object data = flag ? "修改成功" : "杂鱼修改失败了呢"; + return new R(code,data); + } + @GetMapping("/{id}") + public R selectById(@PathVariable Integer id) { + Book book = bookService.selectById(id); + Integer code = book != null ? 2001 : 2000; + Object data = book != null ? book : "没找到哦"; + return new R(code,data); + } + @DeleteMapping ("/{id}") + public R delete(@PathVariable Integer id){ + Boolean flag = bookService.delete(id); + Integer code = flag ? 2001 : 2000; + Object data = flag ? "修改成功" : "杂鱼修改失败了呢"; + return new R(code,data); + } + +} + + + + + + + + + + +package com.mdd.service.impl; + +import com.mdd.domain.Book; +import com.mdd.mapper.BookMapper; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BookServiceImpl implements BookService { + @Autowired + public BookMapper bookMapper; + @Override + public List selectAll() { + return bookMapper.selectAll(); + } + + @Override + public Boolean insert(Book book) { + return bookMapper.insert(book)>0; + } + + @Override + public Boolean update(Book book) { + return bookMapper.update(book); + } + + @Override + public Book selectById(Integer id) { + return bookMapper.selectById(id); + } + + @Override + public Boolean delete(Integer id) { + return bookMapper.delete(id); + } +} + + + + + + + + + + +package com.mdd.service; + +import com.mdd.domain.Book; + +import java.util.List; + +public interface BookService { + List selectAll(); + + + Boolean insert(Book book); + + Boolean update(Book book); + + Book selectById(Integer id); + + Boolean delete(Integer id); +} + + + + + + + + + + +package com.mdd.mapper; + +import com.mdd.domain.Book; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +public interface BookMapper { + @Select("select id,book_name as bookName,author,publisher from tb_book") + List selectAll(); + @Insert("insert into tb_book (book_name, author, publisher) values (#{bookName},#{author},#{publisher});") + Integer insert(Book book); + + @Update("update tb_book set book_name = #{bookName},author= #{author},publisher = #{publisher} where id = #{id};") + Boolean update(Book book); + @Select("select id,book_name as bookName,author,publisher from tb_book WHERE ID=#{id}") + Book selectById(Integer id); + @Delete("delete from tb_book where id = #{id};") + Boolean delete(Integer id); +} + +``` \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240109 \345\256\214\346\225\264\347\211\210\344\274\230\345\214\226.md" "b/09 \351\231\210\345\277\227\345\213\207/20240109 \345\256\214\346\225\264\347\211\210\344\274\230\345\214\226.md" new file mode 100644 index 0000000..d1eabc4 --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240109 \345\256\214\346\225\264\347\211\210\344\274\230\345\214\226.md" @@ -0,0 +1,116 @@ +# 日志 + +2024年1月9日生日 + +优化code与前端约定的状态码与R返回信息,将R返回信息改成只有Integer类型与Object类型,通过三元运算符返回状态码和Object,Object有Book对象则返回Book对象或集合,没有就返回信息;返回的状态码调用code的公开常量 + +```java +package com.mdd.domain; + +public class Code { + public static final Integer GET_OK = 2001; + public static final Integer POST_OK = 3001; + public static final Integer PUT_OK = 4001; + public static final Integer DELETE_OK = 5001; + public static final Integer GET_ERROR = 2000; + public static final Integer POST_ERROR = 3000; + public static final Integer PUT_ERROR = 4000; + public static final Integer DELETE_ERROR = 5000; +} + + + + + +package com.mdd.domain; + +public class R { + private Integer code; + private Object data; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public R(Integer code, Object data) { + this.code = code; + this.data = data; + } + + public R() { + } +} + + + + + + +package com.mdd.controller; + +import com.mdd.domain.Book; +import com.mdd.domain.Code; +import com.mdd.domain.R; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/books") +public class BookController { + @Autowired + private BookService bookService; + @GetMapping + public R selectAll(){ + List books = bookService.selectAll(); + Integer code = books !=null ? Code.GET_OK : Code.GET_ERROR; + Object data = books !=null ? books : "没找到"; + return new R(code,data); + } + @PostMapping + public R insert(@RequestBody Book book){ + boolean flag = bookService.insert(book); + Integer code = flag ? Code.POST_OK : Code.POST_ERROR; + Object data = flag ? "添加成功" : "添加失败"; + return new R(code,data); + } + @PutMapping + public R update(@RequestBody Book book){ + boolean flag = bookService.update(book); + Integer code = flag ? Code.PUT_OK : Code.PUT_ERROR; + Object data = flag ? "修改成功" : "修改失败"; + return new R(code,data); + } + + @DeleteMapping("/{id}") + public R delete(@PathVariable Integer id){ + boolean flag = bookService.delete(id); + Integer code = flag ? Code.DELETE_OK : Code.DELETE_ERROR; + Object data = flag ? "删除成功" : "删除失败"; + return new R(code,data); + + } + @GetMapping("/{id}") + public R selectById(@PathVariable Integer id){ + Book book = bookService.selectById(id); + Integer code = book !=null ? Code.GET_OK : Code.GET_ERROR; + Object data = book !=null ? book : "没找到"; + return new R(code,data); + } +} + +``` \ No newline at end of file diff --git "a/09 \351\231\210\345\277\227\345\213\207/20240111 \344\274\230\345\214\2262.md" "b/09 \351\231\210\345\277\227\345\213\207/20240111 \344\274\230\345\214\2262.md" new file mode 100644 index 0000000..c6bc870 --- /dev/null +++ "b/09 \351\231\210\345\277\227\345\213\207/20240111 \344\274\230\345\214\2262.md" @@ -0,0 +1,109 @@ +# 日志 + +2024年1月11日 + +将图书管理变成学生管理,修改数据库字段名;修改实体类;修改jsAjax接口,将网址从books改成students,再将接收Ajax获取的data的变量名,改成与students对应的变量名 + +```javascript +// 添加图书 + function addBook(bookName, author, publisher) { + var xhr = new XMLHttpRequest(); + xhr.open('POST', '/students'); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + alert('添加成功!'); + getBooks(); // 添加成功后刷新图书列表 + hideDialog(); // 隐藏对话框 + } else { + alert('添加失败:' + xhr.statusText); + } + } + }; + var data = JSON.stringify({ stuName:bookName, stuClass:author, add:publisher }); + xhr.send(data); + } + + // 更新图书 + function updateBook(bookId, bookName, author, publisher) { + var xhr = new XMLHttpRequest(); + xhr.open('PUT', '/students'); + xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + alert('更新成功!'); + getBooks(); // 更新成功后刷新图书列表 + hideDialog(); // 隐藏对话框 + } else { + alert('更新失败:' + xhr.statusText); + } + } + }; + var data = JSON.stringify({ id: bookId,stuName : bookName, stuClass: author, add: publisher }); + xhr.send(data); + } + + // 删除图书 + bookTable.addEventListener('click', function (event) { + if (event.target.classList.contains('delete-btn')) { + var bookId = event.target.parentNode.parentNode.dataset.id; + if (confirm('确认删除该学生吗?')) { + deleteBook(bookId); + } + } + }); + + function deleteBook(bookId) { + var xhr = new XMLHttpRequest(); + xhr.open('DELETE', '/students/' + bookId); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + alert('删除成功!'); + getBooks(); // 删除成功后刷新图书列表 + } else { + alert('删除失败:' + xhr.statusText); + } + } + }; + xhr.send(); + } + + // 获取所有图书 + function getBooks() { + var xhr = new XMLHttpRequest(); + xhr.open('GET', '/students'); + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + showBooks(JSON.parse(xhr.responseText).data); + console.log(JSON.parse(xhr.responseText).data) + } else { + alert('获取学生列表失败:' + xhr.statusText); + } + } + }; + xhr.send(); + } + + // 显示所有图书 + function showBooks(books) { + var tbody = bookTable.tBodies[0]; + tbody.innerHTML = ''; + books.forEach(function (book) { + var tr = document.createElement('tr'); + tr.dataset.id = book.id; + tr.innerHTML = '' + book.id + '' + + '' + book.stuName + '' + + '' + book.stuClass + '' + + '' + book.add + '' + + ' '; + tbody.appendChild(tr); + }); + } + + // 初始化页面 + getBooks(); +``` \ No newline at end of file -- Gitee