1、mysql中插入一条数据时,条件排重。
SELECT #{netId,jdbcType=INTEGER}, #{parentId,jdbcType=INTEGER}, #{address,jdbcType=VARCHAR}
FROM DUAL
where not exists(select...(子查询->排重条件))
使用 dual 做表名可以让你在 select 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。
2、按类型字段分组后,按时间字段取最大值
我以为直接用这个:
select * from 表名 group by 类型 having max(时间);
然而,查询结果并不是我想要的。
网上也有很多错误答案,不加思考就贴出来。
发现一个靠谱的思路:
即是,先分组,用max(时间)查询到最大时间和对应的类型字段的值,再inner join 原表。貌似可行。
但是后面再思考,如果分组后,同一组中的数据的时间字段的值如果有重复。那么后面inner join后,就会
出现多个主键不同的最大值数据。如果业务上允许的话。取其中一条。也是可行的。
其它:
分组后,每组成员按时间字段排序,取第一个。
例如oracle中可以:
-- 每个流量计的最新一条数据 SELECT * FROM( SELECT afrd.*, ROW_NUMBER() OVER(PARTITION BY afrd.FLOWMETER_ID ORDER BY afrd.METER_TIME DESC) rn FROM ARCHIVES_FLOWMETER_RECORD afrd ) WHERE rn =1
3、mapper文件中的转义字符
mybatis 的映射文件(xxx.xml)中,书写sql语句时,不能出现"<"、">"等会被解析成标签符号的运算符号。这时需要将"<"、">"替换成xml的转义字符。
附:XML转义字符:
< |
< |
小于号 |
> |
> |
大于号 |
& |
& |
和 |
' |
’ |
单引号 |
" |
" |
双引号 |
第二种方法是使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析
你的可以写成这个:
<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>转自:https://blog.csdn.net/zheng0518/article/details/10449549
4、mysql如何保存boolean类型字段
设置is_del字段类型为tinyInt(1),通过mybatis的逆向工程,生成的projo里面,对应属性isDel的
MySQL没有boolean类型。这也是比较奇怪的现象。例:
create table xs ( id int primary key, bl boolean )
这样是可以创建成功,但查看一下建表后的语句,就会发现,mysql把它替换成tinyint(1)。也就是说mysql把boolean=tinyInt了。 boolean类型 MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1), MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0 5、索引创建 创建索引:
CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length)); ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnname(length));
删除索引:
DROP INDEX [indexName] ON mytable;
查看索引:
SHOW INDEX FROM table_name\G
有四种方式来添加数据表的索引:
-- 该语句添加了一个主键,这一位置索引值必须是唯一的,且不能为null ALTER TABLE tbl_name ADD PRIMARY(column_list); -- 这条语句创建索引的值必须是唯一的(除了null外,null可能会出现多次) ALTER TABLE tbl_name ADD UNIQUE index_name(column_list) -- 添加普通索引,索引值可出现多次。 ALTER TABLE tbl_name ADD INDEX index_name(column_list) -- 该语句指定了索引为FULLTEXT,用于全文索引。 ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)
6、数据的批量更新
参考链接:https://blog.csdn.net/xyjawq1/article/details/74129316
实体类:
/** * 文件 * */ public class RFile { /** * 主键 */ private Long id; /** * 下载次数 */ private Integer downloadCount; ... public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Integer getDownloadCount() { return downloadCount; } public void setDownloadCount(Integer downloadCount) { this.downloadCount = downloadCount; } ... }
mapper接口:
/** * 批量更新下载次数 * */ public int updateDownloadCountByPrimaryKey(@Param("fileList") List<RFile> fileList);
mapper映射文件:
<update id="updateDownloadCountByPrimaryKey" parameterType="java.util.List"> update `r_file` <trim prefix="set" suffixOverrides=","> <trim prefix="download_count =case" suffix="end,"> <foreach collection="fileList" item="item" index="index"> <if test="item.downloadCount !=null"> when id=#{item.id} then #{item.downloadCount} </if> <if test="item.downloadCount == null or item.downloadCount < 0"> when id=#{item.id} then `r_file`.download_count <!-- 原数据 --> </if> </foreach> </trim> </trim> where id in <foreach collection="fileList" index="index" item="item" separator="," open="(" close=")"> #{item.id,jdbcType=BIGINT} </foreach> </update>
参考执行的sql:
update `r_file` set download_count = case when id=? then ? when id=? then ? when id=? then ? when id=? then ? end where id in ( ? , ? , ? , ? )
7、case when 使用的一些小问题
参考链接:https://www.cnblogs.com/blogxiao/p/7600964.html
8、maven工程中遇到的问题
在maven工程中,在整合mybatis时,如果是maven命令启动,可能会报找不到mapper文件的错误,关键词:...not found ...statement...xxxMapper.XXX...
如果在确认了注解或者其它无误后依然报错。那么,可能是因为mapper.xml文件放到了src/main/java目录下,maven默认是将src/main/resource目录下的文件作为资源文件打包。src/main/java目录下的xml文件被忽略掉了。所以需要在pom文件中标识资源文件的目录。
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources>
参考链接:https://blog.csdn.net/biren_wang/article/details/78200805
9、group by遇到的问题
需求举例:
一张表示动物(猫)的表:
CREATE TABLE `cat` ( `id` int(12) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `type` int(2) DEFAULT NULL, `age` int(2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
type字段关联一张类型(颜色)表:
CREATE TABLE `cat_type` ( `id` int(12) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
分别插入测试数据:
cat:
cat_type:
要求统计查询出不同颜色的猫的个数,年龄段作为查询条件。没有为0。
第一次查询(条件:猫年龄>10):
SELECT ct.`name` '颜色', COUNT(cat.id) '数量' FROM cat_type ct LEFT JOIN cat ON cat.type = ct.id WHERE cat.age > 10 GROUP BY ct.`name`
结果:
不是想要的结果。
修改后查询:
SELECT ct.`name` '颜色', COUNT(temp_.id) '数量' FROM cat_type ct LEFT JOIN ( SELECT * FROM cat WHERE cat.age > 10 ) temp_ ON temp_.type = ct.id GROUP BY ct.`name`
结果:
第一次查询中,where条件筛选在join之后,而题意是想先条件过滤再进行分组统计。这里where筛掉了需要进行group by统计的数据。
10.mapper入参为String单个参数时,查询时的if标签可能会报错。
<select id="listAllExclude" resultType="com.qciot.module.org.domain.org.Org" parameterType="java.lang.String"> select * from sys_org where 1=1 <if test="_parameter !=null and _parameter != ''"> and id not in(#{id}) </if> </select>
需要将if标签的test属性中的参数名改为_parameter。或者在入参里面为入参见上@Param注解。
11.更新数据时。如果传入的字段有为null的情况,需要添加jdbcType。否则可能会报错。如下面的birthday字段。
<update id="update" parameterType="com.qciot.module.rbac.domain.user.User"> UPDATE sys_user SET username=#{username}, password=#{password}, enabled=#{enabled}, accountExpired=#{accountExpired}, credentialsExpired=#{credentialsExpired}, accountLocked=#{accountLocked}, name=#{name}, gender=#{gender}, phone=#{phone}, emergencyPhone=#{emergencyPhone}, birthday=#{birthday,jdbcType=TIMESTAMP}, org_id=#{orgId}, remark=#{remark} WHERE id=#{id} </update>
参考链接:https://www.cnblogs.com/tongxuping/p/7134113.html
12.mybatis代码生成工具(逆向工程):
1、首先需要mybatis-generator的jar包。
比如在maven仓库中找找:
D:\maven\repository\org\mybatis\generator\mybatis-generator-core\1.3.2\mybatis-generator-core-1.3.2.jar
2、数据库连接的jar包:
也是maven仓库中找,或者自己下载:
D:\java\repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar
3、然后是需要一个配置文件generatorConfig.xml,配置generator相关的信息。
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <!-- !!!! Driver Class Path !!!! --> <classPathEntry location="D:\java\repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar"/> <context id="context" targetRuntime="MyBatis3"> <property name="mergeable" value="false"></property> <commentGenerator> <!--是否关闭注释--> <property name="suppressAllComments" value="true"/> <!--是否关闭时间标志--> <property name="suppressDate" value="true"/> </commentGenerator> <!-- !!!! Database Configurations !!!! --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/taxserver_7?serverTimezone=CTT" userId="root" password="111111"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- pojo生成路径 --> <javaModelGenerator targetPackage="com.platform.entity" targetProject="F:/test-g"> <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- mapper.xml生成路径 --> <sqlMapGenerator targetPackage="mapper.generator" targetProject="F:/test-g"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- mapper接口生成路径 --> <javaClientGenerator targetPackage="com.platform.mapper.generator" targetProject="F:/test-g" type="XMLMAPPER"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 表配置 --> <table tableName="jkgl_kpfwqxx" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table> </context> </generatorConfiguration>
4、最后是一句执行命令
java -jar D:\maven\repository\org\mybatis\generator\mybatis-generator-core\1.3.2\mybatis-generator-core-1.3.2.jar -configfile E:\probe\src\main\resources\generatorConfig.xml -overwrite
13.mapper 数据批量插入:
<insert id="saveList" useGeneratedKeys="true" parameterType="java.util.List"> <selectKey resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> insert into f_admin_msg (name, user_name, phone, mail,apply_id,type,valid) values <foreach collection="items" item="item" index="index" separator=","> (#{item.name},#{item.userName},#{item.phone},#{item.mail},#{item.applyId},#{item.type},#{item.valid}) </foreach> </insert>
14.maven命令快速导出pom.xml依赖的所有jar
在pom目录下,命令行执行:mvn dependency:copy-dependencies
相关推荐
基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统源码+数据库.zip 基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统源码+数据库.zip 基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统...
SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+...
这是一个java WEB小项目,用 Maven Springboot+mybatis+mysql+redis集成的小项目例子,可供新手进行参考学习,数据库是mysql 5.5 ,只是一个简单的小参考例子,测试过可以正常运行
使用IDEA搭建了spring-boot+mybatis的工程,实现了和MySQL数据库的交互。 使用IDEA搭建了spring-boot+mybatis的工程,实现了和MySQL数据库的交互。 使用IDEA搭建了spring-boot+mybatis的工程,实现了和MySQL数据库的...
Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...
本项目框架“maven+springMVC+mybatis+velocity+mysql+junit”提供了一种高效、灵活且可维护的解决方案。以下将详细讲解这些组件及其作用。 1. Maven: Maven是一个项目管理工具,用于构建、依赖管理和项目信息...
springboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单demospringboot+mybatis+mysql最简单...
标题 "Springmvc+dubbo+mybatis+mysql+redis" 描述了一个基于Java技术栈的分布式微服务架构。在这个系统中,SpringMVC作为前端控制器处理HTTP请求,Dubbo用于服务治理,MyBatis是持久层框架,MySQL是关系型数据库,...
springBoot + mysql + mybatis Demo,eclipse项目,导入后修改application.properties mysql连接,修改映射文件查找你自己数据库的表即可,mvc包结构已经形成,运行ApplicationMain访问控制器查询API。
在本项目中,我们主要探讨的是如何利用Spring Boot、MySQL、Mybatis以及Maven这四大核心技术,配合IDEA集成开发环境来实现一个基础的数据库增删改查功能。这是一个典型的Web应用开发流程,旨在帮助开发者快速搭建...
Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...
- MyBatis-Plus可以帮助开发者快速地进行数据库操作,减少手写SQL的工作量,同时保持灵活的数据库交互能力。 在这个项目实战中,通过结合这些技术,我们可以构建一个高效率、可扩展的微服务架构。开发者可以利用...
一个简单的springboot+mybatis+mysql的CRUD项目,适合想快速上手springboot项目的同学进行研究,四个接口都经过本人测试通过,可放心下载,如有疑问,可随时联系本人,看到后第一时间帮忙处理
前后端分离开发,基于springboot+mysql+mybatis+原生安卓开发的工资管理系统,可以直接部署使用,有后端和安卓端,后端采用springboot框架,mybatis框架,redis缓存机制,Rest接口开发风格等技术,前端采用原生安卓...
标题中的"全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap"是一个集成开发环境的配置,涉及到的主要技术有Spring Boot、Spring Security、MyBatis、Druid、Thymeleaf、MySQL以及...
SpringBoot+Mybatis -plus+Mysql+Vue渲染整合,需求为,院系和学生之间的多对一关系管理,外键不可删除,添加学生时完整显示学院姓名,成功添加,删除,修改,查询,模糊查询包括下拉框(院系),区间段(学生年龄)...
在本项目中,我们主要关注的是SpringBoot 2.7版本与多个技术的深度整合,包括Spring Security、JWT(JSON Web Token)、Redis缓存以及MySQL数据库,并利用MyBatis作为持久层框架。以下是对这些技术及其整合应用的...
基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统.zip轻松搞定课程设计。 基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统.zip轻松搞定课程设计。基于Springboot+Mybatis+Redis+MySql+MQ的校园...
基于 SpringBoot + Mybatis Plus + Shiro + mysql + redis构建的智慧云智能教育平台。架构上使用完全前后端分离。 支持多种题型:选择题、多选题、判断题、填空题、综合题以及数学公式。支持在线考试,教师在线批改...
本项目是一个基于Java技术栈,使用SpringBoot、Mybatis、MySQL数据库、Bootstrap前端框架和Maven构建工具实现的网上商城系统。以下将详细介绍这个系统的关键技术及其应用。 **1. Java**: 作为后端开发的主要语言,...