Mybatis对参数的处理

环境配置

项目结构

在这里插入图片描述

导入依赖

<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.projectLombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency>
</dependencies>

jdbc.properties文件

方便给mybatis配置文件设置值

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hqyj03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=Asia/Shanghai
password=yjg
username=root

mybatis配置文件

常见的配置项

在 MyBatis 的配置文件(通常是 mybatis-config.xml)中,可以配置多个标签来定义 MyBatis 的行为和功能。以下是常见的一些 <configuration> 标签及其含义:

  1. <properties>:用于定义配置文件中使用的属性。
  2. <settings>:用于设置 MyBatis 的全局配置项,如开启缓存、启用自动生成主键等。
  3. <typeAliases>:用于设置类型别名,简化在映射文件中的类型引用。
  4. <typeHandlers>:用于配置类型处理器,用于在 Java 对象和数据库列之间进行类型转换。
  5. <objectFactory>:用于指定创建结果对象的工厂方法。
  6. <plugins>:用于配置插件,可以在 MyBatis 的执行过程中添加额外的功能或扩展。
  7. <environments>:用于配置不同的数据库环境,包括数据源、事务管理器等。
  8. <databaseIdProvider>:用于根据数据库厂商的不同选择不同的语句。
  9. <mappers>:用于注册映射器接口或者映射文件,让 MyBatis 能够找到它们并加载。

添加配置项一

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

是 MyBatis 的配置项,用于设置是否将数据库中的下划线命名转换为驼峰命名。
默认情况下,MyBatis 会将数据库中的下划线命名方式(例如user_name)映射到 Java 对象的驼峰命名方式(例如userName)。
如果将value值 设置为 false(默认值),则不会进行自动的下划线到驼峰的转换,需要在映射文件或代码中手动指定对应的字段名称,数据库表字段和 Java 类中的属性名称需要保持一致。

添加配置项二

<setting name="logImpl" value="STDOUT_LOGGING"/> 

是 MyBatis 的配置项,用于设置 MyBatis 的日志输出实现。
在 MyBatis 中,可以通过配置不同的日志输出实现来记录 MyBatis 的运行日志,包括 SQL 语句、参数值、执行时间等信息。
将日志输出到标准输出(控制台)上,方便开发者在控制台中查看日志信息。这是 MyBatis 内置的一个基于 Java 标准库的日志输出实现。
除了 “STDOUT_LOGGING”,MyBatis 还提供了其他的日志输出实现选项,例如:

SLF4J_LOGGING: 将日志输出到 SLF4J(Simple Logging Facade for Java)框架,可以配合各种日志框架(如 Logback、Log4j、Log4j2)使用。LOG4J2_LOGGING: 将日志输出到 Log4j2 日志框架。	COMMONS_LOGGING: 将日志输出到 Apache Commons Logging 日志框架。LOG4J_LOGGING: 将日志输出到 Log4j 1.x 日志框架。JDK_LOGGING: 将日志输出到 Java 标准库的 java.util.logging 包。

添加配置项三

<!--设置映射类型别名--><typeAliases><!--设置pojo包下的类型别名--><package name="com.yjg.mybatis.pojo"/></typeAliases>

使用 <typeAliases> 元素来设置映射类型别名。

类型别名的作用是为 Java 类型(通常是实体类)指定一个简短的别名,以便在 XML 映射文件中使用这些别名来引用相应的类型。

<package name="com.yjg.mybatis.pojo"/> 表示将 com.yjg.mybatis.pojo 包下的所有类都注册为类型别名。

假设在 com.yjg.mybatis.pojo 包中有一个叫做 User 的类,它的完整类名是 com.yjg.mybatis.pojo.User。通过上述配置,我们可以在 XML 映射文件中使用 <User> 来引用该类,而无需使用完整的类名 com.yjg.mybatis.pojo.User

配置文件完整内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--在configuration配置内容时,有顺序限制--><configuration><!--读取jdbc.properties配置文件--><properties resource="jdbc.properties"></properties><settings><!--配置sql日志打印--><setting name="logImpl" value="STDOUT_LOGGING"/><!--下划线驼峰映射stu_name映射stuName--><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings><!--设置映射类型别名--><typeAliases><!--设置pojo包下的类型别名--><package name="com.yjg.mybatis.pojo"/></typeAliases><!--mybatis环境,default属性指定一个环境--><environments default="development"><!--id属性自定义的环境唯一标识符--><environment id="development"><!--指定使用jdbc事务管理--><transactionManager type="JDBC"/><!--使用mybatis内部带连接池功能的数据源--><dataSource type="POOLED"><!--获取配置驱动--><property name="driver" value="${driver}"/><!--获取配置url--><property name="url" value="${url}"/><!--获取配置账号--><property name="username" value="${username}"/><!--获取配置密码--><property name="password" value="${password}"/></dataSource></environment></environments><!--映射器,映射器的 XML 映射文件包含了 SQL 代码和映射定义信息--><mappers><mapper resource="com/yjg/mybatis/mapper/StudentMapper.xml"/></mappers>
</configuration>

编写代码

数据库代码

CREATE TABLE `student` (`stu_id` int(11) NOT NULL AUTO_INCREMENT,`stu_name` varchar(255) DEFAULT NULL,`stu_age` varchar(255) DEFAULT NULL,`stu_salary` decimal(10,2) DEFAULT NULL,`stu_birth` date DEFAULT NULL,`create_time` datetime DEFAULT NULL,PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

数据显示
在这里插入图片描述

实体类

import lombok.Data;
import java.util.Date;
@Data
//@Alias 注解是 MyBatis 提供的一个注解,用于为类或接口指定一个别名。
//@Alias("s")
public class Student {private Integer stuId;private String  stuName;private Integer stuAge;private Double  stuSalary;private Date  stuBirth;private Date createTime;
}

接口文件

public interface StudentMapper {//插入用户int insertStudent();//查询全部类型List<Student> queryStudent();//通过id查询学生,传递单个参数Student queryStudentById(Integer id);/*通过名字和age进行查询1.方法中的参数会将存储到map集合中,key值设置为arg0 , arg1.....或者设置为param1, param2. ...2.sql语句中是通过#{map的key值}来获取到参数值,例如#{arg0}3.可以通过@Param注解更改参数在map中的key@Param("name")可以修改名称*/Student queryStudentByNameAndAge(@Param("name") String name,@Param("age") int age);
}

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yjg.mybatis.mapper.StudentMapper"><insert id="insertStudent">insert into student values(null, 'zhangsan',18,' 200','2020-01-01 ' , now())</insert><select id="queryStudent" parameterType="integer" resultType="Student">select * from student;</select><!--拿到方法的形参,单个参数,#{id}--><select id="queryStudentById" resultType="Student">select * from student where stu_id=#{id}</select><!--拿到参数的值,多个参数的时候--><select id="queryStudentByNameAndAge" resultType="student">select * from student where stu_name=#{name} and stu_age=#{age};</select></mapper>

在 MyBatis 中,类型别名是对大小写不敏感的。无论是使用大写、小写或混合大小写,都可以正确地引用对应的实体类。如果使用使用 <typeAliases> 元素来设置映射类型别名。将包名 com.yjg.mybatis.pojo 下的 Student 类设置为类型别名,那么在映射文件中使用 studentStudent 都是可以的,并且都会正确地映射到对应的实体类。

映射文件参数

  1. 使用 #{paramName} 占位符:在 SQL 语句中使用 #{paramName} 占位符来表示参数。当调用映射器接口方法时,MyBatis 将自动解析 SQL 语句,并根据方法参数的名称和注解来匹配占位符和参数,此时MyBatis 使用预编译的方式执行 SQL 语句,将实际的参数值填充到占位符处,并执行查询或更新操作。

  2. 使用 ${paramName} 占位符:在 SQL 语句中使用 ${paramName} 占位符来表示参数。这种方式不会进行预编译,而是直接将参数的值替换到 SQL 语句中。存在 SQL 注入的风险,应谨慎使用。

  3. 使用 @Param 注解:在方法参数上使用 @Param("paramName") 注解来指定参数的名称。在映射文件中可以通过参数名称来引用相应的参数

  4. <select><update><insert><delete> 等操作标签中,可以通过 parameterType 属性来明确指定传入参数的类型。该属性用于告诉 MyBatis 针对具体操作需要接收哪种类型的参数。

测试方法

public class Test1 {SqlSession sqlSession;@Beforepublic void test1() throws Exception{InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory build = builder.build(inputStream);sqlSession = build.openSession(true);}//    添加数据@Testpublic void test2(){StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);int i = mapper.insertStudent();System.out.println(i);}//    查询所有学生@Testpublic void test3(){StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);List<Student> students = mapper.queryStudent();students.forEach(System.out::println);}//    根据id查询@Testpublic void test4(){StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student = mapper.queryStudentById(2);System.out.println(student);}//    根据多个参数查询@Testpublic void test5(){StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);Student student = mapper.queryStudentByNameAndAge("kun", 18);System.out.println(student);}
}

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

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

相关文章

Mac OS minicom 无法设置921600问题

MacOS minicom 无法设置921600问题 介绍过程解决方案参考资料 介绍 minicom是Mac上一款非常好用的串口工具。本文假设你已经安装minicom&#xff0c;并且知道minicom的一般配置和使用方法。这是“MacOS minicom 无法设置921600”的解决问题记录。它在以下环境中设置成功&#…

后端返回图片资源错误404,前端使用默认图片

后端返回的图片资源可能会因为各种原因&#xff08;后台误删&#xff0c;地址更改未及时更新&#xff0c;损毁&#xff09;出现无法展示的情况&#xff0c;比如这种报错 就会导致图片资源错误&#xff0c;页面出现这种情况 用户体验很不好&#xff0c;为了改善这种情况&#xf…

Webpack node、output.jsonpFunction 配置详解

Webpack node、output.jsonpFunction 配置详解 最近尝试给一些用到 webpack 的项目升级到最新 webpack5 版本&#xff0c;其中遇到了一些问题&#xff0c;我挑了两个比较典型的问题&#xff0c;其中主要涉及到了 webpack 的 node 属性跟 output.jsonpFunction &#xff08;web…

我能“C”——数据的存储

目录 1. 数据类型介绍 1.1 类型的基本归类&#xff1a; 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 3. 浮点型在内存中的存储 3.1 一个例子 3.2 浮点数存储规则 1. 数据类型介绍 char // 字符数据类型 short // 短整…

解决多模块内核心模块有接口打包成jar后被依赖并调用遇到的问题(springcloud集成ruoyi.quartz)

项目准备开发个新功能&#xff0c;刚好很喜欢ruoyi写的任务调度&#xff0c;因此想到了集成ruoyi.quartz模块 &#xff0c;遇到了很多问题: 首先因为ruoyi.quartz模块依赖了ruoyi.common模块&#xff0c;因此第一步我需要把common模块一部分依赖项复制到了quartz模块内&#xf…

Selenium的使用:WEB功能测试

Selenium是ThrougthWorks公司一个强大的开源WEB功能测试工具系列&#xff0c;本系统包括多款软件 Selenium语言简单&#xff0c;用(Command,target,value)三种元素组成一个行为&#xff0c;并且有协助录制脚本工具&#xff0c;但Selenese有一些严格的限制&#xff1a; …

创建和运行 Ansible 临时命令

创建和运行 Ansible 临时命令 作为系统管理员&#xff0c;您需要在受管节点上安装软件。 请按照正文所述&#xff0c;创建一个名为 /home/curtis/ansible/adhoc.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库&#xff1a; 存储库…

k8s的pv和pvc创建

//NFS使用PV和PVC 1、配置nfs存储 2、定义PV 实现 下图的pv和pvc测试 pv的定义 这里定义5个PV&#xff0c;并且定义挂载的路径以及访问模式&#xff0c;还有PV划分的大小 vim /pv.yamlapiVersion: v1 kind: PersistentVolume metadata:name: pv001 spec:capacity:storage: …

Three.js程序化3D城市建模【OpenStreetMap】

对于我在 Howest 的研究项目&#xff0c;我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中&#xff0c;随后我将对其进行动画处理 推荐&#xff1a;用 NSDT编辑器 快速搭…

C++坦克大战源代码

源码: #include <iostream> #include <time.h> #include <windows.h>#define W 1 //上 #define S 2 //下 #define A 3 //左 #define D 4 //右 #define L 5 // 坦克有4条命void HideCursor() { //隐藏光标 …

【会议征稿信息】第二届信息学,网络与计算技术国际学术会议(ICINC2023)

2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023) 2023 2nd International Conference on Informatics,Networking and Computing (ICINC 2023) 2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023)将于2023年10月27-29日于中国武汉召…

首起针对国内金融企业的开源组件投毒攻击事件

简述 2023年8月9日&#xff0c;墨菲监控到用户名为 snugglejack_org (邮件地址&#xff1a;SnuggleBearrxxhotmail.com&#xff09;的用户发布到 NPM 仓库中的 ws-paso-jssdk 组件包具有发向 https://ql.rustdesk[.]net 的可疑流量&#xff0c;经过确认该组件包携带远控脚本&a…

.NET Core6.0使用NPOI导入导出Excel

一、使用NPOI导出Excel //引入NPOI包 HTML <input type"button" class"layui-btn layui-btn-blue2 layui-btn-sm" id"ExportExcel" onclick"ExportExcel()" value"导出" />JS //导出Excelfunction ExportExcel() {…

aardio开发语言Excel数据表读取修改保存实例练习

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom479) winform.add( buttonEnd{cls"button";text"末页";left572;top442;right643;bottom473;z6}; buttonExcelRead{cls"button";text"读取Exce…

Qt实现简单的漫游器

文章目录 Qt的OpenGL窗口GLSL的实现摄像机类的实现简单的漫游器 Qt的OpenGL窗口 Qt主要是使用QOpenGLWidget来实现opengl的功能。  QOpenGLWidget 提供了三个便捷的虚函数&#xff0c;可以重载&#xff0c;用来重新实现典型的OpenGL任务&#xff1a; paintGL&#xff1a;渲染…

【数据库系统】--【5】DBMS查询处理

DBMS查询处理 01查询处理概述02查询编译词法、语法分析语义分析查询重写查询优化 03查询执行算法04查询执行模型 01查询处理概述 02查询编译 词法、语法分析 语义分析 查询重写 查询优化 03查询执行算法 04查询执行模型 小结 ● 查询处理概述 ● 查询编译 词法、语法分析语义分…

2021年06月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;数对 给定2到15个不同的正整数&#xff0c;你的任务是计算这些数里面有多少个数对满足&#xff1a;数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22&#xff0c;得到的答案是3&#xff0c;因为2是1的两倍&#xff0c;4是2个两倍&#xff0c;18是9的…

CNN卷积详解(三)

一、卷积层的计算 4 ∗ * ∗ 4的输入矩阵 I I I 和 3 ∗ * ∗ 3 的卷积核 K K K: 在步长&#xff08;stride&#xff09;为 1 时&#xff0c;输出的大小为 ( 4 − 3 1 ) ( 4 − 3 1) 计算公式&#xff1a; ● 输入图片矩阵 I I I 大小&#xff1a; w w w w ww ●…

微服务系列文章之 SpringBoot 最佳实践

Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。 以下是一些最佳实践和一些技巧&#xff0c;我们可以使用它们来改进 Spring Boot 应用程序并使其更加高效。 Spring Boot 的四大核心 1、自动配置 针对很多Spring应用程序和常见的应用功能&#xff0c;Spring Boo…

攻防世界-fileclude

原题 解题思路 直接展示源码了&#xff0c;flag.php应该存放了flag&#xff0c;在file1与file2都不为空且file2是“hello ctf”时file1将被导入。接下来做法很明显&#xff0c;让file为flag.php&#xff0c;file2为“hello ctf”。“?file1php://filter/readconvert.base64-en…