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


一、导入依赖

        <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、官方文档

官方文档链接地址

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Sure! 这里是一个简单的使用 TkMyBatis 的示例: 首先,你需要在你的项目中引入 TkMyBatis 的依赖,可以在 pom.xml 文件中添加以下内容: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>tk-mybatis</artifactId> <version>版本号</version> </dependency> ``` 接下来,你需要创建一个实体类,用于映射数据库表的字段。例如,我们创建一个名为 User 的实体类: ```java public class User { private Long id; private String name; // 省略其他字段的 getter 和 setter 方法 } ``` 然后,你需要创建一个 Mapper 接口,用于定义数据库操作的方法。这个接口需要继承 `Mapper<T>`,其中 T 是你的实体类。例如,我们创建一个名为 UserMapper 的接口: ```java public interface UserMapper extends Mapper<User> { // 省略其他方法 } ``` 接下来,在你的配置文件中配置 MyBatis 和 TkMyBatis。例如,在 application.properties 文件或 application.yml 文件中添加以下内容: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml config-location: classpath:mybatis-config.xml ``` 在这个配置文件中,你需要指定 Mapper 接口和映射文件的位置。 然后,你可以创建一个名为 UserMapper.xml 的映射文件,在这个文件中定义具体的 SQL 查询语句。例如,我们可以编写一个简单的查询所有用户的 SQL: ```xml <mapper namespace="com.example.mapper.UserMapper"> <select id="selectAll" resultType="com.example.entity.User"> SELECT * FROM user </select> </mapper> ``` 最后,在你的代码中使用 UserMapper 接口来进行数据库操作。例如,你可以在你的 Service 类中注入 UserMapper 并调用其方法: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getAllUsers() { return userMapper.selectAll(); } } ``` 这就是一个简单的 TkMyBatis 使用示例。当然,TkMyBatis 还提供了许多其他功能,比如条件查询、分页查询等,你可以根据具体需求进行使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李长渊哦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值