<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jothan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/studyhard_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; studyhard_]]></copyright><item><title><![CDATA[MyBatis-Plus关键功能使用]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/140636833</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/140636833</guid><author>studyhard_</author><pubDate>Wed, 24 Jul 2024 17:49:44 +0800</pubDate><description><![CDATA[用了好几年的MyBatis-Plus，有些偏僻的功能不经常用，去用的时候老是忘记，还需要重新查阅官网，借这篇文章的机会，记录一下，帮助他人也方便自己今后查阅。]]></description><category></category></item><item><title><![CDATA[SpringBoot 多环境配置文件切换]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/127018784</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/127018784</guid><author>studyhard_</author><pubDate>Fri, 23 Sep 2022 22:44:33 +0800</pubDate><description><![CDATA[springboot中的多配置文件切换]]></description><category></category></item><item><title><![CDATA[springboot+mybatis拦截器实现水平分表操作]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/126237400</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/126237400</guid><author>studyhard_</author><pubDate>Mon, 08 Aug 2022 23:02:22 +0800</pubDate><description><![CDATA[Override// MetaObject是mybatis里面提供的一个工具类，类似反射的效果// 获取Mapper执行方法// 获取分表注解// 如果method与class都没有TableShard注解或执行方法不存在，执行下一个插件逻辑}//获取值，此值就是拿的注解上value值，注解上value设定的值，并在传入对象中获取，根据业务可以选择适当的值即可，我选取此值的目的是同一台设备的值存入一张表中，有hash冲突的值也存在一张表中。......]]></description><category></category></item><item><title><![CDATA[记 SpringBoot 使用@RequestBody 接收不到参数]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/126231897</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/126231897</guid><author>studyhard_</author><pubDate>Mon, 08 Aug 2022 17:22:05 +0800</pubDate><description><![CDATA[POST请求，前端传的参数名字跟后端规定的参数一样。但是通过@RequestBody注解接收的参数始终为NULL！//实体类中属性没有用驼峰命名/*** 标题*/]]></description><category></category></item><item><title><![CDATA[IDEA中GIT使用技巧]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/122148906</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/122148906</guid><author>studyhard_</author><pubDate>Sun, 26 Dec 2021 20:51:57 +0800</pubDate><description><![CDATA[1 前言：

在Java开发中Git是我们作为程序员来说最最最常用的代码管理工具，在IDE中也很好的集成了Git，通过可视化的方式让我们使用起来更加方便，但是我们在方便我们的同时也带来了很大的安全隐患，稍不注意有可能就会拿去祭天，所以熟练并清楚的知道每个按钮作用是什么对我们来说又变得至关重要，故写此篇文章记录一下。

2 图文说明

2.1 忽略空格改变，格式改变的比较


应用场景：当你的code format方式和同事的不一样时，查看改变的代码时，就会出现（如图①）的情况，设置为【红框】内容，就会忽略这]]></description><category></category></item><item><title><![CDATA[SQL各关键字执行顺序（MySQL）]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/121681613</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/121681613</guid><author>studyhard_</author><pubDate>Thu, 02 Dec 2021 17:08:16 +0800</pubDate><description><![CDATA[1前言

 首先给出SQL各关键字的执行顺序，最后再给出说明；

2 上干货


（8）SELECT（9）DISTINCT &lt;select_list&gt;
（1）FROM &lt;left_table&gt;
（3）&lt;join_type&gt; JOIN &lt;right_table&gt;
（2）ON &lt;join_condition&gt;
（4）WHERE &lt;where_condition&gt;
（5）GROUP BY &lt;grout_by_list&gt;
（6）..]]></description><category></category></item><item><title><![CDATA[Money 工具类]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/121592314</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/121592314</guid><author>studyhard_</author><pubDate>Sun, 28 Nov 2021 15:31:25 +0800</pubDate><description><![CDATA[1 前言：

今天在公司的工具包下看到一个工具类，看着不错，先发个博客收藏起来再说，以备不时之需。

2上代码


import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Currency;

/**
 * 单币种货币类，处理货币算术、币种和取整。
 *
 * &lt;p&gt;
 * 货币类中封装了货币金额和币种。目前金额在内部是long类型表示，
 * 单位是所属币种的最小货币单位（对人民币是分）。
 *
 *]]></description><category></category></item><item><title><![CDATA[集合的常用形式的简单创建]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/120330898</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/120330898</guid><author>studyhard_</author><pubDate>Thu, 16 Sep 2021 16:57:17 +0800</pubDate><description><![CDATA[1 前言

在写业务的时候，我们经常碰到对集合的使用，并经常使用其多种状态等等，今天小记一下最顺手的实现方式，以便开发中使用。

2 创建空集合



在包 java.util.Collections下提供的静态方法；


创建空List：List&lt;T&gt; emptyList()
	创建空Map：Map&lt;K, V&gt; emptyMap()
	创建空Set：Set&lt;T&gt; emptySet()
注意：返回的空集合是不可变集合，无法向其中添加或删除元素。


3 创建单元素集合

]]></description><category></category></item><item><title><![CDATA[Spring @Value(“#{}“)和@Value(“${}“)]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/120081077</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/120081077</guid><author>studyhard_</author><pubDate>Wed, 15 Sep 2021 06:44:46 +0800</pubDate><description><![CDATA[1前言

    以前对spring中@Value没有太注意，看到同事把这个注解用的花里胡哨，我就感觉铁子牛逼666呀，迭代版本结束了，我就对这个注解研究研究，争取也牛逼666。

2 #号和$符的不同用法

2.1 $符的用法


总的来说就是：用于获取配置文件中的属性值；


2.1.1简单用法：

通常用于获取写在application.properties中的内容，例如在配置文件中：


jdbc.driverClass=com.mysql
jdbc.url=3306@local
jdbc...]]></description><category></category></item><item><title><![CDATA[SpringBoot单元测试时实现回滚事务]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/119979498</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/119979498</guid><author>studyhard_</author><pubDate>Mon, 30 Aug 2021 14:02:56 +0800</pubDate><description><![CDATA[1 前言：

为了避免和减少bug的出现，公司质量检验团队对开发人员提出了写单测的要求，其中代码覆盖率80%以上，******（爆粗口），在写单测的过程中非常想在做 update，delete，insert操作时不把事务提交，造成数据库中的数据应该单测而搞的乱糟糟的。

2 方案

2.1增加一个@Transactional注解


@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = WebApplication.class).]]></description><category></category></item><item><title><![CDATA[基于SpringBoot的策略模式多实现类注入（Map注入）]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/119047732</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/119047732</guid><author>studyhard_</author><pubDate>Sat, 24 Jul 2021 01:36:20 +0800</pubDate><description><![CDATA[1前言

在业务处理的过程中遇见一个场景，设备分A,B,C,他们都是对应的实现都是正删改查，但是不同的设备对应的增删改查业务逻辑有存在差异，这个时候如果不想办法设计代码就会出现A,B,C三个设备都要写一个对应接口（XXXserver），然后分别再去实现他们（XXXserverImpl），如果后来再增加一台设备D，我们又要去重复相关接口和实现，不仅显得代码冗余，更是不好维护和管理，所以利用设计模式---策略模式就解决了这个问题。

2基础知识

2.1对@Autowired注解的理解

在平常使用中我们对@A]]></description><category></category></item><item><title><![CDATA[IDEA中查看方法的调用链]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/118864054</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/118864054</guid><author>studyhard_</author><pubDate>Sat, 17 Jul 2021 23:46:44 +0800</pubDate><description><![CDATA[1前言

在工作中作为开发人员常常会遇到技改或者对底层逻辑的改造，如果是自己写的逻辑还会知道对这个方法的逻辑的修改会造成什么样的影响，但是别人写的逻辑就很苦恼，当写这个逻辑同学已经拜拜了，那更是一脸懵逼，所以这个时候知道这个被修改逻辑的方法被哪些方法调用过和这个调用方法的方法又被哪些方法调用过，这个对确定影响范围的时候就显得无比的重要，故对IDEA对方法的调用链使用技巧做一记录总结

2 Java方法调用树

2.1把光标放在方法名上，IDEA中可以在主菜单中选择Navigate --&gt;Call Hi]]></description><category></category></item><item><title><![CDATA[Stream流debugger的使用]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/118831364</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/118831364</guid><author>studyhard_</author><pubDate>Fri, 16 Jul 2021 23:39:48 +0800</pubDate><description><![CDATA[1 前言


Stream是Java 8 API添加的一个新的抽象，可以让开发者在数据节点上直接处理筛选、排序、聚合等操作，很多情况只需要一行代码就可以简洁的解决问题。但是在使用过程中如果程序运行结果和期望不一样调试起来也是很头疼的事，IntelliJ提供了很好用的组件专门用来调试Stream, 新版本的IntelliJ已经内置了这个插件，老版本的可以在插件仓库中搜索java stream debugger安装。

2上干货

2.1 代码准备


Stream.of("Howareyou?","Java.]]></description><category></category></item><item><title><![CDATA[本地开发直连]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/114367196</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/114367196</guid><author>studyhard_</author><pubDate>Thu, 04 Mar 2021 14:11:18 +0800</pubDate><description><![CDATA[1前言：没有前言
2步骤
①.修改apollo参数，dubbo.registry.register = false，表示只订阅，不注册。
②.在user.home下新建，dubbo−resolve.properties文件com.xxx.xxxService=dubbo://localhost:20880windows下{user.home}下新建，dubbo-resolve.properties文件
      com.xxx.xxxService=dubbo://localhost:20880
    ]]></description><category></category></item><item><title><![CDATA[Dubbo服务规范]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/114362530</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/114362530</guid><author>studyhard_</author><pubDate>Thu, 04 Mar 2021 11:23:24 +0800</pubDate><description><![CDATA[1前言：在公司使用dubbo框架的一些约定，记录一下，后期其他项目使用直接借鉴，嘿嘿！
2项目命名规则
2.1 服务消费方：业务名-api，如图

2.2 服务生产方：业务名-server ，如图：

3 项目架构
3.1.业务模型设计分为：Controller层、Service层、Manage层、Cache层、DAO层。
3.2.数据模型设计分为：DTO，DO，VO。
3.3.各模型功能描述：

Controller层：控制层；
Service层：单表业务；
Manage层：多表业务；
Cache层：缓存]]></description><category></category></item><item><title><![CDATA[SpringBoot 内部方法调用，事务不起作用的原因及解决办法]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/114303712</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/114303712</guid><author>studyhard_</author><pubDate>Wed, 03 Mar 2021 14:57:08 +0800</pubDate><description><![CDATA[1.1 前言： 在做业务开发时，遇到了一个事务不起作用的问题。大概流程是这样的，在同一个类中，两个及以上带有事务的方法调用（例如;有方法A(),B(),在A()中调用B()），失败后事务没有回滚。查阅资料后，问题得到解决，记录下来分享给大家。
1.2 代码示例
    /**
     * 内部调用新增方法
     *
     * @param user
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
   ]]></description><category></category></item><item><title><![CDATA[Mysql中explain用法和结果字段的含义介绍]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/114139590</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/114139590</guid><author>studyhard_</author><pubDate>Fri, 26 Feb 2021 16:43:35 +0800</pubDate><description><![CDATA[1 前言： 没有前言，看符不符合你口味就中了。
2 explain执行计划的显示形式
mysql&gt; explain select * from students;
+----+-------------+----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  ]]></description><category></category></item><item><title><![CDATA[base64  Util]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/111404675</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/111404675</guid><author>studyhard_</author><pubDate>Sat, 19 Dec 2020 14:49:08 +0800</pubDate><description><![CDATA[1前言：没有前言，直接上代码。
package com.wheat.sunshine.pay.provider.utils;

import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * @Title:Base64DecodedMultipartFile
 * @Author: lys
 * @Date:2020/12/18
 * @Descrption:
 */
public class Base64]]></description><category></category></item><item><title><![CDATA[网络编程之网络通信协议]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/110500204</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/110500204</guid><author>studyhard_</author><pubDate>Tue, 15 Dec 2020 21:51:01 +0800</pubDate><description><![CDATA[1 前言：上一次对网络编程的基础做了一下概述，这次对网络的通信协议做一下概述，主要是对传输层协议进行学习记录。
2 网络通信协议
2.1什么是网络通信协议：计算机网络中实现通信必须有一些约定，即通信协议，对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
2.2 socket的简单介绍
2.2.1  什么是socket: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
2.2.2 socket认识
 通信的两端都要有Socket，是两台机器间通信的端点。
 ]]></description><category></category></item><item><title><![CDATA[springboot接口接收参数同时支持json和form表单形式]]></title><link>https://blog.youkuaiyun.com/studyhard_/article/details/110497611</link><guid>https://blog.youkuaiyun.com/studyhard_/article/details/110497611</guid><author>studyhard_</author><pubDate>Wed, 02 Dec 2020 20:24:20 +0800</pubDate><description><![CDATA[1前言：因为在公司做的是对外开放式api接口，让第三方调用，因为业务需求我们一个子项目需要在调用我们的接口的基础上做一下调整，但是这次他们传参一开始使用表单形式提交的，但是他的参数中有&amp;这个符号（例如：http://testmb.4000750222.com/IntelligentVehicleManager/same/#/transition?laneNo=1524&amp;callbackType=2），所以在我们这边接参的时候会把callbackType=2丢失掉，所以改变个接参策略，用jso]]></description><category></category></item></channel></rss>