一个无用工具类
富贵不能淫;贫贱不能移;威武不能屈;此之谓大丈夫。——《孟子·滕文公下》
前两天看了点mybatis-plus源码,又看了点手工耿的视频,就有感而发,写下这个工具类
介绍:
平时我们返回给前端返回值就像这样
我们每次都要写这个魔法值key
这样一两个都还好,但久而久之可能会写错
如果我们如果遇到比较长的字段名,可能就要写很长很长,并且没有编译器的提示
所以我照着mybatis-plus源码,顺便用了它一点方法,写了下面这个工具类
这个工具类里就一个方法和一个接口,以及一个测试的主函数,可以通过Lambda表达式获取到它的属性名
package com.ruben.utils;/** * @ClassName: FunctionUtils * @Date: 2020/11/9 0009 23:43 * @Description: */import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;import com.baomidou.mybatisplus.core.toolkit.support.SerializedLam ...
Function
应该笑着面对生活,不管一切如何。——伏契克
java8的Function这个类
它有一个@FunctionalInterface注解
这里举个例子
首先我们看apply
解释为
表示接受一个参数并产生一个结果的功能。这是一个功能性的接口,其功能性的方法是apply(Object) 。
简单来说,你可以使用它里面的apply方法,这个方法参数为lambda写法的函数,返回值为函数执行的结果
我们实际写法如下
执行了apply能调用getUsername返回我们的username为ruben
源码这里的T为我们实际写的User,R为返回结果String
public class FunctionDemo { public static void main(String[] args) { System.out.println(getUsername(User::getUsername, user)); } public static String getUsername(Function<User, Strin ...
建造者模式
外观往往和事物的本身完全不符,世人都容易为表面的装饰所欺骗。——《威尼斯商人》
这两天开发中用到了建造者模式,写起来感觉挺爽的
以前我们创建一个javabean
/** * 自定义pojo */public static class Teacher { private String name; private Integer age; @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } publ ...
stream流分组
前两天补充了博客中写的java8的stream的用法
今天再写个分组的
例如我们下面需要根据奇数偶数分组
可以先新建一个list
List<Integer> integerList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0));
然后进行分组
Map<Boolean, List<Integer>> collect = integerList.stream().collect(Collectors.groupingBy(data -> data % 2 == 0));List<Integer> evenNumbers = collect.get(true);List<Integer> oddNumber = collect.get(false);System.out.println("data % 2 == 0-----------");evenNumbers.forEach(System.out::pri ...
mysql案例数据库
人类的悲剧,就是想延长自己的寿命。我们往往只憧憬地平线那真个神奇玫瑰园,而忘了去赏识今天窗外正在盛开的玫瑰花。——(美)戴尔·卡耐基
昨天有群友问
那这里就分享一下mysql官网的案例数据库,下载下来就是sql文件,执行完就有现成的用于练手的数据
首先进入mysql官网的其他文档
可以看到下方的Example Databases
我们选一个下载Zip
下载完了里面就是一个sql文件
比如我下载的world.sql
下载完直接执行就有大堆数据用来练手啦!
模板字符串
生活不是苦难,也不是享乐,而是我们应当为之奋斗并坚持到底的事业。——托克维尔
这种东西那是相当的简单啊
# JavaScript模板字符串使用var name = "achao";console.log(`我是${name}`);var number = 0;console.log(`今年${(number + 38) / 2}`);var word = "模板字符串";console.log(`${name}说:\'${word}\'那不是一般的香\n${rubenSaid()}`);function rubenSaid() { return `ruben说:${name}说的对!`;}
代码执行结果
使用@Select注解写<foreach>
智慧是宝石,如果用谦虚镶边,就会更加灿烂夺目。——高尔基
只需要加<sceipt>标签就可以了
@Select({"<script>" + "select * from user where id in " + "<foreach item = 'id' index = 'index' collection = 'list' open='(' separator=',' close=')'>" + "#{id}" + "</foreach>" + "</script>"})List<User> selectUserByIds(L ...
MybatisCodeHelperPro
取之有制,用之有节则裕;取之无制,用之不节则乏。——张居正《论时政疏》
安装插件,官网
然后重启idea
来到我们的xml
点击箭头,点击Test current xml tag
这个时候发现需要激活
我们点击试用就行了
然后回来再次点击发现直接帮我们生成了sql
还有很多功能
通过方法名(不需要方法的返回值和参数 会自动推导出来)来生成sql 可以生成大部分单表操作的sql 只需要一个方法的名字即可 会自动补全好方法的参数和返回值 和springdatajpa的语句基本一致xml sql几乎所有地方都有自动提示,sql正确性检测,插件会识别mybatis的一系列标签 如 include trim set where,在这些标签之后的sql可以自动提示数据库的字段,检测sql的正确性,从此不用担心sql写错直接从Intellij自带的数据库或者配置一个数据库生成crud代码 自动检测好 useGeneratedkey 自动配置好模块的文件夹 只用添加包名就可以生成代码了从java类生成建表语句数据库添加字段后可以继续生成,不会修改之前已经在接口或xml添加的自定义的方法 ...
java8的stream流(二)
字典里最重要的三个词,就是意志、工作、等待。我将要在这三块基石上建立我成功的金字塔——(法)巴斯德
之前写过一个关于stream流的博客,这次再做个补充吧
// 取出第一条,没取到则为0Integer first = someNumber.stream().findFirst().orElse(0);// 随机取一个,没取到则为0Integer any = someNumber.stream().findAny().orElse(0);// 直接取和,没取到则为0Integer sum = someNumber.stream().reduce(Integer::sum).orElse(0);// 不包含20为trueboolean noneMatch = someNumber.stream().noneMatch(data -> data == 20);// 全部大于0为trueboolean allMatch = someNumber.stream().allMatch(data -> data > 0);// 任何等于0为trueboolean anyMatc ...
超级简单的安卓图片下载
我们的眼睛就是我们的监狱,我们的眼光所到之处就是我们监狱的围墙。——尼采
首先请求授权
然后我们这里引入依赖
implementation 'com.hujiang.restvolley:restvolley:1.0.1'
然后调用函数
String filename = url.substring(url.lastIndexOf("/")); String localPath = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + filename; RestVolleyDownload.download(context, url, localPath, new RestVolleyDownload.OnDownloadListener() { @Override public void onDownloadStart(St ...