MyBatis-Plus动态sql和自定义结果集

第一步

首先我们先再pom.xml里面添加上我们的mybatis依赖

   <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>

第二步

首先我们需要一个实体类也就是我们的User

package com.example.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.io.Serializable;

public class User implements Serializable {
    /**
     * 用户ID
     */
    @TableId(value = "uid", type = IdType.AUTO)
    private Long uId;
    /**
     * 年龄
     */

    private Integer Age;

    /**
     * 邮箱
     */
    private String Email;

    public Long getuId() {
        return uId;
    }

    public void setuId(Long uId) {
        this.uId = uId;
    }

    public Integer getAge() {
        return Age;
    }

    public void setAge(Integer age) {
        Age = age;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }
}

有了实体类,接下来我们就可以使用 MyBatis-Plus的自动生成了,这里我们就不教了,

然后就开始我们的SQL

分为几种,第一种就是我们的MyBatis-Plus的里面自带的SQL接口封装了 增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT) 操作,无需手写 SQL

增(INSERT)

User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("zhangsan@example.com");
int result = userMapper.insert(user);
System.out.println("插入成功,受影响行数:" + result);

里面的userMapper是我通过我们MyBatis自动生成的里面

public interface UserMapper extends BaseMapper<User> { }

特点:

  • insert() 方法自动插入主键 ID(如果 ID 为空,MP 会自动生成)。
  • @TableId(type = IdType.AUTO) 配置主键策略。

删(DELETE)

 1:按 ID 删除

int result = userMapper.deleteById(1);
System.out.println("删除成功,受影响行数:" + result);

一般都项目都不是直接删除数据库的数据都是数据库里面有一个id控制他的显示,也就是状态码

所以说这个删除一般很少使用到的,都是update,根据条件修改状态码,这个一般都是看你们的项目,是需要真删除还是假删除。

 2:条件删除

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
int result = userMapper.delete(wrapper);
System.out.println("删除成功,受影响行数:" + result);

 3:批量删除

int result = userMapper.deleteBatchIds(Arrays.asList(1, 2, 3));
System.out.println("批量删除成功,受影响行数:" + result);

改(UPDATE)

 1:按 ID 更新

User user = new User();
user.setId(1);
user.setEmail("newemail@example.com");
int result = userMapper.updateById(user);
System.out.println("更新成功,受影响行数:" + result);

上面说到的假删除也就是通过这种方式,列如:

User user = new User();
user.setId(1);  //用户id
user.setStatus(1);//状态码(0正常1删除)
int result = userMapper.updateById(user);
System.out.println("更新成功,受影响行数:" + result);

上面使用说到的0和1是通过你数据库设计控制的,

 2:条件更新

UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", "张三").set("email", "newemail@example.com");
int result = userMapper.update(null, wrapper);
System.out.println("更新成功,受影响行数:" + result);

 查(SELECT)

按 ID 查询

User user = userMapper.selectById(1);
System.out.println(user);

2:查询所有

List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);

3:条件查询

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 20).like("name", "张");
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);

3:批量查询

List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
users.forEach(System.out::println);

如果默认 CRUD 不够用,可以自定义 SQL:

自定义 SQL

在UserMapper.java里面添加,你需要的SQL接口,就比如一下很复杂的接口,我下面这个是给你一个思路


List<User> getUsersByAge( int age);

然后去到 resources---》mapper---》UserMapper.xml

里面添加上,你需要的SQL语句

<select id="getUsersByAge" resultMap="BaseResultMap">
        select count(1) from User m
        <where>
            <if test="age != null">
                 m.age = #{age}
            </if>
        </where>
    </select>

自定义SQL的话复杂的,就需要考验你的SQL语句能力了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值