当前位置: 首页 > news >正文

Mybatis、TKMybatis对比

文章目录

  • 1.Mybatis
    • (1)配置文件
    • (2)实体类
    • (3)Mapper
    • (4)mybatis-config.xml
  • 2.TKMybatis
    • (1)配置文件
    • (2)实体类
    • (3)Mapper
    • (4)mybatis-config.xml

1.Mybatis

(1)配置文件

  • mybatis.config-location=classpath:mybatis-config.xml,配置mybatis-config.xml路径,mybatis-config.xml中配置MyBatis基础属性,如果项目中配置了mybatis-config.xml文件需要设置该参数。
  • mybatis.mapper-locations=classpath*:mapper/**/*.xml,指定mapper文件夹
  • mybatis.type-handlers-package=geektime.spring.data.mybatisdemo.handler,不用再指定TypeHandler
  • mybatis.configuration.map-underscore-to-camel-case = true,将带有下划线的表字段映射为驼峰格式的实体类属性,省去了在mapper.xml文件中编写表字段列表与表实体类属性的映射关系,即resultMap。

(2)实体类

  • 使用 Mybatis 时,数据库表对应的实体类中,并没有使用任何注解
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Coffee {private Long id;private String name;private Money price;private Date createTime;private Date updateTime;
}

(3)Mapper

@Mapper
public interface CoffeeMapper {@Insert("insert into t_coffee (name, price, create_time, update_time)"+ "values (#{name}, #{price}, now(), now())")// 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler// #{price, typeHandler=geektime.spring.data.mybatisdemo.handler.MoneyTypeHandler}@Options(useGeneratedKeys = true, keyColumn="id", keyProperty="id")int save(Coffee coffee);@Select("select * from t_coffee where id = #{id}")@Results({// 默认会根据名字映射// map-underscore-to-camel-case = true 可以实现一样的效果// 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler@Result(id = true, column = "id", property = "id"),@Result(column = "create_time", property = "createTime"),@Result(column = "update_time", property = "updateTime")// 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler// @Result(column = "price", property = "price", typeHandler = geektime.spring.data.mybatisdemo.handler.MoneyTypeHandler.class),})Coffee findById(@Param("id") Long id);
}

(4)mybatis-config.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置 --><!-- 配置 --><settings><!-- 一级缓存默认开启,只在同一个sqlSession之间共享,方法必须在同一个事务内,才会支持,执行commit()方法时,会清空本地缓存 --><!-- 二级缓存默认开启,下面的配置可关闭,支持多个SqlSession之间共享缓存,如果两个SqlSession之间发生了更新操作,就不会去缓存拿数据了。如果在执行过程中,执行了多表操作,即如果A表和B表相关联,若对A表执行了更新操作,B表并不能够感知到,从而会拿到脏数据 --><setting name="cacheEnabled" value="false"/><!-- 日志实现 --><setting name="logImpl" value="LOG4J2"/></settings><typeAliases></typeAliases><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="name" value="mybatis"/> </plugin> </plugins>
</configuration>

2.TKMybatis

(1)配置文件

  • mybatis.config-location=classpath:mybatis-config.xml,配置mybatis-config.xml路径,mybatis-config.xml中配置MyBatis基础属性,如果项目中配置了mybatis-config.xml文件需要设置该参数。
  • mybatis.mapper-locations=classpath*:mapper/**/*.xml,指定mapper文件夹
  • mybatis.type-handlers-package=geektime.spring.data.mybatisdemo.handler,不用再指定TypeHandler

(2)实体类

  • TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时会报错。这时使用@Table为实体类指定表(这种对应规则为驼峰命名规则)。
@Data
@Table(name = "anc_company")  // 建立实体类和数据库表之间的对应关系
public class Company {@Id // 标记和数据库表中主键字段对应的实体类字段@Column(name = "company_name")  // 建立实体类字段和数据库表字段之间的对应关系@GeneratedValue(strategy = GenerationType.IDENTITY) // 通用Mapper在执行insert操作之后将数据库自动生成的主键值回写到实体类对象中private String companyName;@Column(name = "company_logo")private String companyLogo;@Column(name = "company_dec")@Transient  // 用于标记不与数据库表字段对应的实体类字段。private String companyDec;
}

(3)Mapper

public interface CompanyMapper extends BaseMapper<Company> {
}

(4)mybatis-config.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置 --><!-- 配置 --><settings><!-- 一级缓存默认开启,只在同一个sqlSession之间共享,方法必须在同一个事务内,才会支持,执行commit()方法时,会清空本地缓存 --><!-- 二级缓存默认开启,下面的配置可关闭,支持多个SqlSession之间共享缓存,如果两个SqlSession之间发生了更新操作,就不会去缓存拿数据了。如果在执行过程中,执行了多表操作,即如果A表和B表相关联,若对A表执行了更新操作,B表并不能够感知到,从而会拿到脏数据 --><setting name="cacheEnabled" value="false"/><!-- 日志实现 --><setting name="logImpl" value="LOG4J2"/><!-- 驼峰配置 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases></typeAliases><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="name" value="mybatis"/> </plugin> </plugins>
</configuration>

相关文章:

Mybatis、TKMybatis对比

文章目录1.Mybatis&#xff08;1&#xff09;配置文件&#xff08;2&#xff09;实体类&#xff08;3&#xff09;Mapper&#xff08;4&#xff09;mybatis-config.xml2.TKMybatis&#xff08;1&#xff09;配置文件&#xff08;2&#xff09;实体类&#xff08;3&#xff09;M…...

37了解高可用技术方案,如冗余、容灾

高可用性技术方案是指在系统设计和架构中采用一系列措施来确保系统在遇到各种故障和问题时仍能保持持续的可用性&#xff0c;避免因单点故障而导致系统宕机、数据丢失等问题。其中包括冗余和容灾技术。 冗余技术&#xff1a; 冗余技术是指通过增加系统组件的冗余来提高系统可靠…...

jdb调试问题集锦

https://bbs.kanxue.com/thread-210049.htm蓝铁 1 2017-8-25 19:40 4 楼 0 根据提示&#xff0c;可知&#xff0c;出错的地方是&#xff0c;android.app.ActivityThread.handleBindApplication(), 行4,400 查看源码可以发现&#xff0c;代码中指向的是app.onCreate() …...

要和文心一言来一把你画我猜吗?

想和文心一言来一把你画我猜吗&#xff1f; ChatGPT的爆火&#xff0c;让AI对话模型再次走入大众视野。大家在感叹ChatGPT的智能程度时&#xff0c;总会忍不住想&#xff1a;如果我们也有自己的AI对话模型就好了。在社会的压力下&#xff0c;国内的厂商和研究机构也纷纷做出尝试…...

delete[] p->elems和free(p->elems)有什么区别?

delete[]和free()都是释放内存的函数&#xff0c;但它们具有不同的使用方法和适用情况。 delete[] 通常用于释放C中动态分配的数组空间。在使用new[]运算符分配内存时&#xff0c;应使用delete[]运算符来释放分配的内存。delete[] 运算符会调用每个数组元素的析构函数&#xf…...

CAS问题

CAS&#x1f50e;什么是CAS&#x1f50e;伪代码解析&#x1f50e;CAS是如何实现原子性的&#x1f50e;CAS的应用&#x1f33b;实现原子类&#x1f33b;实现自旋锁&#x1f50e;ABA问题&#x1f33b;ABA问题可能引起的BUG&#x1f33b;ABA问题的解决方案&#x1f50e;结尾&#…...

网络编程socket(下)

目录 一、TCP网络程序 1.1 服务端初始化 1.1.1 创建套接字 1.1.2 服务端绑定 1.1.3 服务端监听 1.2 服务端启动 1.2.1 服务端获取连接 1.2.2 服务端处理请求 1.3 客户端初始化 1.4 客户端启动 1.4.1 发起连接 1.4.2 发起请求 1.5 网络测试 1.6 单执行流服务端的…...

华为OD机试题【打折买水果】用 C++ 编码,速通

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:打折买水果 题目 有 m m m…...

JSON 数据类型

JSON 数据类型 JSON 格式支持以下数据类型&#xff1a; 类型描述数字型&#xff08;Number&#xff09;JavaScript 中的双精度浮点型格式字符串型&#xff08;String&#xff09;双引号包裹的 Unicode 字符和反斜杠转义字符布尔型&#xff08;Boolean&#xff09;true 或 fal…...

Python函数简介

Python是一种高级编程语言&#xff0c;它的函数是其中一个非常重要的特性。在程序中&#xff0c;函数是一段被命名的代码块&#xff0c;它可以接受输入并且返回输出。本篇文章将介绍Python函数的基本概念、定义、调用和参数。 基本概念 在Python中&#xff0c;函数是由def关键…...

一文读懂 mysql 为什么要两阶段提交以及两阶段提交原理

文章目录 为什么要两阶段提交redo log与binlog两份日志之间的逻辑不一致,会出现什么问题?两阶段提交是怎么保证逻辑一致的呢?当 binlog 写完,redo log 还没 commit 前发生 crash,那崩溃恢复后 MySQL 如何处理?redo 与 binlog 的刷盘时机MySQL 的双 1 配置能否只用 redo l…...

启动Hadoop报错【Error: JAVA_HOME is not set and could not be found.】

当用了一下午从0安装上Hadoop兴奋的启动的时候&#xff01; Error: JAVA_HOME is not set and could not be found. 他告诉我JAVA_HOME 没被找到&#xff1f; 我明明安装了java的&#xff0c;为什么找不到&#xff1f; java -version看了下发现是没问题的 解决&#xff1a; 后…...

《MySQL系列-InnoDB引擎35》索引与算法-B+树索引的使用

B树索引的使用 1 不同应用中B树索引的使用 在OLTP中&#xff0c;B树索引建立后&#xff0c;对该索引的使用应该只是通过该索引取得表中少部分的数据。这时建立B树索引才是有意义的&#xff0c;否则即使建立了&#xff0c;优化器也可能不选择使用索引。 在OLAP中&#xff0c;…...

【EHub_tx1_tx2_E100】不止科技NVISTAR ROC 300激光雷达Ubuntu18.04+ROS1ROS2 评测

介绍NVISTAR 的二维DTOF激光雷达 ROC 300在EHub_tx1_tx2_E100载板&#xff0c;TX1核心模块环境&#xff08;Ubuntu18.04&#xff09;下测试ROS1驱动和ROS2的驱动&#xff0c;打开使用RVIZ 查看点云数据&#xff0c;本文的前提条件是你的TX1里已经安装了ROS1版本&#xff1a;Mel…...

C语言函数大全--d开头的函数

C语言函数大全 本篇介绍C语言函数大全–d开头的函数 1. detectgraph 1.1 函数说明 函数声明函数功能void detectgraph(int *graphdriver, int *graphmode);通过检测硬件确定图形驱动程序和模式 1.2 演示示例 #include <graphics.h> #include <stdlib.h> #incl…...

基于springboot实现福聚苑社区团购演示【项目源码】

基于springboot实现福聚苑社区团购演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#…...

动静态库的制作

文章目录&#xff1a;什么是程序库&#xff1f;动态链接和静态链接动静态库的认识静态库的创建与使用创建使用动态库的创建与使用创建使用什么是程序库&#xff1f; 程序库&#xff1a;一般是软件作者为了发布方便、替换方便或二次开发目的&#xff0c;而发布的一组可以单独与应…...

QMS-云质-质量软件-客诉,为什么应该用两段式来处理

-云质QMS原创文章&#xff0c;转载请注明来源- 客户满意度是决定企业是否能够基业长青的关键因素之一。 如果客诉处理的不好&#xff0c;会极大影响客户的满意程度。 通常处理客诉分为两个阶段。 第一个阶段是快反遏制&#xff0c;想方设法快速答复和解决客户提出的问题&…...

JS:关于邮箱的正则表达式及规则

常用正则表达式—邮箱&#xff08;Email&#xff09; 要验证一个字符串是否为邮箱的话&#xff0c;首先要了解邮箱账号的格式。我尝试过在网上找出一个标准的格式&#xff0c;但是很遗憾我没有找到。我也尝试使用RFC标准来判断邮箱的格式&#xff0c;但是也没有结果。网上些博…...

两句话,ChatGPT帮我写一个打飞机的游戏

大家好&#xff0c;我是全村的希望今天的主题是让 chatGPT 来帮我们写一个打飞机的游戏记得我刚学 Python 的时候&#xff0c;看的那本很经典的入门书《Python 编程&#xff1a;从入门到实践》&#xff0c;里面就有小项目就是教你编写一个打飞机的游戏我那时候是对着书一个一个…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...