MyBatis-flex用法

        Mybatis是一个ORM轻量级框架,我们用的时候感觉很蛋疼,很多基础语句都需要手写,开发效率低。我了解了一下Mybatis自带的generator感觉不是很好用,正好这时候我发现了mybatis-flex,还挺顺手的。

        pom.xml需要引入mybatis-flex的starter,其中,springboot3,建议手动引用mybatis-spring,避免版本不兼容问题。

根据官方文档说明,我们可以选择hikariCP 和 Druid连接池,我没有测试其他连接池,如果使用的是 druid 数据库连接池,则需要添加数据源类型的配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

        <dependency>
            <groupId>com.mybatis-flex</groupId>
            <artifactId>mybatis-flex-spring-boot-starter</artifactId>
            <version>1.5.5</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis-spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.0</version>
        </dependency>

        在使用时,需要在实体类上加入@Table注解,value属性是表名,schema属性是库名。

        在引用后,刷新maven,执行对应模块的maven clean package会生成 xxxTableDef文件(默认生成位置在 模块/target/generated-sources/annotations/实体类包/table/DailyTrainCarriageTableDef.java),这个文件我们之后再看。

        例如:有实体类 乘车人


import com.mybatisflex.annotation.Table;
import io.swagger.v3.oas.annotations.media.Schema;

import java.util.Date;

@Schema(description = "乘车人")
@Table("passenger")
public class Passenger {

    @Schema(description = "id")
    private Long id;

    @Schema(description = "会员id")
    private Long memberId;
    @Schema(description = "乘车人姓名 ")
    private String name;
    @Schema(description = "乘车人身份证")
    private String idCard;
    @Schema(description = "乘车人类型")
    private String type;

    @Schema(description = "创建时间")
    private Date createTime;

    @Schema(description = "更新时间")
    private Date updateTime;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", memberId=").append(memberId);
        sb.append(", name=").append(name);
        sb.append(", idCard=").append(idCard);
        sb.append(", type=").append(type);
        sb.append(", createTime=").append(createTime);
        sb.append(", updateTime=").append(updateTime);
        sb.append("]");
        return sb.toString();
    }
}

增:

        连同主键插入,业务中已经生成主键了,建议这样。

passengerMapper.insertWitPk(passenger); 

        忽略主键插入,由数据库端或配置了SQL拦截器可以这样

passengerMapper.insert(passenger); 

改:

         要保存的数据带有主键,根据主键where定位更新

passengerMapper.update(passenger);

查:

        查询数据的时候,我们可以使用mybatis-flex 生成的QueryWrapper 进行构建查询条件。

结构如下:

        

QueryWrapper.create()
    .select() //这里面构造字段,例如passenger实体类,PASSENGER.ALL_COLUMNS这是刚刚生成的PassengerTableDef类的静态字段。
    .where() //这里面构造where查询条件,例如PASSENGER.MEMBER_ID.eq(memberId)
    [.and() .or[]]
    .order by()
--------------------------------------
你可以像使用sql一样使用查询构造器,遇事不决点一点就好。

最后,使用passengerMapper.selectListByQuery(queryWrapper)即可
同时也提供了passengerMapper.selectOneByQuery()
passengerMapper.selectCountByQuery()等API,都是望文知义的

        根据主键删除

        

int len = passengerMapper.deleteById(id);//返回值是影响行数
int len = passengerMapper.deleteByIds(ids);//返回值是影响行数        

 -------------------------------------------------------------------------------------------------------------------------------

需要注意的是,你可以在删、改、查的时候,都可以使用QueryWrapper来构造where条件

同时,如果你想在控制台查看实时输出语句,你需要加入配置类,使用mybatis自带的输出实现即可。

import com.mybatisflex.core.mybatis.FlexConfiguration;
import com.mybatisflex.spring.boot.ConfigurationCustomizer;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {

    @Override
    public void customize(FlexConfiguration configuration) {
        configuration.setLogImpl(StdOutImpl.class);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值