WEB04MyBatis

Mybatis

mybatis查询

准备

准备工作

  • 在目前的数据库中添加一张数据表emp

  • 将资料中提供的day04-01-mybatis导入的目前的工程中

  • 修改配置文件中的数据库的账户和密码

  • 观察实体类中的属性和数据表中的字段的对应关系

查询结果封装

查询所有

  • SQL语句

    select * from emp;

  • 接口方法

    @Select("select * from emp")
    
    public List<Emp> findAll();

数据封装

  • 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装。

  • 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装。

  • 开启驼峰命名:如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射。

    #开启驼峰命名自动映射,即从数据库字段名 a_column 映射到Java 属性名 aColumn。

    <setting name="mapUnderscoreToCamelCase" value="true"/>

  • 起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。

    @Select("select id, username, password, name, gender, image, job, entrydate ed, dept_id deptId, create_time createTime, update_time updateTime from emp")
    
    public Emp findAll();

  • 手动结果映射:通过 @Results及@Result 进行手动结果映射。

    @Select("select * from emp")
    
    @Results({ @Result(column = "dept_id", property = "deptId"), @Result(column = "entrydate", property = "ed") })
    
    public Emp findAll();

条件查询

查询(条件查询)

  • SQL语句

    select * from emp where name = '张三丰' and gender = 1 and entrydate between '2010-01-01' and '2020-01-01 ';

  • 接口方法

    @Select("select * from emp where name = #{name} and gender = #{gender} and entrydate between #{begin} and #{end}")
    
    List<Emp> findList(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);

@Param

  • @Param 标注在方法参数的前面,用于声明参数在#{}中的名字

  • 后面SpringBoot2.x整合mybatis之后,这个注解可以不再添加

模糊查询

查询(模糊查询)

  • SQL语句

    select * from emp where name like '%张%' and gender = 1 and entrydate between '2010-01-01' and '2020-01-01 ';

  • 接口方法(性能低、不安全、存在SQL注入问题)

    @Select("select * from emp where name like '%${name}%' and gender = #{gender} and entrydate between #{begin} and #{end}")
    
    List<Emp> findList(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);
    
    @Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and entrydate between #{begin} and #{end}")
    
    List<Emp> findList(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);

xml书写sql

XML映射文件

  • 使用Mybatis的注解,主要是来完成一些简单的增删改查功能。

  • 如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

  • 官方说明:入门_MyBatis中文网

规范

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。

  • XML映射文件的namespace属性为Mapper接口全限定名一致。

  • XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。

经典报错

  • 对于同一个方法,XML和注解中同时为其编写了sql

  • 约定好的对应关系有误

  • MybatisX 是一款基于 IDEA 的快速开发Mybatis的插件,为效率而生

动态sql

介绍

动态SQL

  • 随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。

<if> <where> <set>

<if>

  • <if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

  • <where>:where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR。

动态更新员工信息,如果更新时传递有值,则更新;如果更新时没有传递值

  • <set>:动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)

<foreach>

<foreach>

  • SQL语句

    delete from emp where id in (1,2,3);

  • 接口方法

    //批量删除

  • public void deleteByIds(@Param("ids") List<Integer> ids);

  • XML映射文件

    <delete id="deleteByIds">
    
    delete from emp where id in
    
    <foreach collection="ids" item="id" separator="," open="(" close=")">
    
    #{id}
    
    </foreach>
    
    </delete>

属性

  • collection:集合名称

  • item:集合遍历出来的元素/项

  • separator:每一次遍历使用的分隔符

  • open:遍历开始前拼接的片段

  • close:遍历结束后拼接的片段

<sql><include>

sql片段(了解)

  • <sql>:定义可重用的 SQL 片段。

  • <include>:通过属性refid,指定包含的sql片段。

配置文件

SqlMapConfig.xml

主配置文件

  • settings:控制一些全局配置项的开闭

  • mappers:用于指定Mapper接口的位置

  • environments: 配置事务管理器和数据库连接信息

数据库连接池

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)

  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

  • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势

  • 资源重用

  • 提升系统响应速度

  • 避免数据库连接遗漏

标准接口:DataSource

  • 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。

  • 功能:获取连接 归还连接

常见产品

  • Druid(德鲁伊): 阿里巴巴提供的数据库连接池技术,国内使用率很高,提供了完善的监控机制

  • HikariCP: 日本人开发的连接池技术,号称性能之王,速度最快,SpringBoot2.0默认使用此连接池

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Oauth2.0的OpenFeign远程调用

目录 前言 1.引入openfeign相关依赖 2.开启openFeign远程调用&#xff0c;在启动类头加上注解即可 3. 提供远程调用接口&#xff0c;接口名称必须与controler名称保持一致 4.远程调用关键代码 4.1 注入restTemplate 4.2 配置拦截器 4.3 设置请求头 4.4 获取请求结果 4.5 远…

两次叛国投敌,没有祸及子孙反而家族长盛不衰的传奇

这个人就是韩国国王韩王信&#xff0c;汉朝八大异姓王之一。 第一次叛国投敌&#xff0c;发生在楚汉争霸时期。有一次他的军队被项羽包围&#xff0c;于是选择了投降。不过&#xff0c;这是权宜之计&#xff0c;不久就借机回到刘邦阵营。 第二次叛国投敌&#xff0c;发生在西…

openssl交叉编译-移植ARM

OpenSSL是一个开源的密码学工具包&#xff0c;提供了一组用于网络安全的加密和解密算法、协议以及相关工具的库&#xff0c;它通过提供多种加密算法、协议和工具&#xff0c;为网络通信和数据存储提供了强大的安全保障。 主要功能 加密和解密&#xff1a; OpenSSL提供了多种对…

字节码编程javassist之结合hotswap在运行期动态修改方法返回值

写在前面 本文看下如何通过javassist结合hotswap在运行期动态修改方法的返回值。 1&#xff1a;代码 要修改的代码 public class ApiTest {public String m1(String info) {return "info is: " info;} }javasssit代码 package com.dahuyou.javassist.huohuo;im…

娱乐圈新瓜《庆余年》二皇子刘端端被曝“深夜秘事”

《庆余年》外&#xff0c;二皇子刘端端的“深夜冒险”网友笑称&#xff1a;权谋剧外更有戏话说《庆余年》里的二皇子李承泽&#xff0c; 那可是权谋与颜值并存的典范&#xff0c;但戏外的刘端端&#xff0c; 最近却成了“深夜冒险家”&#xff0c;让一众吃瓜群众笑中带惊&…

CNN文献综述

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习领域中的一种重要模型&#xff0c;主要用于图像识别和计算机视觉任务。其设计灵感来自于生物学中视觉皮层的工作原理&#xff0c;能够高效地处理图像和语音等数据。 基本原理…

JVM专题之性能优化

运行时优化 方法内联 > 方法内联,是指 **JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身** ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 > > **注:** > > * **C++的inline属于编译后内联,…

特殊用途二极管+二极管故障检测+三极管(BJT)的工作原理+定时器的使用(小灯定时闪烁实现)

2024-7-5&#xff0c;星期五&#xff0c;17:27&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油&#xff01;&#xff01;&#xff01; 今日完成模电自选教材第二章内容的学习&#xff…

Linux-C语言实现一个进度条小项目

如何在linux中用C语言写一个项目来实现进度条&#xff1f;&#xff08;如下图所示&#xff09; 我们知道\r是回车&#xff0c;\n是换行&#xff08;且会刷新&#xff09; 我们可以用 \r 将光标移回行首&#xff0c;重新打印一样格式的内容&#xff0c;覆盖旧的内容&#xff0c;…

二重积分 - 包括计算方法和可视化

二重积分 - 包括计算方法和可视化 flyfish 计算在矩形区域 R [ 0 , 1 ] [ 0 , 2 ] R [0, 1] \times [0, 2] R[0,1][0,2] 下&#xff0c;函数 z 8 x 6 y z 8x 6y z8x6y 的二重积分。这相当于计算曲面 z 8 x 6 y z 8x 6y z8x6y 与 xy 平面之间的体积。 二重积分…

网页计算器的实现

简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript &#xff0c;用于检验web前端基础水平。 开发环境&#xff1a;Visual Studio Code开发工具&#xff1a;HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…

Chapter11让画面动起来——Shader入门精要学习笔记

Chapter11让画面动起来 一、Unity Shader中的内置变量&#xff08;时间篇&#xff09;二、纹理动画1.序列帧动画2.滚动背景 三、顶点动画1.流动的河流2.广告牌3.注意事项①批处理问题②阴影投射问题 一、Unity Shader中的内置变量&#xff08;时间篇&#xff09; Unity Shader…

Chiasmodon:一款针对域名安全的公开资源情报OSINT工具

关于Chiasmodon Chiasmodon是一款针对域名安全的公开资源情报OSINT工具&#xff0c;该工具可以帮助广大研究人员从各种来源收集目标域名的相关信息&#xff0c;并根据域名、Google Play应用程序、电子邮件地址、IP地址、组织和URL等信息进行有针对性的数据收集。 该工具可以提…

window系统openssl开发环境搭建(VS2017)

window系统openssl开发环境搭建 VS2017 一、下载openssl二、安装openssl三、openssl项目配置3.1 配置include文件3.2 配置openssl动态库四、编写openssl测试代码五、问题总结5.1 问题 一5.2 问题二一、下载openssl https://slproweb.com/products/Win32OpenSSL.html 根据自己…

如何查看MCU编译生成的elf(out)文件内容

一般地&#xff0c;我们想要知道单片机程序编译完后的结构我们可以查看map文件或者是elf/out文件&#xff0c;map文件不能看函数的汇编格式&#xff0c;只能查看编译完成后变量、代码的地址和占用空间大小&#xff0c;而elf文件里面更加详细&#xff0c;还包含了函数的汇编&…

CobaltStrike的内网安全

1.上线机器的Beacon的常用命令 2.信息收集和网站克隆 3.钓鱼邮件 4.CS传递会话到MSF 5.MSF会话传递到CS 1上线机器的Beacon的常用命令 介绍&#xff1a;CobaltStrike分为服务端和客户端&#xff0c;一般我们将服务端放在kali&#xff0c;客户端可以在物理机上面&#xff0…

跨境人最怕的封店要怎么规避?

跨境人最怕的是什么&#xff1f;——封店 造成封店的原因很多&#xff0c;IP关联、无版权售卖、虚假发货等等&#xff0c;其中IP关联这个问题导致店铺被封在跨境商家中简直是屡见不鲜 IP关联&#xff0c;是指被海外平台检测到多家店铺开设在同一个站点上的情况。我们知道有些…

您的私人办公室!-----ONLYOFFICE8.1版本的桌面编辑器测评

随时随地创建并编辑文档&#xff0c;还可就其进行协作 ONLYOFFICE 文档是一款强大的在线编辑器&#xff0c;为您使用的平台提供文本文档、电子表格、演示文稿、表单和 PDF 编辑工具。 网页地址链接&#xff1a; https://www.onlyoffice.com/zh/office-suite.aspxhttps://www…

“拆分盘投资:机遇与风险并存

一、引言 随着互联网技术的日新月异&#xff0c;金融投资领域迎来了前所未有的变革&#xff0c;其中拆分盘作为一种新兴的投资模式&#xff0c;正逐渐进入公众的视野。其独特的价值增长逻辑和创新的投资机制&#xff0c;为投资者开辟了新的财富增值渠道。本文旨在深入探讨拆分…

tinyshop商城学习

1、使用badboy屏幕录制工具&#xff0c;获得服装购物业务的结果&#xff0c;生成.jmx文件 2、在JMeter中新建线程组&#xff0c;导入.jmx文件 3、完成进入商城&#xff0c;登录&#xff0c;服装页面进入&#xff0c;随机选择服装&#xff0c;添加购物车&#xff0c;开始结算&…