mybatis与jpa

news2024/11/18 3:47:37

1、官方文档

mybatis:mybatis-spring –

jpa:https://springdoc.cn/spring-data-jpa/

应用文档 



jpa详解_java菜鸟1的博客-CSDN博客

JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用

2、使用比较

mybatis一般用于互联网性质的项目,后期项目性能调优比较方便,配置输出日志,直接输出sql便于线上排查问题,之前一直被诟病的手写sql,单表的有些组件都封装了,如mybatis-plus、tkmybatis,如果实体和表字段没建立对应关系,实体和表都全了但是对应关系有缺失,缺失的不会返回,还有一种就是由于粗心导致的实体或者表不全,这种就麻烦些,程序运行才能发现。

jpa一般适用于中小型项目,配置输出日志后,输出sql不好排查,直接把表字段转义为不方便查阅的字段,不直观,相比于mybatis,如果实体少了不全,程序启动时就会报错,相当于提前暴露了问题。它提供api封装好了对单表的操作,直接调用即可,不需要额外引进组件。

3、实际使用

日常整合springboot组件三步骤,引依赖--配置配置文件--有需要扩展的可以扩展配置类,使用注解,调用api。

jpa

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
     </dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
</dependency>

 hibernate-jpamodelgen提供了一个方便获取实体类属性名的方法,当数据库或实体类的属性名改变后,不用去变动其他层代码。

Spring Jpa 自动根据实体类生成资源类_辉呀的博客-CSDN博客_jpamodelgen

实体类使用注解 

接口层

接着调用就完事了

条件查询

可参考:SpringDataJPA中使用Specification进行表连接多条件分页动态查询 - 代码先锋网

https://www.cnblogs.com/ydmysm/p/hhb_pageQuery.html

 

mybatis

  <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!-- mybatis启动器 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.starter.version}</version>
            </dependency>
            <!--mybatis-plus启动器-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-core</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>

配置xml

<select id="getAmacRegisterSearchResults" resultType="cn.go.dao.irmcenter.result.Asult">
		SELECT DISTINCT
			tiar.`id`,
			tiar.`name`,
			tiar.`xx_name`,
			tiar.`xx_num`
		FROM
			`ts_xx_xc_rxx` tiar
		<where>
			<if test="keyword != null">
			tiar.`name` LIKE #{keyword}
			OR tiar.`pxe` LIKE #{keyword}
			OR tiar.`xum` LIKE #{keyword}
			</if>
		</where>
	</select>
<update id="batchUpdateMs">
		UPDATE 
			`ts_xia` 
		SET 
			`name` = 
			<foreach collection="me" item="me" separator=" " open="CASE id" close="END">
				WHEN #{me.id} THEN #{me.name} 
			</foreach>, 
			`fans` = 
			<foreach collection="med" item="me" separator=" " open="CASE id" close="END">
				WHEN #{me.id} THEN #{me.fans} 
			</foreach>,
			`le` = 
			<foreach collection="me" item="me" separator=" " open="CASE id" close="END">
				WHEN #{me.id} THEN #{me.level} 
			</foreach>
		WHERE 
			`id` IN 
			<foreach collection="me" item="me" separator="," open="(" close=")">
				#{me.id} 
			</foreach>
	</update>
<update id="updateinfo" parameterType="xxxroupParam">
        update
        <include refid="xxx"/>
        <set>
            <if test="oor!=null">
                oor = #{oor},
            </if>
            <if test="updateDate!=null">
                update_date = #{updateDate},
            </if>
            <if test="status==null">
                status != -1
            </if>
            <if test="status!=null">
                status = #{status}
            </if>
            <if test="sequence!=null">
                sequence = #{sequence},
            </if>
            <if test="mt!=null">
                mt = #{mt}
            </if>
        </set>
        where id = #{mad}
    </update>
  <insert id="bind" parameterType="java.util.List">
        insert into <include refid="nod"/> (bd,nd,rd,opr,sts)
        values
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.bd},#{item.nd},#{item.rd},#{item.opr},#{item.st})
        </foreach>
    </insert>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix4.0 Web页面配置 - 聚合图形的实现

目录 1、主机组Host groups配置 创建主机组 ​编辑 将一个主机添加至刚才创建的主机里面 2、用户参数UserParameter设置 示例&#xff1a; 添加一个参数&#xff1a;show.host.messages 模拟zabbix模板里面的参数再添加一个userparameter 3、触发器设置 示例&#xff1a; …

浏览器缓存之强缓存和协商缓存

为什么需要缓存? - 缓存的优点: 1.减少对服务器的访问次数,减轻了服务器的压力 2.节省用户网络带宽(就是省钱,带宽都是按流量算钱的) 3.从缓存读取更匀速减少等待优化了用户体验 - 缓存的缺点 资源被缓存后用户不能及时获取不到最新的资源,所以缓存不能乱用 强缓存 涉…

TypeScript快速上手语法+结合vue3用法

TypeScript快速上手语法结合vue3用法 前言&#xff1a; 本篇内容不涉及TypeScript安装以及配置&#xff0c;具体安装及配置篇可以看下面目录&#xff0c;本篇只涉及TypeScript语法相关内容&#xff0c;及结合vue3的用法。不讲废话&#xff0c;简单直接直接开撸。 目录 Type…

理想汽车--笔试(算法)

笔试分为选择题和编程题&#xff0c;选择题考的很全面&#xff0c;包括概率论、数据库、机器学习、python、数据结构。 选择题 1.在某些规划的分类器中&#xff0c;依据规划质量的某种度量对规划排序&#xff0c;保证每一个测试记录都是由覆盖它的‘最好的’规格来分类&#…

LeetCode-54. 螺旋矩阵

题目来源 54. 螺旋矩阵 题目思路 while循环只遍历"环"&#xff0c;不成环就不遍历了 四个边界 上边界 top : 0下边界 bottom : matrix.length - 1左边界 left : 0右边界 right : matrix[0].length - 1 矩阵不一定是方阵 top < bottom && left < r…

使用git从github.com中clone一个项目的源代码---git与github的安装配置与使用入门

本文目录git简介github简介git的安装github的配置1&#xff0c;注册github帐号2&#xff0c;登录github3&#xff0c;配置git4&#xff0c;生成密钥5&#xff0c;在github中添加密钥6&#xff0c;使用git从github.com中clone一个项目的源代码git简介 Git是一个开源的版本控制管…

Java知识复习(六)常见的设计模式(单例、原型、工厂)

前言 发现无论是什么设计模式&#xff0c;其实总的原则就是减少耦合&#xff0c;增加可复用代码&#xff0c;使系统更易于扩展 参考书籍&#xff1a;《秒懂设计模式》 1、单例模式&#xff08;Singleton&#xff09; 单例模式&#xff1a;即单一的实例&#xff0c;同时提供几…

【java web篇】项目管理构建工具Maven简介以及安装配置

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【离线数仓-8-数据仓库开发DWD层-交易域相关事实表】

离线数仓-8-数据仓库开发DWD层-交易域相关事实表离线数仓-8-数据仓库开发DWD层-交易域相关事实表一、DWD层设计要点二、交易域相关事实表1.交易域加购事务事实表1.加购事务事实表 前期梳理2.加购事务事实表 DDL表设计分析3.加购事务事实表 加载数据分析1.首日全量加购的数据加载…

基于APRX并行架构的高速QPSK解调实现(Matlab仿真篇)

由于QPSK系统下变频之后的信号中频为720MHz,信息符号速率为500Mbps,因此,采用传统的串行解调方案已无法在FPGA中实现解调。因此,本方案采用基于APRX并行架构实现对高速率的QPSK解调。如图1所示,为并行全数字QPSK接收机实现架构。 图1 并行全数字QPSK接收机实现架构 1 高速…

Golang 接口笔记

基本介绍接口是一个数据类型&#xff0c;可以定义一组方法&#xff0c;但都不需要实现。并且interface中不能包含任何变量。到某个自定义类型要使用的时候&#xff0c;再根据具体情况把这些方法实现出来语法type 接口名 interface {method1(参数列表) 返回值列表method2(参数列…

UG NX二次开发(C#)-CAM-点击插件自动进入CAM模块

文章目录 1、前言2、调用CAM模块错误2、进入加工模块1、前言 UG NX软件中CAM模块作为一个很重要的,也是其特别亮点的功能模块,能实现车、铣、磨、钻等加工工艺编程,但是由于其是通用性比较强,对于专业上的可能不能完全满足要求,这就要求我们在CAM模块下进行二次开发。我们…

操作系统核心知识点整理--进程篇

操作系统核心知识点整理--进程篇什么是系统调用进程篇什么是进程什么是线程从一次fork调用看linux进程和线程的本质区别小结用户级线程和内核级线程的区别进程的状态进程的切换进程调度并发问题死锁参考本文主要面向应用层软件开发人员整理一篇必须了解的操作系统核心知识图谱&…

maya多边形顶点变形批量传递方法

一、问题描述 做项目时&#xff0c;对于重复更改相同模型的顶点位置需要大量重复操作&#xff0c;maya默认提供了多边形属性传递的方法&#xff0c;如下图&#xff1a; 但一次只能执行一次&#xff0c;并且带有大量历史节点&#xff0c;此方式的好处是&#xff0c;可以实现实…

《零成本实现Web自动化测试--基于Selenium》 Selenium-RC

一. 简介 Selenium-RC可以适应更复杂的自动化测试需求&#xff0c;而不仅仅是简单的浏览器操作和线性执行。Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例&#xff0c;例如读写文件、查询数据库和E-mail邮寄测试报告。 当测试案例遇到selenium-IDE不支持的逻辑…

python的所有知识点+代码+注释,不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…

HTML创意动画代码

目录1、动态气泡背景2、创意文字3、旋转立方体1、动态气泡背景 <!DOCTYPE html> <html> <head><title>Bubble Background</title><style>body {margin: 0;padding: 0;height: 100vh;background: #222;display: flex;flex-direction: colum…

SpringCloud————Eureka概述及单机注册中心搭建

Spring Cloud Eureka是Netflix开发的注册发现组件&#xff0c;本身是一个基于REST的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server&#xff1a;服务器端。提供服务的注册和发现…

kubernetes 1.26.1 Etcd部署(外接)保姆级教程

目录 部署etcd前期准备 机器信息 升级内核 系统配置 部署容器运行时Containerd 安装crictl客户端命令 配置服务器支持开启ipvs的前提条件 安装 kubeadm、kubelet 和 kubectl 安装部署etcd 1.将 kubelet 配置为 etcd 的服务管理器 2.为 kubeadm 创建配置文件 3. 生成…

2023年网络安全某市赛竞赛任务书

竞赛任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 数据库服务渗透测试 100分钟 150 任务二 Windows操作系统渗透测试 200 任务三 Linux操作系统渗透测试 150 任务四 Web安…