目录
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)
// @ResponseBody
public 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")
// @ResponseBody
public String addUser(AddUserDTO addUserDTO){
User user=new User();
BeanUtils.copyProperties(addUserDTO,user);
user.setCreated(new Date());
userMapper.insertUser(user);
return "添加成功";
}
@RequestMapping(value = "userList")
// @ResponseBody
public List<UserListVO> getUserList(){
return userMapper.getUserList();
}
@RequestMapping(value = "deleteUser")
// @ResponseBody
public String deleteUserById(Integer id){
return "删除成功"+userMapper.deleteUserById(id);
}
@RequestMapping(value = "update")
// @ResponseBody
public 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 mapper
PUBLIC "-//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, password
FROM mvcdb.user
</select>
<delete id="deleteUserById">
DELETE
FROM mvcdb.user
WHERE 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 mapper
PUBLIC "-//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.nickname
FROM blog.user u
JOIN 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.nickname
FROM blog.user u
JOIN blog.weibo w on u.id = w.user_id
WHERE 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