分享好友 最新动态首页 最新动态分类 切换频道
21.<sql id="sqlId">与<include refid="sqlId">重用sql
2024-12-27 03:41

com.github.pagehelper.PageHelper

github上的一个基于mybatis的分页插件PageHelper

 

原理

1.1把计算好的分页放到线程变量中

1.2在mybatis查询,会进入到拦截器中,根据这个线程变量看是否要分页

PageHelper实现分页原理 - 十黎九夏 - 博客园

1.3多数据源适配分页(关于auto-dialect: true是网上看到的  没有亲自尝试

 
 
 

参考文章

使用Pagehelper进行分页时下一页没有数据依旧有数据返回_花儿小新♥-CSDN博客

 
 
 
 
 

之前我没加@Param  报了500 说找不到idList参数

如果是collection,默认是collection="list"

接上边那一点

参考

MyBatis(映射文件中使用foreach标签时报错,属性collection的问题

MyBatis,在foreach标签对中,使用List类型参数时,collection属性到底怎么写_HairyCoder的博客-CSDN博客

默认collection='list' 但是如果mapper中使用了@Param("") ,collection就得按照@Param指定的值

 
 
 

5.1.1resultMap是xml中定义的<resultMap>标签的id

 
 

5.1.2resultType需要写返回类的全路径

 
 

 5.2.1resultType对应pojo与数据库字段应一一对应

5.2.2 如果数据库中有下划线分割

如数据库字段为user_name,自定义实体属性为userName,可以在application.yml中开启驼峰自动转换

 

或者application.properties中

 
 

5.3.1目前,在我的实际应用中,一般java提供的类如String,Integer的才会用resultType,而自定义的类,一般都用resultMap做字段与实体类属性的映射

5.3.2根据阿里的开发手册,也是resultMap优先

为了解耦

 我用了mybatis分页拦截PageHelper,再执行过程中后边加了LIMIT,然后因为这个<select>里边已经写了分号,所以整个的sql就变成了.....;LIMIT  ,看到了吧,limit前边有个分号,自然执行出错

如果你不涉及到分页,那这样写可能不会报错

以下为理论知识没有亲自实践

databaseId

比如你写了了两个select   id一样  然后就databaseId不一样  一个是mybasql  一个是oracle 那么当url配置的是达梦时候就会执行dm那个select  当url配置的是h2时候就会执行h2那个select

加上databaseId这个属性  属性值和url中jdbc:后边的值一致

 
 

 为什么我会碰到这个知识点,因为踩了一个坑

公司要从mysql数据库切换到达梦数据库,然后遇到一个字段begin是关键字,切换为达梦后执行是有问题的。

我采取的几种方式

1.我之前的方式是把字段给改了名字begin->beginDM。

2.然后又考虑到有别人用所以又把名字改回去beginDM->begin,并且把关键字加了双引号 "begin"。

3.但是,如果哪天我们再切换成别的数据库怎么办?所以,搜索了mybatis如何兼容多种数据库databaseId

 

mybatis在把sql传入DBMS之前,先动态解析,再预编译

 

${}在动态解析那步,就进行字符串替换,所以我们在控制台能看到即将执行的sql

#{}在预编译那步,才替换为?  所以我们在控制台看到的是带?的sql

8.1.1正例

如想执行的sql是select id from user where user_name = #{userName}

然后入参userName为 张三 那预编译就变成'张三' 即 select id from user where user_name = '张三'

8.1.2反例

如想执行的sql是select id from #{table} where user_name = '张三'

然后传入user 那么sql就变成了 select id from 'user' where user_name = '张三'

此时sql无法执行

所以上一个反例  应该写成select id from ${table} where user_name = #{username}

因为容易出现sql注入,${}是一个简单的String替换,字符串是什么,解析就是什么

${}不安全,容易引起sql注入,举个栗子

 

如果我的tableName传入的是

 

那么完整的sql就变成了

 

其中--where name =?就变成了注释 不会执行  而且还把我user表删了  所以确实不安全

<where>标签

 
 
 
 
 

<where>是把第一个and去掉,set是把最后一个逗号,去掉

如下sql,就算classname为空,执行也不会报错

 
 

以上,<where>和<set>可以看作<trim>的简写

<where>相当于<trim prefix="where"  prefixOverrides="and | or">

<set>相当于<trim prefix="set"  suffixOverrides=",">

批量插入

 

separator表示分割方式  separator="," 就是用逗号,隔开

比如写一个批量插入的sql

INSERT INTO `devdb`.`testorder`(`order1`, `order2`) VALUES (1, 2),(3,4),(3,4),(3,4),(3,4),(3,4),(3,4);

hibernate无法自定义组装sql,对于复杂关联表以及复杂sql支持弱

但是开发速度快,省事

如果一个项目要求几天开发完,首选hibernate

但是hibernate性能不如mybatis

目前只知道mybatis这种模式与动态代理有关:通过Mapper 动态代理机制,可以只编写接口以及方法的定义

xml的namespace是mapper的全路径名

 
 

@Mapper或者@MapperScan扫描mapper,

mybatis:mapper-locations扫描xml文件

怎么注册成bean?我的理解:通过mybatis-spring中间件,把扫描到的注册成bean

 
 

作用

1.直接扫描路径,不用每个接口上都写@Mapper : 在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类

2.指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类

到现在,我也一直觉得,mybatis的xml就相当与mapper接口的实现类,不然我们怎么都用@Autowired注入mapper接口

如果对象中有有参得构造方法,需要再mybatis中配置<constructor>,否则mybatis无法实例化对象

查出来数据需要转化成对象时,要用到那个对象得构造方法

数据库主键设置为自动递增时,程序在insert前不知道新的主键是什么

 

原理:数据库产生过的最大主键加1

比如最大主键101,把他删了,再插入一条,主键就是102

同mysql函数

 

复杂写法

 

selectkey中 order为after 是先插入数据后拿到主键

 
 
 
 

把涉及到的参数都整理到实体里,然后改一下parameterType就行  

23.1.mapper接口需要继承

 

23.2.namespace要一致,xml的namespace要使用子接口的全路径名

Pf1001BaseMapper.xml

 

Pf1001Mapper.xml

 
 

实际应用踩坑

mybatis的自动生成插件生成了mapper A和xml A之后  我新增了extendMapper B 和extendXml B  在mapper B中继承了mapper A

我在B中想使用A的resultMap  但是执行时报B中没有这个resultMap  原因是我xml A中的namespace没有改成mapper B

注意这里

最新文章
淘宝卖家聊天技巧
淘宝卖家聊天技巧  淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在2003年5月创立。淘宝网是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分
萍乡谷歌SEO专家助力企业网络营销高地
萍乡谷歌SEO公司专注于为企业提供高效SEO服务,助力企业优化谷歌搜索引擎排名,迅速抢占互联网市场制高点,提升品牌知名度和竞争力。通过专业技术和策略,助力企业实现全球化市场拓展。随着互联网的快速发展,越来越多的企业开始意识到的重
Xiaomi Mi Unlock Tool: Download and How to use it to Unlock Bootloader
Through this post, you can download the latest Xiaomi Mi Unlock Tool, along with all the previous versions. Further, we will also guide you on how to use the Mi Unlock Tool to unlock the bootloader on Xiaomi, Redmi, and Po
营销信息网站排名优化,策略与实践,营销信息网站排名优化方案
营销信息网站排名优化,策略与实践,是提升网站在搜索引擎中排名的关键步骤。通过优化网站内容、关键词、链接等,提高网站质量和用户体验,从而吸引更多潜在客户。需要关注竞争对手的动态,不断调整优化策略,保持网站的竞争优势。实践表明
项目记录:C语言学生成绩排名程序
  一个很简单的小项目,大一的学生作业。我简单介绍一下相关功能和代码之类的吧~  本来题目不强制要求菜单的,我有点强迫症加了菜单。【1】题目:   一个班40名学生,期末有10门课程成绩,要求计算并输出
用AI绘画生成超逼真美女写真,简单易上手的工具评测与教程
5. Runway ML Runway ML是一款提供多种创意工具的AI平台,用户可以利用其强大的功能进行视频编辑、图像生成甚至生成式图像处理。在生成美女写真方面,Runway ML允许用户上传参考图像进行修改,非常适合有一定艺术背景的用户。不过,操作界
豹猫怕不怕冷
豹猫对寒冷的适应能力较强,但仍然需要注意保暖。豹猫主要栖息于山地林区、郊野灌丛和林缘村寨附近,能够在海拔3000米的高山林区生活。它们的体毛较为浓密,能够提供一定的保暖效果,因此在寒冷环境中具有一定的适应能力。然而,尽管豹猫对
揭秘看网站流量的秘密,揭秘那些能帮你洞察网站流量的网站地址
在互联网高速发展的今天,网站流量已经成为衡量一个网站受欢迎程度的重要指标,一个高流量的网站意味着它具有更多的潜在客户和商业机会,如何了解自己的网站流量呢?就让我们一起揭秘那些能帮你洞察网站流量的网站地址。百度统计是百度提供
深圳外贸建站_深圳外贸建站推广
在当今的数字化时代,深圳外贸建站已成为众多企业走向全球市场的必备利器。无论是小型初创公司,还是大型企业集团,外贸网站都是打破地域限制、获取全球客户的关键桥梁。对于深圳这样的外贸重镇而言,拥有一个高效、专业的外贸网站不仅是企
农村直播对农民的影响,机遇与挑战并存,数据驱动计划_WP35.74.99
摘要:农村直播对农民产生了深远影响,既带来机遇也面临挑战。直播形式为农民提供了展示农产品、推广农业技术的平台,促进了农村经济发展和销售增长。竞争激烈的直播市场、技术门槛和市场需求变化也给农民带来了挑战。数据驱动计划如WP35.7
相关文章
推荐文章
发表评论
0评