MyBatis-Plus + JSP 实现简单的用户操作

前期准备

1. 构建项目

在这里插入图片描述

2. 添加依赖

<dependencies>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
</dependencies>

3. 项目结构

在这里插入图片描述

启动类:

@SpringBootApplication
@MapperScan("com.example.demo.mapper") //扫描此路径下的mapper
public class Ch05Application {

    public static void main(String[] args) {
        SpringApplication.run(Ch05Application.class, args);
    }

}

User:

@Data
@TableName("user")
public class User implements Serializable {
    @TableId(type = IdType.AUTO)
    @TableField("user_id")
    private Long userId;
    @TableField("user_name")
    private String userName;
    @TableField("user_password")
    private String userPassword;
    @TableField("user_role_id")
    private Long userRoleId;
    @TableField("user_flag")
    private Integer userFlag;
}

UserMapper:

	public interface UserMapper extends BaseMapper<User> {

	}

UserService:

public interface UserService {
    public User login(String userName, String userPassword);
    public int addUser(User user);
    public int updateUser(User user);
    public int deleteUser(Long UserId);
    public User getUser(Long UserId);
    public List<User> findAllUser();
}

UserServiceImpl:

@Service("userService")
public class UserSerivceImpl implements UserService {
    @Resource
    private UserMapper userMapper;

    @Override
    public User login(String userName, String userPassword) {//登录验证
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name", userName);
        wrapper.eq("user_password", userPassword);
        return userMapper.selectOne(wrapper);
    }

    @Override
    public int addUser(User user) {//添加
        return userMapper.insert(user);
    }

    @Override
    public int updateUser(User user) {//修改
        return userMapper.updateById(user);
    }

    @Override
    public int deleteUser(Long userId) {//删除
        return userMapper.deleteById(userId);
    }

    @Override
    public User getUser(Long userId) {//根据ID查询
        return userMapper.selectById(userId);
    }

    @Override
    public List<User> findAllUser() {//查询全部
        return userMapper.selectList(null);
    }
}

控制器开发

JSON的支持

@RestController
public class UserController {
   	@Resource
   	private UserService userService;

   	@RequestMapping(value = "/user", method = RequestMethod.GET)
   	public User getUser(Long userId){
       User user = userService.getUser(userId);
       return user;
  	}

@ RestController 注解相当于 @ResponseBody + @Controller 合在起的作用, 如果 Web 层的类上使用了@RestController 注解,就代表这个类中所有的方法都会以 JSON 的形式返回结果,也相当于JSON 的一种快捷使用方式;当然,如果想返回页面继续使用 @Controller 注解也是可以的。

@RequestMapping(value = “/user”, method = RequestMethod.GET),以 /user 的方式去请求,method= RequestMethod.GET 是指只可以使用GET的方式去请求,如果使用 POST 的方式去请求的话,则会报 405 不允许访问的错误。

访问结果:
在这里插入图片描述

RESTful 的支持

RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

Spring Boot全面支持开发RESTful 程序,通过不同的注解来支持前端的请求,除了经常使用的注解外,Spring Boot 还提了一些组合注解。这些注解来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。
● @GetMapping. 处理Get请求
● @PostMapping,处理Post 请求
● @PutMapping, 用于更新资源
● @DeleteMapping, 处理删除请求
● @PatchMapping, 用于更新部分资源
其实这些组合注解就是我们使用的 @RequestMapping 的简写版本,RESTful在请求的类型中就指定了对资源的操控。@GetMaping(value="/xxx") 等价于 @RequestMapping(value="/xxx",method = RequestMethod.GET).

修改UserController.java:

@RestController
public class UserController {
    @Resource
    private UserService userService;

    @GetMapping(value = "/user/{id}")
    public User getUser(@PathVariable("id") Long userId){
        User user = userService.getUser(userId);
        return user;
    }

    @GetMapping(value = "/users")
    public List<User> findAllUser(){
        List<User> list = userService.findAllUser();
        return list;
    }

    @PostMapping(value = "/user")
    public void addUser(User user){
        userService.addUser(user);
    }

    @PutMapping(value = "/user")
    public void updateUser(User user){
        userService.updateUser(user);
    }

    @DeleteMapping(value = "/user/{id}")
    public void deleteUser(@PathVariable("id") Long userId){
        userService.deleteUser(userId);
    }
}

访问结果:
在这里插入图片描述


在这里插入图片描述

Web 测试的支持

以往我们在测试 Web 请求的时候,我们常常会在浏览器中访问一些特定的地址来进行测试,但如果涉及到一些非 get 请求就会变的稍微麻烦一些。有的会使用 PostMan 工具或者自己写一些 Http Post 请求来进行测试。Spring Boot 中有对Web测试的解决方案: MockMvc。
MockMvc 实现了对 Http 请求的模拟,能够直接使用网络的形式,转换到Controller 的调用,这样可以使得测试速度更快、不依赖网络环境,而且提供了一套验证的工具,可以使得请求的验证统一而且更方便。
下面是MockMvc测试类的基本结构:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTesrer {
    @Resource
    private WebApplicationContext wac;
    private MockMvc mockMvc;
    @Before		//@Before代表在测试启动时需要提前加载的内容, 这里是提前加载 MVC 环境
    public void setup(){
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void testGetUser() throws Exception {//根据ID查询
        String mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/user/1")).andReturn().getResponse().getContentAsString();
        System.out.println("Result==="+mvcResult);
    }

    @Test
    public void testAddUser() throws Exception {//添加
        final MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
        params.add("userName","xiaomin");
        params.add("userPassword","111111");
        params.add("userRoleId","1");
        params.add("userFlag","1");
        mockMvc.perform(MockMvcRequestBuilders.post("/user").params(params)).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print());
    }
}

执行测试, 控制台输出如下:

根据ID查询:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200905085913632.png#pic_center

添加:
在这里插入图片描述

  • perform(…) 构建一个请求,并且返回 ResultActions 示例,该实例则可以获取到请求的返回内容等。
  • MockMvcRequestBuilders.xxx(“url”) 以某种请求方法发出对某url的请求
  • params 构建请求时候的参数,也支持 param(key,value) 的方式连续添加。
  • andExpect(…) 预期结果判断,可以多次调用。
  • andReturn() 返回 MvcResult 对象,该对象可以获取到返回的视图名称、返回的 Response 状态、获取拦截请求的拦截器集合。
  • andDo(…) 继续一些操作, 例如 MockMvcResultHandlers print() 打印响应信息。

视图(JSP)开发

  1. 项目结构
    在这里插入图片描述
    statics 静态文件
    webapp 目录为我们手动创建,所以需要在 IDEA 中进行配置,指定 webapp 目录为项目的 Web资源目录。
    File > Project Structure > Modules,选择项目的 Web,在 Web 资源目录处单击+,调出配置界面,选择 webapp 目录,OK确定并应用。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200905092545571.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTg1NzkyNg==,size_16,color_FFFFFF,t_70#pic_center

  1. 配置文件:
<!--添加jstl标签库依赖-->
<dependency>
 	<groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!--添加jsp引擎, String Boot内置Tomcat没有此依赖-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  1. 编写 Controller:
@Controller
public class LoginController {
    @Resource
    private UserService userService;

    @RequestMapping(value = "/login",method = RequestMethod.GET)
    public String logins(){
        return "devlogin";
    }

    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public String login(String userName, String userPassword, Model model, HttpSession session){
        User user = userService.login(userName,userPassword);
        if (user!=null){
            session.setAttribute("loginUser",user);
            return "main";
        }else{
            model.addAttribute("error","用户名或密码错误!");
            return "devlogin";
        }
    }
}
  1. 额外配置:

在这里插入图片描述

在这里插入图片描述

  1. 运行
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值