前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis-plus增删改查以及前后端分离模式下的项目应用

mybatis-plus增删改查以及前后端分离模式下的项目应用

作者头像
许喜朝
发布2020-10-27 17:00:50
7980
发布2020-10-27 17:00:50
举报
文章被收录于专栏:生如夏花的个人博客

mybatis-plus增删改查(新版)

所需依赖
代码语言:javascript
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
<!--        阿里巴巴连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
    </dependencies>
提供数据库表 (mybatis-plus官网提供)

其对应的数据库 Schema 脚本如下

如果需要使用mp的主键自增,需要设置主键自增 AUTO_INCREMENT

代码语言:javascript
复制
DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下

代码语言:javascript
复制
DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
创建一个spring-boot项目
修改配置文件为application.yml(个人习惯,也可以不改)

配置数据库信息

代码语言:javascript
复制
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: password
新建实体类UserPojo
代码语言:javascript
复制
@Data//自动set/get方法
@TableName("user")//对应数据库表名,如果类名和数据库表名一样可以忽略此注解
@AllArgsConstructor//自动全参构造
@NoArgsConstructor//自动无参构造
@Accessors(chain = true)//链式赋值
public class UserPojo {
    @TableId(type = IdType.AUTO,value = "id")//主键自增
    private Long id;
//    @TableField(value = "name")  如果实体类字段和数据库字段不对应可以使用该注解指定
    private String name;
    private Integer age;
    private String email;
}
新建UserMapper接口实现BaseMapper接口
代码语言:javascript
复制
@Mapper//使用该注解指定为该接口为mapper接口
//如果不使用该注解就需要在启动类中用@MapperScan("mapper接口的全路径名")指定
public interface UserMapper extends BaseMapper<UserPojo> {
    //注意BaseMapper的泛型一定要对应实体类,实体类要对应数据库表
测试方法中测试mybatis-plus增删改查方法
代码语言:javascript
复制
@SpringBootTest
class MybatisPlusNewdemoApplicationTests {
    @Autowired(required = false)
    private UserMapper mapper;


    /**|
     * 根据id查询
     */
    @Test
    public void test1(){
        UserPojo userPojo = mapper.selectById(1);
        System.out.println(userPojo);
    }

    /**
     * 根据map查询
     */
    @Test
    public void test2(){
        Map<String, Object> map = new HashMap<>();
        map.put("id",1);
        List<UserPojo> userPojos = mapper.selectByMap(map);
        userPojos.forEach(System.out::println);
    }

    /**
     * 自定义条件查询
     */
    @Test
    public void test3(){
        //QueryWrappert条件构造器
        List<UserPojo> userPojos = mapper.selectList(new QueryWrapper<UserPojo>().eq("id", 1));
        userPojos.forEach(System.out::println);
    }

    /**
     *根据对象添加
     * 使用mybatis-plus的主键自增功能,需要数据库的该字段也设置自增属性
     */
    @Test
    public void test4(){
        UserPojo userPojo = new UserPojo();
        userPojo.setAge(20).setEmail("123@qq.com").setName("生如夏花");
        mapper.insert(userPojo);
    }

    /**
     * 自定义条件构造器删除
     */
    @Test
    public void test5(){
        mapper.delete(new QueryWrapper<UserPojo>().eq("name","生如夏花"));
    }

    /**
     * 根据id集合删除
     */
    @Test
    public void test6(){
        List<Long> longs = new ArrayList<>();
        longs.add(7l);
        longs.add(8l);
        mapper.deleteBatchIds(longs);
    }

    /**
     * 根据id修改
     * updateById方法会自动去寻找对象中的id属性
     */
    @Test
    public void test7(){
        UserPojo userPojo = new UserPojo();
        userPojo.setId(1l).setAge(20).setEmail("123@qq.com").setName("生如夏花");
        mapper.updateById(userPojo);
    }

    /**
     * 自定义条件构造器更新
     */
    @Test
    public void test8(){
        UserPojo userPojo = new UserPojo();
        userPojo.setAge(20).setEmail("123@qq.com").setName("生如夏花");
        mapper.update(userPojo,new QueryWrapper<UserPojo>().eq("id",2l));
    }
}
mybatis-plus的项目应用

需求

查询所有用户 请求路径:http://localhost:8080/user 请求方法:get 请求参数: 无 返回对象:{

代码语言:javascript
复制
 data:
 [
 {
 id: 1,
 name: “生如夏花”,
 age: 20,
 email: “123@qq.com”
 }
 ],
 meta:
 {
 status: 200,
 msg: “查询成功”
 }
 
 }
 

新增依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

在application.yml中设置启动端口

代码语言:javascript
复制
server:
  port: 8080

新建UserController

代码语言:javascript
复制
@RestController//指定该类为controller
public class UserController {
    @Autowired(required = false)
    private UserService userService;

    @GetMapping("user")
    public ReturnVo getUserAll(){
        return userService.getUserAll();
    }
}

新建UserService接口

代码语言:javascript
复制
public interface UserService {
    //查询全部用户
    ReturnVo getUserAll();
}

新建UserServiceImpl实现UserService接口

代码语言:javascript
复制
@Service//指定该类为service
public class UserServiceImpl implements UserService {

    @Autowired(required = false)
    private UserMapper userMapper;
    @Override
    public ReturnVo getUserAll() {
        //queryWrapper为null表示查询全部
        List<UserPojo> userPojos = userMapper.selectList(null);
        return new ReturnVo(userPojos,new Meta(200,"查询成功"));
    }
}

新建ReturnVo返回类

代码语言:javascript
复制
/**
 * 统一返回类
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class ReturnVo {
    private Object data;
    private Meta meta;
}

新建Meta返回状态类

代码语言:javascript
复制
/**
 * 状态返回类
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class Meta {
    private Integer status;
    private String msg;
}

通过浏览器访问http://localhost:8080/user

得到以下数据

代码语言:javascript
复制
{
    "data": [
        {
            "id": 1,
            "name": "生如夏花",
            "age": 20,
            "email": "123@qq.com"
        },
        {
            "id": 2,
            "name": "生如夏花",
            "age": 20,
            "email": "123@qq.com"
        },
        {
            "id": 3,
            "name": "Tom",
            "age": 28,
            "email": "test3@baomidou.com"
        },
        {
            "id": 4,
            "name": "Sandy",
            "age": 21,
            "email": "test4@baomidou.com"
        },
        {
            "id": 5,
            "name": "Billie",
            "age": 24,
            "email": "test5@baomidou.com"
        }
    ],
    "meta": {
        "status": 200,
        "msg": "查询成功"
    }
}

这便就是前后端分离模式下mybatis-plus在项目中的简单应用

如果mybatis-plus自带的方法不能满足要求,可以在mapper中自定义方法

例:查询所有用户

代码语言:javascript
复制
public interface UserMapper extends BaseMapper<UserPojo> {
    //查询所有用户
    @Select("select * from user")
    List<UserPojo> getUserAll();
}

自定义方法可以满足大部分项目需求,不过复杂的sql语句还是建议写在xml中,例如多表联合查询

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mybatis-plus增删改查(新版)
    • 所需依赖
      • 提供数据库表 (mybatis-plus官网提供)
        • 创建一个spring-boot项目
          • mybatis-plus的项目应用
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档