springboot整合tkmybatis以及使用

springboot整合tkmybatis以及使用经常用 mybatis 的的都知道 使用 mybatisorm 框架存在一个非常不友善的问题就是 就是每操作一个单表就需要自己手写一个 xml 文件 虽然说可以用工具生成 xml 和实体类可以解决这个问题 但是二次开发的时候对某个表字段进行修改的时候 生成 xml 文件就不现实啦 最近发现 tkmybatis 就非常好的解决了这个问题 在这里和大家分享一下 框架配置这里需要引用到的包 mybat

经常用mybatis的的都知道,使用mybatis orm框架存在一个非常不友善的问题就是,就是每操作一个单表就需要自己手写一个xml文件,虽然说可以用工具生成xml和实体类可以解决这个问题,但是二次开发的时候对某个表字段进行修改的时候,生成xml文件就不现实啦。最近发现tkmybatis就非常好的解决了这个问题。在这里和大家分享一下。

  • 框架配置

这里需要引用到的包

 <!--mybatis操作数据库有关--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--连接mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--使用阿里巴巴的druid数据源,有利于监控sql的执行情况--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--通用mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <!--添加lombok支持,可以省掉写get和set方法--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <optional>true</optional> </dependency> <!--使用fastjson来操作json数据--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.31</version> </dependency> <!--spring boot web方面的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.4.RELEASE</version> </dependency> 

数据源配置

spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver 

表结构语句

DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `user_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `user_name_index`(`user_name`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, 'evan', '26'); INSERT INTO `user` VALUES (2, 'evan11', '26'); 
  • 类配置方法
    实体类方法
    注意这里是引用了lombok框架,可以省略写get,set之类的方法,这里需要idea里面添加lombok插件,如果有报错的话。(如果有强迫症的话)其实还是代码还是可以跑起来的。

@Data @Table(name="user") public class UserModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC") private Integer id; @Column private String userName; @Column private String userPhone; } 

在这里插入图片描述

  • Service类
    这里主要是实现了上边BaseMapper中继承的5个Mapper的方法。
    tk.mybatis.mapper.common.BaseMapper中有较多方法,均需要继承实现:

 / * 保存一个实体,null属性也会保存 * * @param record * @return */ int insert(T record); / * 保存一个实体,null属性不会保存 * * @param record * @return */ int insertSelective(T record); / * 根据实体属性作为条件进行删除,查询条件使用等号 */ int delete(T record); / * 根据主键更新属性不为null的值 */ int updateByPrimaryKeySelective(T record); / * 根据实体中的属性值进行查询,查询条件使用等号 */ List<T> select(T record); / * 查询全部结果,select(null)方法能达到同样的效果 */ List<T> selectAll(); / * 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号 */ T selectOne(T record); / * 根据实体中的属性查询总数,查询条件使用等号 */ int selectCount(T record); 

MySqlMapper中的方法如下:

/ * 批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含`id`属性并且必须为自增列 */ public int insertList(List<T> recordList); / * 插入数据,限制为实体包含`id`属性并且必须为自增列,实体配置的主键策略无效 */ public int insertUseGeneratedKeys(T record); 

IdsMapper中的方法如下:

 / * 根据主键@Id进行查询,多个Id以逗号,分割 * @param id * @return */ List<T> selectByIds(String ids); / * 根据主键@Id进行删除,多个Id以逗号,分割 * @param id * @return */ int deleteByIds(String ids); 

ConditionMapper中的方法如下:

/ * 根据Condition条件进行查询 */ public List<T> selectByCondition(Object condition); / * 根据Condition条件进行查询 */ public int selectCountByCondition(Object condition); / * 根据Condition条件删除数据,返回删除的条数 */ public int deleteByCondition(Object condition); / * 根据Condition条件更新实体`record`包含的全部属性,null值会被更新,返回更新的条数 */ public int updateByCondition(T record, Object condition); / * 根据Condition条件更新实体`record`包含的全部属性,null值会被更新,返回更新的条数 */ public int updateByConditionSelective(T record, Object condition); 

ExampleMapper中的方法如下:

/ * 根据Example条件进行查询 */ public List<T> selectByExample(Object example); / * 根据Example条件进行查询,若有多条数据则抛出异常 */ public T selectOneByExample(Object example); / * 根据Example条件进行查询总数 */ public int selectCountByExample(Object example); / * 根据Example条件删除数据,返回删除的条数 */ public int deleteByExample(Object example); / * 根据Example条件更新实体`record`包含的全部属性,null值会被更新,返回更新的条数 */ public int updateByExample(T record, Object example); / * 根据Example条件更新实体`record`包含的不是null的属性值,返回更新的条数 */ public int updateByExampleSelective(T record, Object example); 

使用方法

ExampleMapper内方法使用说明:

 Example example = new Example(UserModel.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("id","1"); criteria.orEqualTo("userName","evan11"); 
Example example = new Example(UserRole.class);//实例化 Example.Criteria criteria = example.createCriteria(); 
 Example example = new Example(UserModel.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("id","1"); criteria.orEqualTo("userName","evan11"); List<UserModel> userModels = userDao.selectByExample(example); 

最总输出的sql语句是

Preparing: SELECT id,user_name,user_phone FROM user WHERE ( ( id = ? and user_name = ? ) ) Parameters: 1(String), evan11(String) 

其中andCondition(String condition)方法支持手写条件,传入的字符串为最终的查询条件,如:length(f_user_id)<5

以及likeTo()的方法是不带百分号%的,需要自己对传入参数进行构建(加左like或者右like等)。

其余方法自行见源码,不再赘述。

ConditionMapper内方法使用说明:
所有方法均需要传入tk.mybatis.mapper.entity.Condition,Condition实际上继承自tk.mybatis.mapper.entity.Example,
源码中有三个方法:

 public Condition(Class<?> entityClass) { super(entityClass); } public Condition(Class<?> entityClass, boolean exists) { super(entityClass, exists); } public Condition(Class<?> entityClass, boolean exists, boolean notNull) { super(entityClass, exists, notNull); } 

其使用方法与Example类似

 Condition condition = new Condition(UserRole.class); Criteria criteria = condition.createCriteria(); criteria.andEqualTo("id","1"); criteria.orEqualTo("userName","evan11"); List<UserModel> userModels = userDao.selectByExample(example); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233863.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Win10 2004显示无法访问Internet小地球 却可以上网 的 简单解决办法「建议收藏」

    最简单的解决办法把下面的代码复制到记事本,并另存为为reg后缀名的文件(例如:修复网络.reg)双击打开并重启即可解决问题WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet]”ActiveDnsProbeContent”=”131.107.255.255″”ActiveDnsProbeContentV6″=”f

    2022年4月8日
    47
  • 557. Reverse Words in a String III

    557. Reverse Words in a String III

    2021年6月10日
    122
  • pycharm安装及配置教程_pycharm配置环境变量

    pycharm安装及配置教程_pycharm配置环境变量目录一、安装1.下载2.安装二、基本配置三、增加解释器四、字体大小调整五、常用快捷键一、安装1.下载pycharm下载地址:http://www.jetbrains.com/pych…

    2022年8月26日
    6
  • 惠普电脑有电脑管家吗_电脑管家检测硬件就蓝屏

    惠普电脑有电脑管家吗_电脑管家检测硬件就蓝屏据海外媒体WindowsLatest的报道,大量的Windows10用户的设备最近频繁出现蓝屏,多家硬件设备厂商均中招。联想电脑管家安全团队已证实暂不涉及联想设备的国内用户。同时提醒广大国内用户,暂停近期微软发布的任何更新业务(包括暂停通过Vantage应用程序进行BIOS更新),等待微软官方给出修复补丁。据悉该蓝屏问题是由于近期的一次更新造成,蓝屏(BSOD)错误将会阻止windows10设备的…

    2022年8月13日
    11
  • 如何设置Potplayer-x64

    如何设置Potplayer-x64如何设置Potplayer-x64本文章将记录如何从初始化进行Potplayer的设置安装官网下载x64版并安装,如果出现“OnlySupportWindowsXP”错误提示时可尝试卸载重装。安装结束时选择OpenCode以及…H/W…选项配置文件本地化设置在基本选项中选择“保存设置到ini文件”,该选项可以保留配置。皮肤设置将皮肤文件放到skin文件夹中,然后在右键皮肤菜单-图层式皮

    2022年9月14日
    0
  • 移动端开发需要注意事项

    移动端开发需要注意事项1.webkit内核中的一些私有的meta标签<metacontent=”width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0″name=”viewport”><metacontent=”yes”name=”apple-mobile-web-app-capable”>…

    2022年6月24日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号