TkMybatis使用学习以及Example条件设置

该博客主要围绕Python操作数据库展开。介绍了导入依赖、表结构及GenerationType知识,详细阐述了数据库的增删改查操作,包括基本结构、单条和批量的增删改查方法,还提及Example条件设置器、@MapperScan使用注意点和官方文档等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、导入依赖

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <!-- 建议使用最新版本,最新版本请从项目首页查找 -->
            <version>4.1.5</version>
        </dependency>

在这里插入图片描述

二、表结构以及代码

1、GenerationType知识

一:GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型)。

    @ApiModelProperty(value = "ID", hidden = true)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

二:GenerationType.AUTO:主键由程序控制。

    @ApiModelProperty(value = "ID", hidden = true)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long id;

2、表结构

CREATE TABLE `op_user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `test_yjdsns`.`op_user_info`(`id`, `name`, `sex`) VALUES (1, '卢本伟', '女');

三、增删改查

1、基本结构

在这里插入图片描述

2、增

2.1、insert into table (所有字段) values (?,?..,?)

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
//        opUserInfo.setSex("女");
        int insert = opUserInfoMapper.insert(opUserInfo);

在这里插入图片描述

2.2、insert into table (部分字段) values (?,…?)

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
//        opUserInfo.setSex("女");
        int insert = opUserInfoMapper.insertSelective(opUserInfo);

在这里插入图片描述

3、删

3.1、delete自定义删除

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
        int delete = opUserInfoMapper.delete(opUserInfo);

在这里插入图片描述

3.2、deleteByPrimaryKey根据主键删除其他条件忽略

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setId(2);
        opUserInfo.setName("卢本伟");
        int delete = opUserInfoMapper.deleteByPrimaryKey(opUserInfo);

在这里插入图片描述

4、改

4.1、UpdateByPrimaryKeyMapper根据主键修改所有字段

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setId(1);
        opUserInfo.setName("卢本伟");
        int update = opUserInfoMapper.updateByPrimaryKey(opUserInfo);

在这里插入图片描述

4.2、updateByPrimaryKeySelective根据主键修改不为null字段

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setId(1);
        opUserInfo.setName("卢本伟");
        int update = opUserInfoMapper.updateByPrimaryKeySelective(opUserInfo);

在这里插入图片描述

5、查

5.1、select不为null的为判断条件

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
        List<OpUserInfo> opUserInfoList = opUserInfoMapper.select(opUserInfo);

在这里插入图片描述

5.2、selectOne查找一条记录多条则报错

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
        OpUserInfo resultOpUserInfo = opUserInfoMapper.selectOne(opUserInfo);

在这里插入图片描述

5.3、selectCount查找数量

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setName("卢本伟");
        int row = opUserInfoMapper.selectCount(opUserInfo);

在这里插入图片描述

5.4、selectAll查找全部

        List<OpUserInfo> opUserInfoList = opUserInfoMapper.selectAll();

在这里插入图片描述

5.5、selectByPrimaryKey通过主键查找

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setId(1);
        opUserInfo.setName("卢本伟");
        OpUserInfo resultOpUserInfo = opUserInfoMapper.selectByPrimaryKey(opUserInfo);

在这里插入图片描述

5.6、existsWithPrimaryKey通过主键判断记录是否存在

        OpUserInfo opUserInfo = new OpUserInfo();
        opUserInfo.setId(1);
        opUserInfo.setName("卢本伟");
        Boolean existsWithPrimaryKey = opUserInfoMapper.existsWithPrimaryKey(opUserInfo);

在这里插入图片描述

四、基础方法

1、批量插入insertList

在这里插入图片描述

这两个功能有一个要求,那就是操作的数据库表必须有一个自增主键,因为它要求主键必须要有一个默认值,否则就抛出异常。

这两个接口是集成到 MySqlMapper 接口中了,所以 dao 层的 mapper 接口还要继承 MySqlMapper 接口才能使用批量插入功能。

public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo> {
}
        ArrayList<OpUserInfo> objectArrayList = Lists.newArrayList();
        objectArrayList.add(new OpUserInfo(null, "李伟雄", "女"));
        objectArrayList.add(new OpUserInfo(null, "易拉罐", null));
        int i = opUserInfoMapper.insertList(objectArrayList);

在这里插入图片描述

2、selectByIds批量查询

SelectByIdsMapper 接口有一个方法 selectByIds,按照多个主键 id 值进行查询,但是方法的参数是 String,那么主键id之间用逗号隔开就行。

public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo>, SelectByIdsMapper<OpUserInfo> {
}
        String sb = "6,7,8";
        List<OpUserInfo> opUserInfoList = opUserInfoMapper.selectByIds(sb);

在这里插入图片描述

3、deleteByIds批量删除

DeleteByIdsMapper 接口有一个方法 deleteByIds,按照多个主键 id 值进行删除。

public interface OpUserInfoMapper extends Mapper<OpUserInfo>, MySqlMapper<OpUserInfo>, SelectByIdsMapper<OpUserInfo>, DeleteByIdsMapper<OpUserInfo> {
}
        String sb = "6,7,8";
        int i = opUserInfoMapper.deleteByIds(sb);

在这里插入图片描述

五、Example条件设置器

1、Example 条件设置举例代码

@Data
@Table(name = "op_user_info")
public class OpUserInfo implements Serializable {

    private static final long serialVersionUID = 6606590853013684198L;

    @Id
    @Column(name = "Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String sex;
}
        Condition condition = new Condition(OpUserInfo.class);
        Example.Criteria criteria = condition.createCriteria();
        criteria.andEqualTo("name","卢本伟");
        List<OpUserInfo> opUserInfos = opUserInfoMapper.selectByExample(condition);
        log.info(opUserInfos.toString());

在这里插入图片描述

方法功能描述
andAllEqualTo(Object param)所有字段都作为 where 后面的判断条件,判断值就是参数实体对象
andBetween(String property, Object value1, Object value2)where property between value1 and value2 ,范围条件,包含两端
andEqualTo(Object param)实体对象中不为 null 的字段作为 where 后面的判断条件
andEqualTo(String property, Object value)某一个<字段,值>作为 where 后面的判等条件
andGreaterThan(String property, Object value)大于条件,某个字段大于某个值
andGreaterThanOrEqualTo(String property, Object value)大于等于条件,某个字段大于等于某个值
andIn(String property, Iterable values)where property in (),范围条件
andIsNotNull(String property)where property is not null,判空条件
andIsNull(String property)where property is null,判空条件
andLessThan(String property, Object value)小于条件
andLessThanOrEqualTo(String property, Object value)小于等于条件
andLike(String property, String value)where property like value,注意 value 应该是一个匹配表达式
andNotBetween(String property, Object value1, Object value2)范围条件,不包含两端
andNotEqualTo(String property, Object value)要求字段不等于某个值
andNotIn(String property, Iterable values)要求字段不在某个范围内
andNotLike(String property, String value)模糊查询,要求不 like。
void setAndOr(String andOr)意思相当于在括号前面加上 and 还是 or,比如执行了方法 setAndOr(“and”),那么 criteria 相当于 and (id = 5),而 example 就把这些 criteria 拼凑起了,比如 example 包含了 2 个 criteria,分别是 (id = 5) 和 and (name = “张三”),那么此 example 的效果就是 (id = 5) and (name = “张三”)。

六、其他

1、@MapperScan使用注意点

@MapperScan路径
tk.mybatis.spring.annotation.MapperScan

2、官方文档

官方文档链接地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和烨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值