小王的踩坑日记 之mysql

按天按月按年统计

mysql中dateTime字段提供了 date_format 函数进行格式化该字段显示成期望形式
DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据。

格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时(00-23)
%h小时(01-12)
%I小时(01-12)
%i分钟,数值(00-59)
%j年的天(001-366)
%k小时(0-23)
%l小时(1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时(hh:mm:ss)
%U周(00-53)星期日是一周的第一天
%u周(00-53)星期一是一周的第一天
%V周(01-53)星期日是一周的第一天,与 %X 使用
%v周(01-53)星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天(0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

我们常用的
按年统计就可以 group by date_format(date字段列名, “%Y”)
按月统计就可以 group by date_format(date字段列名, “%Y-%m”)
按天统计就可以 group by date_format(date字段列名, “%Y-%m-%d”)

按季度统计可以 使用 quarter() 函数,直接计算当天时间为哪个季度季度 (1,2,3,4)
group by concat(date_format(date字段列名, ‘%Y-’),quarter(date字段列名) );
concat拼接 这样每个日期会被处理 成 2021-1 这种形式(1是第几季度)

insert into task(id,size) VALUES (1,10),(2,10);
若是这种情况,存在主键冲突会报错并中断执行。

insert IGNORE into task(id,size) VALUES (1,10),(2,10);
忽略失败,继续执行。存在主键冲突的数据不插入

多数据源配置

多数据源配置Mybatis分别扫描不同的mapper xml目录。在resource/mapper中 多配置几个模块,不同的数据源扫描不同的模块。
1.首先pom依赖,一般已经运用druid链接池就不再需要配置
2.数据源的配置 项目如果利用nacos,就在nacos 配置多个数据源,如果userName和password都一样,只用配置多个url。如果密码账号不同可以配置多套数据源(自己区分好就行了)。

master 数据源配置

master.datasource.url=jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf8

slave 数据源配置

slave.datasource.url=jdbc:mysql://localhost:3306/slave?useUnicode=true&characterEncoding=utf8

datasource.username=root
datasource.password=123456
datasource.driverClassName=com.mysql.jdbc.Driver
3.一个数据源我们需要声明一个MyBatisConfig类,这个类作用:
a.连接数据库生成 dataSource数据源 对象供我们操作数据库
b.将dataSource注入生成一个专属该数据源的sqlSessionFactory
c.将dataSource注入生成一个专属该数据源的DataSourceTransactionManager 管理事务
在头部加上注解 @Configuration
@MapperScan(basePackages = “com.rdcrm.task.daoStatistic”, sqlSessionFactoryRef = “slaveSqlSessionFactory”)
让mybatis不同数据源扫描指定的dao,进行目录隔离
此时已经完成,在不同的dao下xml语句其实就是操作不同的数据源的表

事务注解Transactional失效

问题:
利用spring的事务注解Transactional,数据插入数据库中。发现异常情况,数据库的事务并未生效。
原因:
经过排查发现,是因为多数据源导致。配置了多个数据源之后,TransactionalManager并未配置,导致只有一个spring默认生成的TransactionalManager只会让主库事务生效。另一个库的数据事务通过另一个库的事务管理者并不能使得它的事务生效。
解决方案:
重写TransactionConfig,给两个dataSource都生成一个DataSourceTransactionManager。直接
new DataSourceTransactionManager(dataSource);进行生成,然后配置一个bean的那么。
使用Transactional注解时候主动声明使用的DataSourceTransactionManager的beanName进行配置使用该数据源的事务管理。

json类型使用

CREATE TABLE test_json (id int,v JSON);
DROP TABLE test_json;INSERT into test_json VALUES(1,'{"120":120}'),(2,'{"120":120,"130":140}'),(3,'{"120":120,"130":140,"140":180}');
SELECT * FROM test_json
SELECT *,v->'$."140"' FROM test_json WHERE (v->'$."140"') IS NOT NULL

elt 使用尽量排除非范围内的数据

Mybatis相关错误

Mybatis查出可以返回主键id

useGeneratedKeys=“true” 获取到数据库自动生成的主键ID
keyProperty=“pid” 对应是 parameterType中PFileInform对象的pid属性,insert语句执行结束则可以从该对象取出id

<insert id="savePFile" parameterType="com.demo.fileupload.enity.PFileInform" useGeneratedKeys="true" keyProperty="pid">insert into part_fileinform(psize,pMD5)values(#{psize},#{pMD5})
</insert>
//java代码 取出返回的 主键id
fileMapper.savePFile(pFileInform);
pid = pFileInform.getPid();

JDBC数据类型 和 Java 数据 类型对应关系

错误:

No enum constant org.apache.ibatis.type.JdbcType.String

原因:

Mybatis中配置resultMap时候必须符合JdbcType枚举类型,没有String类型
DB类型与Java类型对应表

DB TypeJAVA Type
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
CLOBClob
BLOBBlob

解决方法:

1.String换成VARCHAR就行了

Mybatis查询结果为null,dao层用int接收

错误:

Mapper method attempted to return null from a method
with a primitive return type (int).

原因:

Mybatis查询结果返回为null,但是dao层对应的是返回结果类型 为int,int不能为null,但是Integer可以接收null,初值为0

解决方法:

1.将dao层的int转换为Integer

Mybatis接收Java对象参数,无法对应 其属性的值

错误:

Parameter ‘fname’ not found. Available parameters are [fileInform, param1]

原因:

dao层传入的是对象,但是加了@Param(“”)注解,导致无法找到对象的属性

解决方法:

1.将dao层的方法@Param(“”)注解删除

Mybatis int字段=0时候判断 != ‘’ 不成立

错误:

当参数int status = 0时候

条件不成立

原因:

Mybatis把int值为0,该 ==‘’ 值为true

解决方法:

删除 != ‘’ 条件

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

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

相关文章

回炉重造java----JVM

为什么要使用JVM ①一次编写&#xff0c;到处运行&#xff0c;jvm屏蔽字节码与底层的操作差异 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下边越界检查 ④多态 JDK&#xff0c;JRE&#xff0c;JVM的关系 JVM组成部分 JVM的内存结构 《一》程序计数器(PC Register) 作用…

傻瓜化备份/恢复K8S集群Etcd数据

前言&#xff1a; 备份重要数据&#xff0c;简化重复操作&#xff0c;让一指禅、点点点也能完成运维任务。 脚本呈现界面如下&#xff1a; 1、查看Etcd版本 rootmaster:~# cat /etc/kubernetes/manifests/etcd.yaml | grep image: | awk {print $2} registry.aliyuncs.com/goo…

数据结构与算法学习笔记五---循环链表的表示和实现(C语言)

目录 前言 1.循环链表的表示和实现 1.初始化 2. 销毁 3. 清空 4. 表空判断 5. 表长 6. 获取循环链表中的元素 7. 直接前驱 8. 直接后继 9. 插入 10. 删除 11. 遍历 12. 测试代码 前言 这篇博客主要介绍C语言中循环链表的表示和实现。 1.循环链表的表示和实现 指…

SpringCloud------Eureka,Ribbon,Nacos

认识微服务 微服务技术栈 微服务概念 微服务结构 微服务技术对比 企业需求 SpringCloud 认识Springcloud 服务拆分及远程调用 每个服务只能查询自己数据库中的表&#xff0c;导致其他服务如果想使用别人的表数据&#xff0c;这就需要进行远程调用&#xff0c;这里使用RestTem…

杨校老师项目之基于51单片机的汽车智能照明系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 科技的发展&#xff0c;人们对汽车的安全性也提出了更高要求。照明系统作为汽车组成部分之一&#xff0c;承担着重要职能&#xff0c;传统汽车智能照明系统已无法…

Spring Boot集成@Async快速入门Demo

1.什么是Async&#xff1f; 当我们在使用SpringBoot进行开发的时候&#xff0c;可能会遇到一些执行异步任务的场景&#xff0c;如果每次执行这些异步任务都去新建一个异步线程来执行的话&#xff0c;那代码就太冗余了。幸好SpringBoot给我们提供了Async的注解&#xff0c;让我…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型&#xff0c;提升运营效率的重要力量。而在这个过程中&#xff0c;云管理作为确保云计算环境稳定、高效运行的关键环节&#xff0c;其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么&#xff1f; 云管理的作用是什么&…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

【408精华知识】提高外部排序速度的三种方式

文章目录 一、败者树二、置换-选择排序三、最佳归并树 一、败者树 还没写完… 二、置换-选择排序 三、最佳归并树 写在后面 这个专栏主要是我在学习408真题的过程中总结的一些笔记&#xff0c;因为我学的也很一般&#xff0c;如果有错误和不足之处&#xff0c;还望大家在评…

Wikimedia To Opensearch

概览 Wikimedia ⇒ Kafka ⇒ OpensearchJava Library&#xff1a;OKhttp3和OkHttp EventSource&#xff1b;生产者&#xff1a;Wikimedia&#xff1a;WikimediaChangeHandler和WikimediaChangeProducer&#xff1b;消费者&#xff1a;Opensearch&#xff1a;OpenSearchConsume…

AI智能体|我把Kimi接入了个人微信

大家好&#xff0c;我是无界生长。 最近加入AI学习交流群的小伙伴越来越多&#xff0c;我打算在微信群接入一个聊天机器人&#xff0c;让它协助管理微信群&#xff0c;同时也帮忙给群友解答一些问题。普通的群聊机器人肯定是不能满足需求的&#xff0c;得上AI大模型&#xff0c…

Kylin V10SP1桌面版下GBase 8s java udr异常处理

同样的GBase 8s数据库版本&#xff0c;自定义的java udr在Kylin V10SP1 服务器版&#xff08;aarch64架构&#xff09;下创建、运行正常&#xff0c;而在Kylin V10SP1 桌面版&#xff08;aarch64架构&#xff09;下时创建正常但运行UDR异常&#xff0c;报错如下&#xff1a; (…

【JVM类加载机制】深度剖析JVM类加载机制

深度剖析JVM类加载机制 前言类加载运行全过程loadClass的类加载过程 类加载器和双亲委派机制类加载器的类型类加载器的初始化过程双亲委派机制为什么要设置双亲委派机制&#xff1f;全盘负责委托机制自定义类加载器实例打破双亲委派机制Tomcat打破双亲委派机制Tomcat自定义加载…

问题解决记录 | kettle中出现中文乱码

spoon.bat的启动文件中进行修改 if "%PENTAHO_DI_JAVA_OPTIONS%""" set PENTAHO_DI_JAVA_OPTIONS"-Xms1024m" "-Xmx2048m" "-Dfile.encodingUTF-8"

spark结课之小小tip

scala常用方法总结&#xff1a; 1.map()方法&#xff1a;用于对集合中的每个元素应用一个函数&#xff0c;并将结果收集到一个新的集合中。 基本结构&#xff1a; def map[B](f: (A) > B): List[B] 实例&#xff1a; val numbers List(1, 2, 3, 4, 5) val doubledNumber…

废品回收小程序,推动回收行业数字化发展

在垃圾分类、资源回收利用的时代背景下&#xff0c;废品回收行业迅速成长&#xff0c;市场规模逐渐扩大&#xff01; 随着“互联网”应用的普及&#xff0c;废品回收行业也进入到了数字化回收领域&#xff0c;各大回收行业开始专注于发展智能回收。此外&#xff0c;线上废品回…

‘vue-cli-service‘ is not recognized as an internal or external command解决方案

vue-cli-service is not recognized as an internal or external command, operable program or batch file.解决方案 先进行 &#xff1a; npm install -g vue/cli 命令安装vue cli 是必须的。 如果 npm run build 还是报错 遇到同样的提示&#xff1a; 这时候先安装依赖 np…

leetcode56--合并区间

题目描述 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;interv…

智慧管家物业管理系统(小组项目)

目录 前言 一、项目介绍 1、目的和背景 2、项目主要内容 3、技术介绍 二、功能模块 1、重要文件结构 2、功能实现&#xff08;部分个人负责模块功能&#xff09; 2.1 展示房源信息页面 2.2 房屋详情页面 2.3 房源信息管理 三、功能模块页面 1、前台模块 2、后台…

【讲解下iCloud如何高效利用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…