MyBatis操作经验
小大宇
能与优秀的人为伍自然就会变优秀
展开
-
MyBaits操作经验目录贴
MyBatis-------批量插入 MyBatis--------生成主键原创 2020-04-07 14:34:45 · 1038 阅读 · 0 评论 -
Mybatis-----查询结果合并成集合
如上查询结果,通过主表左连接出来多条记录。目前的查询结果共有12条记录,但是根据 id来看,实际上只有2条主表记录,其它的都是通过主表左连接出来的。如何让查询结果只有2条?MyBatis提供了合并的语法@Datapublic class Subsystem { private int subsystemId; private String subsystemKey; private String subsystemName; private Integer sn.原创 2021-08-05 17:08:30 · 4068 阅读 · 0 评论 -
删除表中重复数据
delete from t_majorwherespeciality in (select speciality from (select speciality from t_major group by speciality having count(speciality) > 1) a)andid not in (select pid from (select min(id) as pid from t_major group by speciality having count原创 2021-08-04 10:42:04 · 94 阅读 · 0 评论 -
迁移Oracle遇到的坑
默认值丢失小数位,需要查看原来的数字长度序列 create seq insert into seq.nextval主键丢失Mybatis(1)序列(2)表不能有 引号(3)MySQL特有函数(4)Mysql时间函数需要注意,Oracle不支持直接使用 大于号小于号来比较时间(5)分页使用 PageInfo.setLimit( X) ;(6)SQL语句结尾不能有分号1、第一步:从test2库同步表到Oracle库。 坑:(1)默认值丢失 ...原创 2021-07-29 10:34:29 · 240 阅读 · 0 评论 -
MyBatis优化速度
1. Fetch相当于读缓存,如果使用setFetchSize设置Fetch Size为10000,本地缓存10000条记录,每次执行rs.next,只是内存操作,不会有数据库网络消耗,效率就会高些。但需要注意的是,Fetch Size值越高则占用内存越高,要避免出现OOM错误。2. 建议执行SQL语句之前设置,即ps.executeQuery();之前使用setFetchSize()函数设置。https://cloud.tencent.com/developer/article/1389171原创 2021-07-21 11:02:18 · 2459 阅读 · 0 评论 -
Mybatis-----Oracle关于0开头的小数,开头的0消失的问题
原创 2021-05-21 10:39:38 · 1610 阅读 · 0 评论 -
MyBatis-------if test标签处理相等的情况
在MyBatis的各种标签中,<iftest>标签可以算的上是高频使用的一个标签了。 在mybatis中不等于一般是<if test="formNumber != null and formNumber != ''"> 今天在使用<iftest>标签的过程中,我有一个需求是传入的参数需要匹配相等的情况。 List<SystemProperty> iftest(@Param("param") ...原创 2020-12-30 16:25:43 · 2382 阅读 · 0 评论 -
MyBatis-------oracle中获取随机数方法(造数据)
update M_XS_JY set JYLX=cast( floor(dbms_random.value(1,15)) as int);参考:https://www.cnblogs.com/blogyuan/p/3739638.html原创 2020-12-09 10:11:22 · 1100 阅读 · 0 评论 -
MyBatis-------解决Mysql LIMIT分页关键字offset偏移量过大
SELECT * FROM T_TABLE LIMIT 【START, SIZE 】LIMIT 使用上述两个参数,一个是从第多少条记录开始START,另外一个是希望要查询出来得个数SIZE随着START值的增加,那么此查询条件的速度会越来越慢。解决方案的前提是该表的主键是自增的。那么就能先确定到从第多少条记录开始-定位主键方法SELECT * FROM t_user LIMIT 20883005,10SELECT * FROM t_user WHERE id>(SELECT ID FR原创 2020-09-04 16:17:51 · 3546 阅读 · 1 评论 -
MyBatis--------解决Oracle的to_number函数不支持有字母的情况
需求:某表的某列是varchar类型,此列里存放的不全是数字,如何使用to_number函数呢?解决:使用translate函数 SELECT ${primaryKey} FROM ${sourceTable} WHERE 1=1 <if test=" minValue!= null"> <![CDATA[ -- 将数字保留,其他的大写字母移除原创 2020-08-04 19:03:26 · 1291 阅读 · 0 评论 -
MyBatis--------邮箱正则、身份证正则、电话正则
电话号码MySQL <select id="querySourceDataCount" resultType="java.lang.Integer" databaseId="mysql"> SELECT ${primaryKey} FROM ${sourceTable} WHERE 1=1 AND ${sourceField} REGEXP "^[1][35678][0-9]{9}$"原创 2020-08-03 15:23:55 · 592 阅读 · 0 评论 -
MyBatis--------查询7天内的记录
MySQL SELECT count(1) FROM ${sourceTable} WHERE 1=1 AND ${createTime} >= DATE_SUB(NOW(),INTERVAL ${verityDay} DAY)Oracle SELECT count(1) FROM ${sourceTable} WHERE 1=1 AND ${createTime} &原创 2020-07-27 17:47:39 · 3381 阅读 · 0 评论 -
MyBatis--------MybatisPlus继承体系小记录
@Datapublic class BaseDO { @TableField(fill = INSERT) @TableLogic protected Integer isDeleted; @TableField(fill = INSERT_UPDATE) protected Date gmtCreate; @TableField(fill = INSERT_UPDATE) protected Date gmtModified; @Tab原创 2020-07-20 14:20:29 · 1589 阅读 · 0 评论 -
MyBatis--------Oracle超过1000条的问题
select * from test_tablewhere 1 = 1 <!-- IdList --> <if test="IdList != null and IdList.size > 0"> AND PK_ID IN <!-- 处理in的集合超过1000条时Oracle不支持的情况 --> <trim suffixOverrides=" OR PK_ID IN()"> <!-- 表示删除最后一个条件 --&g.原创 2020-06-12 10:06:10 · 1232 阅读 · 0 评论 -
MyBatis Plus Service CRUD接口测试
Service如何集成MPpublic interface RoleMapper extends BaseMapper<RoleDO> {}public interface RoleService extends IService<RoleDO>{}@Service@RequiredArgsConstructorpublic class RoleS...原创 2020-04-24 15:04:35 · 1884 阅读 · 0 评论 -
MyBatis Plus Mapper CRUD接口测试
插入 插入一条记录int insert(T entity);删除 根据主键ID删除,主键ID支持String、Number类型int deleteById(Serializable id); 根据主键ID批量删除int deleteBatchIds(Collection<? extends Serializable...原创 2020-04-17 17:19:23 · 535 阅读 · 0 评论 -
MyBatis--------查询参数携带集合
一、携带参数 Java的查询参数里携带了一个集合。@Datapublic class TeacherParam { private List<Long> teacherIds;} 这个参数作为查询Mapper的参数。@Repository@Mapperpublic interface ClassRoomMapper {...原创 2020-04-07 13:55:05 · 483 阅读 · 0 评论 -
MyBatis-------使用IN语句
MMP,之前传递的是List<String>,Mybatis解析成 id IN (" 221 , 223, 224 "),所以疯狂报错。 后来传递了一个List<Long>,终于变乖了。/** * 根据接收组获取所有的接收人员id * * @param list 接收组id * @return 接收组成员主键ID...原创 2018-12-18 16:22:21 · 1339 阅读 · 0 评论 -
MyBatis-------唯一键冲突(只适用于MySQL)
在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。 现在有一张表,其拥有一个唯一索引的EMPLOYEE_ID字段,那么在其它insert语句中,插入的E...原创 2019-01-02 11:22:12 · 4542 阅读 · 0 评论 -
MyBatis--------格式化性别等字段
通用写法SELECT id, username, age, (CASE WHEN SEX = 1 THEN '男' WHEN SEX = 2 THEN '女' ELSE '未知' END) 'sex' FROM t_user u WHERE u.id in (1,2,3)SELECT USER_A...原创 2020-04-08 14:17:27 · 1042 阅读 · 0 评论 -
MyBatis-------时间函数处理
一、使用date_format函数 项目中经常出现的查询条件是,在某一时间开始,到某一时间结束。 Java中传递过来的实体,可能是字符串类型的,所以我们把从数据库里面的时间先格式化成为字符串,然后再与用户传递过来的字符串做对比。 <if test="insuredDateStart != null and insuredDat...原创 2020-03-27 17:30:29 · 6377 阅读 · 0 评论 -
MyBatis-------级联查询(一对一、一对多)
一、持有其它对象(最简单Bean处理法) 例如 班级类ClassRoom类,这个类中有一个成员变量:班主任Teacher。班主任有一个name属性。public class ClassRoom { //班级编号 private Long id; //一个班级有一个班主任 private Teacher teacher; //班主任...原创 2019-04-12 11:18:59 · 500 阅读 · 3 评论 -
MyBatis-------获取系统当前时间
在Oracle数据库中,sysdate可以代表当前系统的时间。 如果需要在Mybatis中插入当前时间,可以参考下面的SQL语句。insert into T_User(id,IDCARD,DATE,NAME) values(#{id},#{idCard},sysdate,#{name}) 当然了,如果你是mysql数据库,使用now()函数......原创 2020-04-06 10:58:33 · 30248 阅读 · 0 评论 -
MyBatis-------批量更新
在Oracle数据库中批量更新。需要传递一个List集合,然户进行循环执行SQL语句。 参考网站:https://www.cnblogs.com/feixian/p/5960111.html 如果操作成功,返回值为 Integer 类型的 -1 语法如下:<update id="updateList" para...原创 2018-08-06 17:33:26 · 1275 阅读 · 0 评论 -
MyBatis分页插件
参考链接:https://blog.csdn.net/eson_15/article/details/52270046第一步:导入依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifac...原创 2020-04-06 11:49:58 · 10878 阅读 · 2 评论 -
MyBatis批量插入
一、在MySQL数据库中 在mysql数据库中,使用的是foreach标签。foreach元素的属性主要有 collection,item,index,open,separator,close。 常用的有item ,这个是迭代的每一个元素的代表,相当于JSTL的<foreach>标签中的 var 标签,是临时的元素的代表。迭代的...原创 2018-03-30 13:16:58 · 4786 阅读 · 1 评论 -
MyBatis--------占位符${}与#{}
一、基本区别 简单的说就是#{}传过来的参数带单引号'',而${}传过来的参数不带单引号。 涉及到这个问题,最初是在毕业设计项目中,进行动态排序发现的问题。看下面的SQL语句<select id="getArticleByCondition" resultType="com.ssi.domains.article.entity.Article">...原创 2020-04-06 11:37:01 · 582 阅读 · 0 评论 -
MyBatis--------模糊查询
在Mybaits中,可有3种模糊查询的方式一、使用${ } 如果SQL语句是 LIKE '%#{tag1}%' ,会被编译为:'%?%' 。 这样的话就被当成是一个字符串了。 的确在项目里面报这个错,我就是从这个坑里爬出来的。 应该把#修改为$ ,就像下面这样。<select id="getSimilarTag" resu...原创 2018-03-30 14:33:33 · 3149 阅读 · 0 评论 -
MyBatis-------特殊符号处理(CDATA标签)
一、使用CDATA标签分页语句的SQL语句常常会牵扯到'大于号>'和‘小于号<’,而这些语句在Mybatis的XML中会被解析,从而造成错误。 办法用两种,第一种使用预定义的转义字符。 大于号: &gt;小于号: &lt;比如<select id="getPre...原创 2018-03-30 15:29:51 · 763 阅读 · 0 评论 -
MyBatis-------内查询
select stuId ,teacherId from T_Table 比如上述的SQL语句中,查询出来的数据是stuId和teacherId 。userId对应的那条数据在 T_SYS_PARAM 中,teacherId也在T_SYS_PARAM 表中,但是它们对应的是不同的记录,采用LEFT JOINT_SYS_PARAM 的方法并不奏效。为了查询出学生的名字和老师...原创 2018-05-11 11:41:32 · 363 阅读 · 0 评论 -
MyBatis-------返回值是对象类型需要显示指明
当方法的返回值是Integer类型时候,需要指明ResultType属性。 我今天就没加,我当时想,会不会自动装箱呢?结果哦,好气啊,炸了。 错误信息为:org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found f...原创 2020-04-06 11:07:26 · 7214 阅读 · 0 评论 -
MyBatis--------生成主键
一、在MySQL数据库中的写法 在mysql数据库中,写法比较简单。在Mybatis配置文件中添加 userGeneratedKeys="true" keyProperty="id",这样就能把我们插入的实体的主键id赋值。 注意点:1.实体的id属性需要有setId()方法。2.数据库中的表主键设置为 ...原创 2018-03-30 10:33:44 · 1480 阅读 · 0 评论