第九章MyBatis的技巧

${}和#{}的区别

  • #{}给sql语句的占位符传值
  • ${}直接将值拼接到sql语句上,存在sql注入的现象

什么时候用${}

需要先对sql语句拼接,然后再编译。

  • 字符串排序字段
  • 向SQL语句中拼接表名。比如根据日期生成日志表

批量删除

复制代码
delete from car where in(${ids})

模糊查询

复制代码
select from car where name concat('%',#{name},'%');

select from car where name '%${name}%'

select from car where name "%"#{name}"%"

别名

在MyBatis中配置。type为被取的名字,alias为取成什么

别名不区分大小写,命名空间不可以取别名

复制代码
<typeAliases>
    <typeAlias type="com.example.webapplication.pojo.Car" alias="abc"></typeAlias>
</typeAliases>

如果省略alias。别名默认为类的简名

下述例子中,别名为car/CAR

复制代码
<typeAliases>
    <typeAlias type="com.example.webapplication.pojo.Car" ></typeAlias>
</typeAliases>

如果类太多会写很多typeAlias标签

使用package可以将包下所有类起别名

复制代码
<typeAliases>
    <package name="com.example.webapplication.pojo"/>
</typeAliases>

Mapper

mappers下的mapper有3个属性可以选,主要为了找到sql的配置文件

  • resource从类的根路径下开始找
  • url绝对路径
  • class值为接口的全限定名,并且对应的xml必须与接口保存同一文件下名字也要相同

如果配置文件太多需要写的标签太多可以用package来指定包其他用法与class类似

复制代码
<mappers>
   <package name="com.example.webapplication.Mapper"/>
</mappers>

插入数据时自动获取数据的主键

  • useGeneratedKeys表示使用自动生成的主键值

  • keyProperty表示将主键值赋值给对象的id属性

    <insert id="insert" useGeneratedKeys="true" keyProperty="id"/>
相关推荐
是阿漂啊2 小时前
vscode运行springboot项目
java·spring boot·后端
ghfdgbg2 小时前
13. 配置优先级 + Bean的管理 + SpringBoot核心原理
java·spring boot·后端
Moe4882 小时前
Elasticsearch 8.1 Java API Client 客户端使用指南(索引、文档操作篇)
java·后端·面试
洋亦2 小时前
GoF23种设计模式 简介
java
Javatutouhouduan2 小时前
Java面试常问Redis核心知识点整理!
java·数据库·redis·java面试·后端开发·java架构师·java程序员
AAA简单玩转程序设计2 小时前
谁说Java枚举只是“常量装盒”?它藏着这些骚操作
java·前端
枯基Evan2 小时前
applicationTaskExecutor Spring 内置线程池失效
java·数据库·spring
优爱蛋白2 小时前
IL-21:后Th1/Th2时代的免疫新星
java·服务器·前端·人工智能·健康医疗
深圳佛手2 小时前
LangChain 提供的搜素工具SerpAPIWrapper介绍
开发语言·人工智能·python
apihz2 小时前
反向DNS查询与蜘蛛验证免费API接口详细教程
android·开发语言·数据库·网络协议·tcp/ip·dubbo