首页 > 其他分享 >Mybatis学习笔记(二)

Mybatis学习笔记(二)

时间:2022-08-31 14:47:04浏览次数:58  
标签:map 实体类 笔记 学习 sql Mybatis where 对应 select

CRUD:

增删改在接口的返回值可以是int也可以是void

 

查询必须设置结果集:

resultType设置成java类(全限定名或别名)

resultMap自定义映射,可以一对多或多对一

 

btw:当结果集与接口对应不上时,接口类在IDEA中是灰色的,所以在select的对应中应该也判断了结果集类型。

 

PACKAGE标签引入mappers:

在<mappers>标签中可以使用package 和 mapper标签,mapper就对应一个实现文件,package可以对应该文件夹下的所有文件。

并且package还可以用于<aliases>标签下,将整个包下的类的别名自动转换成类名。

 

Mybatis获取参数值的两种方式

${}和#{}

${}的本质是字符串拼接

会被sql注入,需要自己添加单引号,写字面值会被运算

 

#{}的本质是占位符

不会被sql注入

 

参数为单个字面量类型时

大括号内可以使用任意名获取参数值

 

参数为多个字面量类型时

大括号内用{arg0,arg1...argN-1}或{param1,param2,param3...paramN}

 

参数为单个Map类型时

大括号内用该map的key获取对应的value

 

参数为单个实体类型时

大括号内用该类的变量名获取对应的value(实际上是get方法对应的名字)

 

接口类中有@param(“key”)注解

使用注解中的key来拿到value

使用param注解时,仍然可以使用{param1...paramN},但不能用{arg0...argN-1}

 

<select> resultType的设置

 

查询一个实体类对象

resultType设为实体类名

当查询出多个结果时,会直接报异常

 

查询多个实体类对象

resultType扔设为实体类名

但是接口的函数声明中要用List包住实体类

 

查询基本类型

mybatis在配置文件中为基本类型内置了别名

有包装类时int、integer对应Integer类型  _int、_integer对应int类型,以此类推。

string对应String,map对应Map。

也可以写全类名:java.lang.Integer

 

查询没有对应实体类的结果时

可以用map作为结果集

单条结果:

字段名为key,字段值为value放入map

多条结果:

在接口的函数声明中用List包住map

或者在函数声明前使用MapKey(“字段名”)注解,用注解标注使用哪个字段当key,将每个查询出来的单条map放入一个大的map集合中。该字段不能重复。

 

当可以使用#{}时尽量使用#,但有些特殊的sql需要使用${}

特殊的sql:

模糊查询

select * from user where username like '%#{}%'

不行,#{}会在编译时变成?,又因为问号放在了单引号内会解析为字符串,不会当做占位符,无法替换

解决方案

1.select * from user where username like '%${}%'

用${}字符串拼接,但是不防止sql注入问题

2.select * from user where username like concat('%',#{},'%')

用concat进行拼接

3.select * from user where username like "%"#{}"%"

用双引号,可以快速拼接,与2类似

 

批量删除

sql语句为

delete from user where id = a or id = b

或者

delete from user where id in (a,b,c,...,n)

其中,a,b,c不能用#{}代替,只能用${}代替

 

动态更改表名时

select * from tableName

此时的tableName不能用#{},因为#{}会在外面添加单引号导致sql解析错误

标签:map,实体类,笔记,学习,sql,Mybatis,where,对应,select
From: https://www.cnblogs.com/darkpar/p/16643025.html

相关文章

  • 普林斯顿微积分读本:学习笔记
    目录第1章函数、图像和直线1.5线性函数的图像如果已知直线通过点\((x_0,y_0)\),斜率为\(m\),则它的方程为\(y−y_0=m(x−x_0)\).如果一条直线通过点\((x_......
  • Python学习-Day2
    1、算数运算符/除10/20=0.5//取整数25//10=2%取余数25%10=5"幂 2"4=16*在字符串中计算结果就是字符串重复指定次数的结果eg:......
  • smile——Java机器学习引擎
    资源https://haifengl.github.io/https://github.com/haifengl/smile介绍Smile(统计机器智能和学习引擎)是一个基于Java和Scala的快速、全面的机器学习、NLP、线性代数、......
  • 【Java学习Day11】变量种类及命名规范
    变量变量是什么:就是可以变化的量Java是一种强类型语言,每个变量都必须声明其类型Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域typevarNa......
  • C++学习笔记-day03
    1、嵌套循环2、跳转语句continue不会使整个循环终止,break会跳出循环//输出2,跳过了1gotoA;cout<<1<<endl;A:cout<<2<<endl;3、数组......
  • 软件评测师学习笔记01(备考下半年软件评测师)
    以下内容,都是日常看历年真题过程中,所整理出来的核心内容,有需要的可以一起学习,一起备考,加油!理论知识:一、测试的原则:1、所有的软件测试都应该追溯到用户需求2、尽早地和......
  • Linux网络编程 学习思路
    作者:拱白菜的阿秀链接:https://www.nowcoder.com/discuss/809908?type=all&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack来源:牛客网......
  • 工作笔记之Android记录
    工作笔记工作笔记用于记录Android开发过程中遇到的疑难点和难以解决的点,特此记录。Kotlin的版本关系kotlin和room的使用需要进行调整,如kotlin1.7.10room2.5.0和kotli......
  • 深度强化学习训练与调参技巧
    如何选择深度强化学习算法?MuZero/SAC/PPO/TD3/DDPG/DQN/等(2021-04)  https://zhuanlan.zhihu.com/p/342919579  深度强化学习调参技巧:以D3QN、TD3、PPO、SAC算法......
  • 复习强化学习
    https://zhuanlan.zhihu.com/p/374376193  首发于机器学习与强化学习写文章 强化学习一:基本原理 贺治东数据挖掘、深度学习、NLP、强化学习​关注1人赞同......