tkMybatis

       最近在项目中用到springBoot+tkMybatis,在开发使用过程中遇到一些问题,现在做下记录总结。本文主要针对tkMybatis的使用进行总结。

一、新增

 insert:根据对象T的属性,生成插入语句,并返回影响的行数

         备注:NULL字段也会插入进行; 但是需要指定该字段的jdbcType,否则抛出错误(Oracle是个奇葩,其它好多数据库都可以,不抛错);如何指定字段的jdbcType,参见高级用法;如果T对象中有字段不想插入,可以配置注解insertable=false;如果T对象中有字段不想插入,可以配置注解Transient(该字段不参与自动生成语句); 

User user = newUser();

user.setId(101);

user.setUsername("admin");

user.setPassword("123456");

user.setEmail("");

userDAO.insert(user);

相当于:insert into user(ID,username,password,email) values(101,'admin','123456','');

insertSelective:保存一个实体,null的属性不会保存,会使用数据库默认值

        备注:NULL字段不会被插入进去,因此对象T的属性不要使用8大简单类型;需要使用其包装类,我们实际环境运用中常常是该函数(空属性不插入);其余特性和insert相同;

二、删除

delete:根据对象T的参数,进行绝对匹配,并删除该记录返回删除的行数

        备注:该方法如果入参为null,则删除的是表的所有数;该方法如果入参为new T(),则删除的是表的所有数;条件采用的是绝对匹配;如果配置参数safeDelete没有指定,是不允许空条件删除,会抛错(参加高级参数配置部分);

deleteByPrimaryKey:根据主键对象,进行删除该主键所表述的记录,并返回删除的行数

        备注: 如果<T>是单主键,那么直接传递主键对象即可,例如long、String等;如果<T>是复合主键,可以传递<T>对象,对象的复合主键都存在值;或者传递Map,其中key为复合主键的key,也是可以的;复合主键情况用的较少;

userDAO.deleteByPrimaryKey(101); 

相当于:delete from user where id=101 

三、修改

updateByPrimaryKey:根据对象T的参数的主键数据,进行更新该记录

        备注:主键数据必须存在;如果T对象中的属性为NULL,也会更新到数据库中,但需要设置jdbcType;(Oracle是个奇葩,其它好多数据库都可以,不抛错);如何指定字段的jdbcType,参见高级用法;如果T对象中有字段不想更新,可以配置注解updateable=false;如果T对象中有字段不想更新,可以配置注解Transient(该字段不参与自动生成语句); 

User user =new User(); 

user.setId(101); 

user.setUsername("joe"); 

user.setPassword("joe"); 

user.setEmail(""); 

userDAO.updateByPrimaryKey(user); 

相当于:update user set username='joe',password='joe',email='' where id=101

updateByPrimaryKeySelective :根据对象T的参数的主键数据,进行更新该记录

        备注:主键数据必须存在;如果T对象中的属性为NULL,不会更新到数据库中;如果T对象中有字段不想更新,可以配置注解updateable=false;如果T对象中有字段不想更新,可以配置注解Transient(该字段不参与自动生成语句);需要使用其包装类,我们实际环境运用中常常是该函数(空属性不更新);

User user =new User();

user.setId(101);

user.setPassword("123456");

userDAO.updateByPrimaryKeySelective(user);

相当于:update user set password='123456' where id=101

updateByExample :

UserExample example =new UserExample();

Criteria criteria = example.createCriteria();

criteria.andIDEqualTo("101");

User user =new User();

user.setPassword("123");

userDAO.updateByExample (user,example);

相当于:updateuser set password='123' where ID='101'

四、查询

selectAll:查询表中所有记录,并返回<T>对象的集合

        备注:该方法一般用于小表的全表查询,不适用于数据量达到或者超过K级别的情况

select:根据入参的条件,进行绝对匹配筛选,并返回<T>对象的集合

        备注:该方法如果入参为null,则和selectAll的效果是一致的;该方法如果入参对象存在,但是其属性都是null,则和selectAll的效果是一致的;

selectByRowBounds :根据入参的条件进行分页,进行绝对匹配筛选,并返回<T>对象的集合

        备注:该方法与select一样,只是重载了一个带RowBounds的参数(不允许为null);因Mapper本身不支持方法重名,因此就更换了函数名;如果外部分页查询是拦截RowBounds参数的,可以直接无缝对接;

selectOne :根据入参的条件,进行绝对匹配筛选,并返回<T>对象

        备注:该方法如果查询到0-1个结果,则返回null或者<T>;如果该方法的条件查询到多个,则抛出TooManyResultsException错误;

selectCount :根据入参的条件,进行绝对匹配筛选,并返回符合条件的结果总数

        备注:该方法如果入参为null,则返回的是表的记录总数;条件采用的是绝对匹配;

selectByPrimaryKey :根据主键对象,查询该主键所表示的<T>对象

        备注:如果<T>是单主键,那么直接传递主键对象即可,例如long、String等;如果<T>是复合主键,可以传递<T>对象,对象的复合主键都存在值;或者传递Map,其中key为复合主键的key,也是可以的;复合主键情况用的较少;

         User user = userDAO.selectByPrimaryKey(100); 

        相当于:select * from user where id = 100 

existsWithPrimaryKey :根据主键对象,判断该主键所表示的<T>记录是否存在

        备注:和selectByPrimaryKey函数作用一致,仅采用 0,1 结合rs.getBoolean来做返回值

5、时间查询

在使用example进行时间段查询时,需将时间转换成与DB中对应的时间格式字符串,然后再进行查询,否则会无法查询到结果。

例如:

Example.Criteria criteria = example.createCriteria();

if (null != layerBatchServiceDTO) {

SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

if (null != layerBatchServiceDTO.getStartTime()) {

        criteria.andGreaterThanOrEqualTo("createTime", dateFormat.format(layerBatchServiceDTO.getStartTime()));

    }

if (null != layerBatchServiceDTO.getEndTime()) {

        criteria.andLessThanOrEqualTo("createTime", dateFormat.format(layerBatchServiceDTO.getEndTime()));

    }

}

本文部分内容参考:https://blog.csdn.net/sinat_38419207/article/details/82907387

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,477评论 0 9
  • 一. Java基础部分.................................................
    wy_sure阅读 3,854评论 0 11
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,911评论 0 1
  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,869评论 0 8
  • 不以改变结果为目的的批判就是无效的批判。 不提供解决方案的责备就是无用的责备。 放弃无效的责备和批判也是一种传递正...
    c9b61ef7747d阅读 158评论 0 0