Java
吴越南蛮
Java程序员。主要研究的语言是Java,JS,Python,C。坚持原创,拒绝做搬运工。
展开
-
mybatis-plus动态排序
最终会拼接到sql语句的orderby中,后台处理query参数用的是mybatis-plus的LambdaQueryWrapper,问题来了,如何通过"name"这个字符串生成get方法对应的方法引用,也就是User::getName这种。本来想过用QueryWrapper直接传字符串进去,但是前端字段一般都是驼峰的,需要转成下划线形式的,否则会报错。而且其他查询条件也要跟着动,所以就放弃了这种方案。看源码eq这种方法需要的是SFunction,网上关于这方面的资料好难找。原创 2022-12-14 22:42:54 · 3102 阅读 · 2 评论 -
JSONObject与Map互相转换
阿里的fastjson库,看了一下很多方案都是先进行序列化成json字符串,然后再解析,会有性能的问题,其实JSONObject这个类本身就实现了Map接口。原创 2022-11-16 11:16:07 · 14170 阅读 · 0 评论 -
JDBC和SPI
Class.forName做了什么我们在用JDBC的时候,总是会写一句Class.forName("com.mysql.cj.jdbc.Driver");这里以mysql驱动为例,其他驱动都类似。这一步会使用类加载器加载对应的驱动,并执行com.mysql.cj.jdbc.Driver的静态代码块。进入com.mysql.cj.jdbc.Driver静态代码块中完成了驱动的注册,也就是new了一个自身的实例,并注册到DriverManager中DriverManager.registerDr原创 2021-12-31 20:15:26 · 568 阅读 · 0 评论 -
java 打印输出格式类封装
控制台可以输出多种字体样式,前景色和背景色,与语言无关。package com.shy;/** * 字体样式 */enum Style { DEFAULT(0),HIGHLIGHT(1),NOTBOLD(22),UNDERLINE(4),NOTUNDERLINE(24), BLINK(5),NOTBLINK(25),ANTIDISPLAY(7),NOTANTIDISPLAY(27); private int value; Style(int value) {原创 2020-12-20 10:52:55 · 219 阅读 · 3 评论 -
Springboot跨域过滤器
package com.shy.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;import java.util.M原创 2020-11-15 21:28:25 · 116 阅读 · 1 评论 -
定时任务同步文件修改(热部署功能尝试)
手写的嵌入式服务器想增加热部署功能,主要是一些静态文件。所以做了这个尝试。原理是用定时任务每隔一段时间查看文件修改日期,和上一次进行比较,如果不相同,则同步文件到目标地址。MonitorTask.javapackage com.shy.code;import java.io.File;import java.util.HashMap;import java.util.Map;import java.util.TimerTask;/** * 定时任务类 */public class原创 2020-10-02 00:27:09 · 224 阅读 · 0 评论 -
手写服务器之文件上传
之前写的服务器完善了一下,新增文件上传的功能。这个记录的是一次尝试的首先是主方法,和以前一样,启动一个ServetSocket,每接收到一个客户端就开启一条线程。package com.shy.myCat;import com.shy.myCat.thread.ClientThread;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 主入口类 * */public原创 2020-09-19 23:45:42 · 224 阅读 · 0 评论 -
手写jdbcTemplate
以前也封装过一些DBUtil,但是封装得没有jdbcTemplate彻底,试着实现了一些常用的功能。主要是回调函数的应用,以及模板方法设计模式。主类package com.shy.core;import com.shy.defaultImpls.DefaultPreparedStatementCreator;import com.shy.defaultImpls.DefaultPreparedStatementSetter;import com.shy.exceptions.DataAcces原创 2020-09-13 11:03:40 · 383 阅读 · 0 评论 -
Mybatis日志输出sql语句参数填充
Mybatis日志输出sql语句是带?的,要拎出来查询的话不太方便。所以写了这个,自动替换所有的?为实际的参数。package com.shy;import lombok.Data;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;@Datapublic class SqlLog { private Strin原创 2020-07-22 21:15:27 · 2025 阅读 · 0 评论 -
Oracle SQL INSERT语句转存储过程
Oracle的CLOB或者是BLOB类型的字段,如果直接插入字符串,而且字符串的长度大于4000的话,总是会报错。网上找了有一种可行的方案是创建存储过程,定义变量去替换原来的字符串。但是只适合单条的情况,比如说我有一堆sql文件,但是因为这个原因执行不了,手敲的话根本就不可能完成。所以利用Druid的SqlParser API完成了这个脚本,可以自动完成转换。package com.shy;import com.alibaba.druid.sql.ast.SQLExpr;import com.a原创 2020-06-26 18:09:19 · 342 阅读 · 0 评论 -
Java中的枚举
枚举类,是一个可以提供有限个数的实例的类模板。它有点类似单例模式,如果说实例个数为1的话,就等同于单例模式。我们在学习这个的时候,一般是先学习enum关键字的写法,再去学习自定义枚举类。我觉得应该先去学习自定义枚举类,因为enum关键字只是一种简化的写法,这样更容易弄清一个东西实质。枚举在具体的项目中还是挺多的,可以用来表示一些常量,维护修改都比较方便,而且可以见名知意。先来看一个自定义的枚举类。public class MyEnum { //提供两个实例 public final st原创 2020-05-19 22:27:20 · 100 阅读 · 0 评论 -
简单的JSP编译器
把jsp文件编译成一个Servlet,没有用到正则。也没有用到第三方包。不支持EL和JSTL,功能比较简单。index.jsp<%@ page import="java.text.SimpleDateFormat" %><%@ page import="java.util.Date" %><%@ page contentType="text/html;char...原创 2020-04-28 11:46:19 · 1215 阅读 · 0 评论 -
手写LinkedList
基本原理和C语言的双向链表差不多package demo1;import java.lang.reflect.Array;import java.util.*;public class MyLinkedList<E> implements List<E>{ private Node<E> firstNode; private Nod...原创 2020-04-25 14:16:50 · 94 阅读 · 0 评论 -
读取class文件中方法的形参名
当时在模仿写springmvc的时候,需要用到方法中的形参名,无法通过反射获得,所以我去读了class文件。有很多bug,比如说没有考虑方法重写的情况,类不能有接口。解析常量池还是挺管用的。package mymvc.classreader;import com.controller.Controller1;import java.io.FileInputStream;import ja...原创 2020-04-23 22:43:22 · 365 阅读 · 0 评论 -
手写http服务器之request部分
有很多不合理的地方,比如说应该维护字节数组来提高效率。package myCat.request;import myCat.config.Config;import myCat.cookie.Cookie;import myCat.servletcontext.ServletContext;import myCat.session.HttpSession;import myCat.s...原创 2020-04-23 22:38:00 · 294 阅读 · 0 评论 -
模仿mybatis中的连接池
我手写的三大框架系列之mybatis中的连接池部分,目前因为时间问题都烂尾了。一些统计数据package com.shy.mineBatisCode.datasource.pooled;/** PoolState:用于管理PooledConnection对象状态的组件,通过两个list分别 管理空闲状态的连接资源和活跃状态的连接资源 */import java.util.Array...原创 2020-04-23 22:32:15 · 155 阅读 · 0 评论 -
手写ArrayList
package javaCopy.util;import java.io.Serializable;public class ArrayListCopy extends AbstractListCopy implements ListCopy, Serializable { transient Object[] elementData;//对象数组 private int s...原创 2019-11-18 15:24:51 · 127 阅读 · 0 评论 -
Java一百亿计算器加法案例
一百亿计算器加法案例,其实就是模拟手算的过程。package BigDataCalculator;import java.util.ArrayList;import java.util.Collections;class BigData{ private int[] data; public BigData(String number) { byte[]...原创 2019-11-14 19:09:15 · 317 阅读 · 0 评论 -
手写StringBuilder
模仿Java中StringBuffer类底层实现package StringBufferDemo;public final class StringBufferCopy { private char[] chars = new char[16];//数组初始长度设为16 private int capacity = 0;//初始容量为0 public StringB...原创 2019-11-14 19:06:47 · 307 阅读 · 1 评论