目錄
注解總結
將傳送到客戶端的數據轉成json數據
**描述一下Spring MVC的工作流程**
1。屬性賦值
BeanUtils.copyProperties(addUserDTO,user);
添加依賴:
?? ?spring web、mybatis framework、mysql driver
@Controller和@ResponseBody優化
直接改成@RestController,每個方法上,就不需要加@ResponseBody
@RestController是組合注解,就等于:@Controller + @ResponseBody
@RequestMapping作用在類上,(value = "/v1/users/"),表示公共路徑
添加該注解后,所有的接口上,不用再添加@Mapper注解了
防止自動裝配@Autowired UserMapper userMapper;報錯,可以添加value=false,表示不管是否裝配成功,都不會不錯
注解總結
????????@Controller 注解
????????標注一個類;
????????表示該類是一個控制器,負責處理用戶的請求,并將處理結果生成響應返回給客戶端。
????????@RequestMapping 注解
????????請求注解;
????????添加在控制器類或控制器方法上;
????????將HTTP請求映射到控制器中的方法,指定處理請求的路徑
????????控制器類上:為整個控制器指定一個基礎路徑
????????控制器方法上:指定相對于基礎路徑的具體路徑
????????@ResponseBody 注解
????????響應注解;
????????添加在控制器方法上;
????????可以使控制器方法通過返回值的方式將響應返回給客戶端。
????????@RestController 注解
????????作用于類上;
????????作用是將類中的方法返回值直接作為HTTP響應的內容;
????????在控制器類中加入該注解后,無需在每個方法上添加 @ResponseBody 注解;
????????可以讓Spring框架自動將方法的返回值序列化并填充到HTTP響應中,實現Web服務端點的快速???????
????????開發。
????????
????????@MapperScan 注解說明
????????添加在 Spring配置類 上;
????????用于告訴 Spring 掃描 MyBatis Mapper 接口并創建對應的 Mapper 實現;
????????可以指定掃描 MyBatis 映射器接口的包名。
將傳送到客戶端的數據轉成json數據,使用@ResponseBody或@RestController
**描述一下Spring MVC的工作流程**
????????1. 客戶端發送請求至前端控制器DispatcherServlet
????????2. DispatcherServlet收到請求后,調用處理器映射器HandlerMapping
????????3. HandlerMapping根據請求URL找到具體的Controller。
????????4. Controller處理請求,并返回ModelAndView,其中的View只是視圖名,并不指向具體的視圖
????????組件
????????5. DispatcherServlet通過ViewReslover(視圖解析器)確定負責顯示數據的具體View
????????6. DispatcherServlet對View進行渲染視圖(即將Model填充至視圖組件中),并將完整的視圖
????????響應到客戶端
指定post請求方法:
@RequestMapping(value = "insert",method = RequestMethod.POST)
// @ResponseBodypublic String addUser(AddUserDTO addUserDTO){User user=new User();BeanUtils.copyProperties(addUserDTO,user);user.setCreated(new Date());userMapper.insertUser(user);return "添加成功";}
? ? ? ? 或者:@PostMapping(value = "insert"),是一樣的效果,只接受post請求
@PathVariable表示路徑參數
uid
@GetMapping("/v1/users/{uid}")
public void xxx(@PathVarable Integer uid){}
1、MyBatisConfig
//@Configuration :設置自動掃描 標識此類為配置類,工程啟動時,會自動加載此類 //@MapperScan: 1、自動掃描注解,一旦添加該注解,會為指定包路徑及子孫中所有接口添加@Mapper注解 // 2、添加該注解后,所有的接口上,不用再添加@Mapper注解了
package cn.tedu._05mvcboot02.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;//@Configuration :設置自動掃描 標識此類為配置類,工程啟動時,會自動加載此類
//@MapperScan: 1、自動掃描注解,一旦添加該注解,會為指定包路徑及子孫中所有接口添加@Mapper注解
// 2、添加該注解后,所有的接口上,不用再添加@Mapper注解了
@Configuration
@MapperScan(value = "cn.tedu._05mvcboot02")
public class MyBatisConfig {
}
UserController
package cn.tedu._05mvcboot02.controller;import cn.tedu._05mvcboot02.mapper.UserMapper;
import cn.tedu._05mvcboot02.pojo.dto.AddUserDTO;
import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.List;//@Controller
@RestController
@RequestMapping(value = "/v1/users/")
public class UserController {@Autowired UserMapper userMapper;@RequestMapping(value = "insert")
// @ResponseBodypublic String addUser(AddUserDTO addUserDTO){User user=new User();BeanUtils.copyProperties(addUserDTO,user);user.setCreated(new Date());userMapper.insertUser(user);return "添加成功";}@RequestMapping(value = "userList")
// @ResponseBodypublic List<UserListVO> getUserList(){return userMapper.getUserList();}@RequestMapping(value = "deleteUser")
// @ResponseBodypublic String deleteUserById(Integer id){return "刪除成功"+userMapper.deleteUserById(id);}@RequestMapping(value = "update")
// @ResponseBodypublic String updateUser(User user){return "更新成功:"+userMapper.updateUser(user);}}
UserMapper
package cn.tedu._05mvcboot02.mapper;import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Controller;import java.util.List;@Mapper
public interface UserMapper {int insertUser(User user);List<UserListVO> getUserList();int deleteUserById(Integer id);int updateUser(User user);}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu._05mvcboot02.mapper.UserMapper"><insert id="insertUser">INSERT INTO mvcdb.user(username, password, nickname, created)VALUES (#{username}, #{password}, #{nickname}, #{created})</insert><select id="getUserList" resultType="cn.tedu._05mvcboot02.pojo.vo.UserListVO">SELECT username, passwordFROM mvcdb.user</select><delete id="deleteUserById">DELETEFROM mvcdb.userWHERE id = #{id}</delete><update id="updateUser" >UPDATE mvcdb.user<set><if test="username!=null">username=#{username}</if>,<if test="password!=null">password=#{password}</if>,<if test="nickname!=null">nickname=#{nickname}</if>,<if test="created!=null">created=#{created}</if></set>WHERE id=#{id}</update></mapper><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.tedu._05weibo.mapper.WeiboMapper"><insert id="insert">INSERT INTO blog.weibo(content, created, user_id)VALUES (#{content}, #{created}, #{userId})</insert>獲取微博<select id="selectIndex" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">SELECT w.id,w.content,u.nicknameFROM blog.user uJOIN blog.weibo w on u.id = w.user_id</select>根據id獲取詳情<select id="selectById" resultType="cn.tedu._05weibo.pojo.vo.WeiboIndexVO">SELECT w.id,w.content,w.created,u.nicknameFROM blog.user uJOIN blog.weibo w on u.id = w.user_idWHERE w.id=#{id}
</mapper>
application.properties
server.port=8080#???????
spring.datasource.url=jdbc:mysql://localhost:3306/mvcdb?characterEncodeing=utf8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123zhang
#xml????
mybatis.mapper-locations=classpath:mappers/*.xml