springboot+mybatis的CRUD:项目的搭建

编程入门 行业动态 更新时间:2024-10-25 06:31:33

springboot+mybatis的CRUD:<a href=https://www.elefans.com/category/jswz/34/1771421.html style=项目的搭建"/>

springboot+mybatis的CRUD:项目的搭建

springboot+mybatis的CRUD:项目的搭建

1、创建项目,就不讲了

2、引入mybatis

百度maven第一个结果,或者直接进入传送门,进去之后搜索"MyBatis Spring Boot Starter",复制到项目的pom文件里

<!-- .mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>

等待依赖下载成功

3、试试Mysql是否能连接成功


第一次链接可能会让你下载驱动,那就跟着提示下载就好了
用户名密码没错的话就会展示成功

4、创建数据库表

CREATE TABLE `m_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`username` varchar(64) DEFAULT NULL,`avatar` varchar(255) DEFAULT NULL,`email` varchar(64) DEFAULT NULL,`password` varchar(64) DEFAULT NULL,`status` int(5) NOT NULL,`created` datetime DEFAULT NULL,`last_login` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `UK_USERNAME` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `m_blog` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`user_id` bigint(20) NOT NULL,`title` varchar(255) NOT NULL,`description` varchar(255) NOT NULL,`content` longtext,`created` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,`status` tinyint(4) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
INSERT INTO `vueblog`.`m_user` (`id`, `username`, `avatar`, `email`, `password`, `status`, `created`, `last_login`) VALUES ('1', 'markerhub', '.jpg', NULL, '96e79218965eb72c92a549dd5a330112', '0', '2020-04-20 10:44:01', NULL);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (1, 1, '文章一', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-17 17:36:11', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (2, 1, '文章一2', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-17 17:36:11', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (3, 2, '文章一3', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 11:38:56', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (4, 3, '文章一4', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 11:38:56', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (5, 2, '文章一5', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 11:38:56', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (6, 4, '文章一6', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 11:38:56', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (7, 4, '文章一7', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 11:38:56', 0);
INSERT INTO m_blog (id, user_id, title, description, content, created, status) VALUES (8, 5, '文章一8', '第一篇文章', '第一篇文章第一篇文章第一篇文章', '2021-06-18 13:49:04', 0);
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (1, 'markerhub', '.jpg', 'zhangxi@qq', '96e79218965eb72c92a549dd5a330112', 0, '2021-06-02 17:52:01', null);
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (2, '张liu', 'new', 'zhangliu@qq', '123456', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (3, '王wu', 'old', 'wangwu@qq', '2222222', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (4, 'si', 'sisi', 'sisisi', 'sisisisi', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (5, 'wu', 'wuwu', 'wuwuwu', 'wuwuwuwuwu', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (6, 'liu', 'liuliu', 'liuliuliu', 'liuliuliuliu', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (7, 'qi', 'qiqi', 'qiqiqi', 'qiqiqiqi', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (8, 'ba', 'baba', 'bababa', 'babababa', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (9, 'jiu', 'jiujiu', 'jiujiujiu', 'jiujiujiujiu', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (10, 'shi', 'shishi', 'shishishi', 'shishishishi', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (11, 'shiyi', 'shiyiyi', 'shiyiyiyi', 'shiyiyiyiyi', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (12, 'shier', 'shierer', 'shiererer', 'shierererer', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (13, 'shisan', 'shisansan', 'shisansansan', 'shisansansansan', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');
INSERT INTO m_user (id, username, avatar, email, password, status, created, last_login) VALUES (14, 'shisi', 'shisisi', 'shisisisi', 'shisisisisi', 0, '2021-06-02 17:52:01', '2021-06-02 17:52:01');

5、配置文件的使用

我们发现在项目的resource文件夹下面已经有一个application.properties文件了

删掉,然后再自己新建yaml文件,下面四个文件从上到下,分别对应着主配置、开发环境配置、生产环境配置、测试环境配置。可以不建这么多,用哪个建哪个

application.yaml是主配置文件,放一些项目通用的配

application-dev.yaml 放的是平常开发的一些配置,比如说数据库的连接地址、帐号密码等,

application-prod.yaml 放的是生产环境的一些配置,比如说数据库的连接地址、帐号密码等,

当然也可以再多一个application-test.yaml ,放一些测试环境需要用到的参数。


怎么确定项目使用那个配置文件呢

在主配置文件中使用如下配置来确定自己的项目调用哪个环境

spring:profiles:active: test

6、配置文件中配置数据

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://数据库连接地址:3306/要连接的库?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: 用户名password: 密码
server:port: 8083mybatis:mapper-locations: classpath*:/mapper/**Mapper.xmltype-aliases-package: com.newcrud.entity

spring:datasource

配置的数据库连接信息

server:port

配置的是我们项目从哪个端口启动

mybatis

mapper-locations:对应的是我们之后在哪里写mapper.xml文件,请跳转到第10小段
type-aliases-package:就是我们编写的mapper.xml中的实体类的位置,请跳转到下一小节,也就是第7节

7、新建entity层

package com.newcrud.entity;import lombok.Data;@Data
public class Blog {private Integer id;private Integer user_id;private String title;private String description;private String content;private String created;private Integer status;
}
package com.newcrud.entity;import lombok.Data;@Data
public class User {private Integer id;private String username;private String avatar;private String email;private String password;private Integer status;private String created;private String last_login;
}

为什么entity层使用Integer而不是int

int的默认值为0,而Integer默认值为null。

数据库中数据存在为空的情况。

返回数据库字段值是null的话,int类型会报错。

int是基本数据类型,其声明的是变量,而null则是对象。

所以用integer。

8、新建service层

package com.newcrud.service;import com.newcrud.entity.Blog;import java.util.List;public interface BlogService {List<Blog> getBlogs();List<Blog> getBlogByUserId(Integer userid);boolean insertBlog(Blog blog);boolean updateBlog(Blog blog);boolean deleteBlogById(Integer id);
}
package com.newcrud.service;import com.newcrud.entity.User;import java.util.List;public interface UserService {User getUserById(Integer id);List<User> getAllUser();boolean insertUser(User user);boolean deleteUserById(Integer id);boolean updateUser(User user);User getJmeterUser(Integer id,String username);User getUserByUserName(String username);Integer getUserIdByUserName(String username);
}

9、新建mapper层

package com.newcrud.mapper;import com.newcrud.entity.User;
import org.apache.ibatis.annotations.Mapper;import java.util.List;/*** 这里有两种方法,一种是像我们一样使用@Mapper,一种是在CrudApplication上面新增了@MapperScan备注。直接扫描了整个包* .html* 不过不知道为啥,不加上这个好像是不行,没办法auto,稍微有那么点尴尬* **/
@Mapper
public interface UserMapper {List<User> getUsers();List<User> getUsersPage();User getUserById(Integer id);boolean insertUser(User user);boolean deleteUserById(Integer id);boolean updateUser(User user);User getUSerJmeter(Integer id,String username);User getUserByUserName(String username);Integer getUSerIdByUserName(String username);
}
package com.newcrud.mapper;import com.newcrud.entity.Blog;
import org.apache.ibatis.annotations.Mapper;import java.util.List;
@Mapper
public interface BlogMapper {List<Blog> getBlogs();List<Blog> getBlogByUserId(Integer id);boolean updateBlog(Blog blog);boolean deleteBlogById(Integer id);boolean insertBlog(Blog blog);
}


这里看起来是不是和service层看起来是一样的,但其实这里的方法名对应的是未来我们要编写的Mapper.xml文件对应的,而不是和service层的interface对应的

10、编写Mapper.xml

resource下新建mapper文件夹,文件夹下新建

UserMapper.xml

BlogMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd">
<!--这里一定要把namespace写全了,要不然会找不到对应的UserMapper里的每一个方法-->
<mapper namespace="com.newcrud.mapper.BlogMapper"><resultMap id="blog" type="Blog"><id column="id" property="id" javaType="Integer"></id><result column="user_id" property="user_id" javaType="Integer"></result><result column="title" property="title" javaType="String"></result><result column="description" property="description" javaType="String"></result><result column="content" property="content" javaType="String"></result><result column="created" property="created" javaType="String"></result><result column="status" property="status" javaType="Integer"></result></resultMap><select id="getBlogs" resultMap="blog" resultType="Blog">select * from m_blog</select><select id="getBlogByUserId" resultType="Blog" resultMap="blog" parameterType="Integer">select * from m_blog<where><trim suffixOverrides="and" prefixOverrides="and">and user_id = #{user_id}</trim></where></select><update id="updateBlog" parameterType="Blog">update m_user set user_id=#{user_id},title = #{title},description=#{description},content = #{content},created = #{created},status = #{status}where id =#{id}</update><delete id="deleteBlogById" parameterType="Integer">delete m_user where id =#{id}</delete><insert id="insertBlog" parameterType="User">insert into m_user values (${id},#{user_id},#{title},#{description},#{content},#{created},#{status})</insert></mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd">
<!--这里一定要把namespace写全了,要不然会找不到对应的UserMapper里的每一个方法-->
<mapper namespace="com.newcrud.mapper.UserMapper"><!--我们一般将这个xml对应的实体类的所有字段抽出来放在这里,将它做为一个模板,称之为resultMap,比如我们select  * 那查出来的都是这个对应的实体类对不对type="User",代表使用哪种类作为其映射的类,可以是别名或者全限定名--><resultMap id="user" type="User"><!--在自定义的resultMap中第一列通常是主键id,id是作为唯一标识的,当和其他对象实例对比的时候,这个id很有用,尤其是应用到缓存和内嵌的结果映射;property:映射数据库列的字段或属性,如果JavaBean的属性与给定的名称匹配,就会使用匹配的名字;column:数据库的列名或者列标签别名--><id column="id" property="id" javaType="Integer"></id><result column="username" property="username" javaType="String"></result><result column="avatar" property="avatar" javaType="String"></result><result column="email" property="email" javaType="String"></result><result column="password" property="password" javaType="String"></result><result column="status" property="status" javaType="Integer"></result><result column="created" property="created" javaType="String"></result><result column="last_login" property="last_login" javaType="String"></result></resultMap><!--查询所有用户--><!--select 对应的是数据库的方法(增删改查),id="getUsers"对应的mapper层对应接口的定义的方法,resultType="User" 对应的是entity层的实体类--><select id="getUsers" resultType="User"><!--这里放的就是查询语句-->select * from m_user</select><!--根据ID查询用户--><!--这里的resultMap就是上面定义的那个resultMap,resultType="User",代表使用哪种类作为其映射的类,parameterType="Integer",参数的类型--><select id="getUserById" resultMap="user" resultType="User" parameterType="Integer">select * from m_user<trim prefixOverrides="and" suffixOverrides="and"><where>and id = #{id}</where></trim></select><select id="getUSerJmeter" resultType="User" resultMap="user">select * from m_user<trim suffixOverrides="and" prefixOverrides="and"><where>and id=#{id} andusername=#{username}</where></trim></select><select id="getUserByUserName" parameterType="String" resultMap="user"  resultType="User">select * from m_user<trim prefixOverrides="and" suffixOverrides="and"><where>and username=#{username}</where></trim></select><!--更新用户--><update id="updateUser" parameterType="User">update m_user set username=#{username},avatar=#{avatar},email=#{email},password=#{password},status=#{status},created=#{created},last_login=#{last_login}where id=#{id}a</update><!--新增用户--><insert id="insertUser" parameterType="User">insert into m_uservalues (${id},#{username},#{avatar},#{email},#{password},#{status},#{created},#{last_login});</insert><!--删除用户--><delete id="deleteUserById" parameterType="Integer">delete from m_user where id=#{id}</delete><select id="getUSerIdByUserName" parameterType="String" resultType="Integer">select id from m_user where username=#{username}</select>
</mapper>

$和#号的区别

虽说我们的文件都只写了#号,但是也有的地方写$号。
1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id =‘1’.

2 是 将 传 入 的 数 据 直 接 显 示 生 成 s q l 语 句 , e g : s e l e c t i d , n a m e , a g e f r o m s t u d e n t w h e r e i d = 是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id = 是将传入的数据直接显示生成sql语句,eg:selectid,name,agefromstudentwhereid={id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

3 使用#可以很大程度上防止sql注入。(语句的拼接)

4 但是如果使用在order by 中就需要使用 $.

trim suffixOverrides=“and” prefixOverrides=“and”

上面的文件中有一段是比较特殊的语句再这里

    <select id="getUSerJmeter" resultType="User" resultMap="user">select * from m_user<trim suffixOverrides="and" prefixOverrides="and"><where>and id=#{id} andusername=#{username}</where></trim></select>

prefix:在trim标签内sql语句加上前缀。

prefixOverrides:指定去除多余的前缀内容 如:prefixOverrides = “and”,去除trim标签内sql语句多余的前缀"and"。

suffix:在trim标签内sql语句加上后缀。

suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。

我们的这个例子不够明显,我抄来了一份更明显的

<update id="update" parameterType="Object">update student set <trim  suffixOverrides="," > <if test="name != null  ">name=#{name},</if><if test="hobby != null  ">hobby=#{hobby},</if></trim> where id=#{id}</update>

如果没有写suffixOverrides=","执行的语句就会变成

 update student set  name= ? ,hobby=? ,  , where id = ?

这样的SQL语句就会报错了,加上suffixOverrides=","

 update student set  name= ?,hobby=?, where id = ?

11、service层的impl实现类的编写

service下新建impl文件夹

package com.newcrud.service.impl;import com.newcrud.entity.Blog;
import com.newcrud.mapper.BlogMapper;
import com.newcrud.service.BlogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
//实现service层的对应接口
public class BlogServiceImpl implements BlogService {//引入对应的mapper层,因为其实在mapper层完成了xml文件的编写的时候,对应的接口已经实现了其增删改查的功能。@AutowiredBlogMapper blogMapper;@Overridepublic List<Blog> getBlogs() {return blogMapper.getBlogs();}@Overridepublic List<Blog> getBlogByUserId(Integer userid) {return blogMapper.getBlogByUserId(userid);}@Overridepublic boolean insertBlog(Blog blog) {return blogMapper.insertBlog(blog);}@Overridepublic boolean updateBlog(Blog blog) {return blogMapper.updateBlog(blog);}@Overridepublic boolean deleteBlogById(Integer id) {return blogMapper.deleteBlogById(id);}
}
package com.newcrud.service.impl;import com.newcrud.entity.User;
import com.newcrud.mapper.UserMapper;
import com.newcrud.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl  implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User getUserById(Integer id) {return userMapper.getUserById(id);}@Overridepublic List<User> getAllUser() {return userMapper.getUsers();}@Overridepublic Integer getUserIdByUserName(String username) {return userMapper.getUSerIdByUserName(username);}@Overridepublic boolean insertUser(User user) {return userMapper.insertUser(user);}@Overridepublic boolean deleteUserById(Integer id) {return userMapper.deleteUserById(id);}@Overridepublic boolean updateUser(User user) {return userMapper.updateUser(user);}@Overridepublic User getJmeterUser(Integer id,String username){return userMapper.getUSerJmeter(id,username);}@Overridepublic User getUserByUserName(String username){return userMapper.getUserByUserName(username);}
}

是不是感觉service层的接口有些累赘?

当项目的业务逻辑简单时,可选择service层=service类;

当项目的业务复杂时,可选择service层=service接口+serviceImpl实现类;

而且接口本来就有解藕的功能。

12、编写入参类和出参类

开发在编写controller的时候,很喜欢一个页面传进来什么参数,就将这些参数封装成一个类。

然后我们再观察出参的参数,发现很多地方都是共同的,比如这里的code,message,totalRow,只有result里的内容是真正的数据,所以我们一般也将这些封装出来

新建outInParam文件夹

入参类

比如说我们通过id查询用户

package com.newcrud.outInParam;import lombok.Data;@Data
public class RequestParamOne {private Integer id;
}

出参类

package com.newcrud.outInParam;import lombok.Data;import java.io.Serializable;@Data
public class Result implements Serializable {private String code;private String msg;private Object data;public static Result succ(Object object){Result result=new Result();result.setCode("200");result.setMsg("ok");result.setData(object);return result;}public static Result fail(Object object){Result result=new Result();result.setData(object);result.setCode("100");result.setMsg("fail");return result;}
}

13、controller层的编写

package com.newcrud.controller;import com.newcrud.entity.Blog;
import com.newcrud.service.impl.BlogServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/crud")
@CrossOrigin
public class BlogController {@Autowiredprivate BlogServiceImpl blogServiceImpl;@RequestMapping(value = "/getById",method = RequestMethod.POST)public List<Blog> getBlogById(@RequestParam(value = "id") Integer id){return blogServiceImpl.getBlogByUserId(id);}@GetMapping("/blogs")public List<Blog> getAll(){return blogServiceImpl.getBlogs();}
}
package com.newcrud.controller;import com.newcrud.entity.User;
import com.newcrud.outInParam.RequestParamOne;
import com.newcrud.outInParam.Result;
import com.newcrud.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/crud")
@CrossOrigin
public class UserController {@Autowiredprivate UserServiceImpl userService;@GetMapping("/user/{id}")public Result geyUserById(@PathVariable("id") Integer id){return Result.succ(userService.getUserById(id));}@RequestMapping(value = "userone",method = RequestMethod.POST)public User getUserByIdPost(@RequestBody RequestParamOne requestParamOne){return userService.getUserById(requestParamOne.getId());}@RequestMapping(value = "/username",method = RequestMethod.POST)public User getUserByUserName(@RequestParam(value = "username") String username){return userService.getUserByUserName(username);}@RequestMapping(value = "/users",method = RequestMethod.POST)public Result getUser(){// return userService.getAllUser();return Result.succ(userService.getAllUser());}}

@CrossOrigin

这个是用来做跨域请求的,暂时还用不到,可以不加

@PathVariable

如下图,就是说从路径里获取参数

@RequestBody

我的理解,就是如果你要传进来的是一个json还对应了一个自己编写的实体类,那就用@RequestBody

@RequestParam

我的理解就是你要使用form-data你就用@RequestParam

14、如果查询为null,就是数据库里没有这个结果,想返回msg为"查询失败"

第一种蠢办法

就脑子一热,这么实现了一下,但是后来一想,不对劲,因为我们写死了失败的原因,没有做到定制化

package com.newcrud.outInParam;import lombok.Data;import java.io.Serializable;@Data
public class Result implements Serializable {private String code;private String msg;private Object data;public static Result succ(Object object){Result result=new Result();result.setCode("200");result.setMsg("ok");result.setData(object);return result;}public static Result fail(Object object){Result result=new Result();result.setData(object);result.setCode("100");//首先修改Result的msg为查询失败,为什么说这种方法不对,就是因为一旦这么写,就会造成所有的查询失败都会使用这个msg,没有做到定制化result.setMsg("查询失败");return result;}
}
package com.newcrud.controller;import com.newcrud.entity.User;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.RequestParamOne;
import com.newcrud.outInParam.Result;
import com.newcrud.service.impl.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/crud")
@CrossOrigin
public class UserController {@Autowiredprivate UserServiceImpl userService;@GetMapping("/user/{id}")public Result geyUserById(@PathVariable("id") Integer id){return Result.succ(userService.getUserById(id));}@RequestMapping(value = "userone",method = RequestMethod.POST)public Result getUserByIdPost(@RequestBody RequestParamOne requestParamOne){User user =  userService.getUserById(requestParamOne.getId());log.info("查询结果为:",user);if (user == null){//判断一下查询用户的结果,如果查询的结果为空,那就报失败return Result.fail(null);}else {return Result.succ(user);}}@RequestMapping(value = "/username",method = RequestMethod.POST)public User getUserByUserName(@RequestParam(value = "username") String username){return userService.getUserByUserName(username);}@RequestMapping(value = "/users",method = RequestMethod.POST)public Result getUser(){// return userService.getAllUser();return Result.succ(userService.getAllUser());}//新增controler层方法,只需要传入PageRequest的类型对象就行@RequestMapping(value = "/page",method = RequestMethod.POST)public Object findPage(@RequestBody PageRequest pageRequest){return userService.getAllUserPage(pageRequest);}}

第二种,定制化失败信息

package com.newcrud.outInParam;import lombok.Data;import java.io.Serializable;@Data
public class Result implements Serializable {private String code;private String msg;private Object data;public static Result succ(Object object){Result result=new Result();result.setCode("200");result.setMsg("ok");result.setData(object);return result;}public static Result fail(Object object,String string){Result result=new Result();result.setData(object);result.setCode("100");//我们这次不将msg写死了,而是通过入参来填写,当然succ静态方法也可以这么写result.setMsg(string);return result;}
}
package com.newcrud.controller;import com.newcrud.entity.User;
import com.newcrud.outInParam.PageRequest;
import com.newcrud.outInParam.RequestParamOne;
import com.newcrud.outInParam.Result;
import com.newcrud.service.impl.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/crud")
@CrossOrigin
public class UserController {@Autowiredprivate UserServiceImpl userService;@GetMapping("/user/{id}")public Result geyUserById(@PathVariable("id") Integer id){return Result.succ(userService.getUserById(id));}@RequestMapping(value = "userone",method = RequestMethod.POST)public Result getUserByIdPost(@RequestBody RequestParamOne requestParamOne){User user =  userService.getUserById(requestParamOne.getId());log.info("查询结果为:",user);if (user == null){//判断一下查询用户的结果,如果查询的结果为空,那就报失败,报错信息为我们手动填写,更自由return Result.fail(null,"新的报错:查询结果为空");}else {return Result.succ(user);}}@RequestMapping(value = "/username",method = RequestMethod.POST)public User getUserByUserName(@RequestParam(value = "username") String username){return userService.getUserByUserName(username);}@RequestMapping(value = "/users",method = RequestMethod.POST)public Result getUser(){// return userService.getAllUser();return Result.succ(userService.getAllUser());}//新增controler层方法,只需要传入PageRequest的类型对象就行@RequestMapping(value = "/page",method = RequestMethod.POST)public Object findPage(@RequestBody PageRequest pageRequest){return userService.getAllUserPage(pageRequest);}}

更多推荐

springboot+mybatis的CRUD:项目的搭建

本文发布于:2024-02-25 15:41:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699470.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:项目   springboot   mybatis   CRUD

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!