<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小菜鸟的博客]]></title><description><![CDATA[一个刚刚走上程序员之路的小菜鸟记录的点点滴滴]]></description><link>https://blog.youkuaiyun.com/ys3198</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ys3198]]></copyright><item><title><![CDATA[策略模式结合spring使用优化后的第二版本（符合开闭原则的版本）]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/118198174</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/118198174</guid><author>ys3198</author><pubDate>Thu, 24 Jun 2021 23:00:54 +0800</pubDate><description><![CDATA[前一段时间写一篇策略模式结合spring使用，但是最近发现一点点小问题，就是上次的写法他不符合开闭原则。

开闭原则呢简单来说就是:一个软件实体应该通过扩展来实现变化，而不是通过修改已有的代码来实现变化的(具体的大家可以自行百度)
我们原先的代码呢如下：
public class ActionHandlerFactory {
  private static Map&lt;Byte, ActionHandler&gt; ROUT_MAP;

  @Autowired
  private TeacherAct]]></description><category></category></item><item><title><![CDATA[guava提升你的开发效率]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/117930358</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/117930358</guid><author>ys3198</author><pubDate>Tue, 15 Jun 2021 18:12:04 +0800</pubDate><description><![CDATA[现在的java开发中已经有了很多的方便的工具来辅助我们开发，这里就简单讲一下guava常用的一些方法
Optional
这个在java中也有用于判断对象是否为空的
 // 创建空的Optional对象
        Optional.empty();

        // 使用非null值创建Optional对象如果传入了一个null 会抛出空指针异常
        Optional.of("aaaaa");

        // 使用任意值创建Optional对象
        Optional]]></description><category></category></item><item><title><![CDATA[lamda流编程]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/117821288</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/117821288</guid><author>ys3198</author><pubDate>Fri, 11 Jun 2021 16:30:24 +0800</pubDate><description><![CDATA[lamda表达式的流编程在项目中基本上也是很常用的了，这次对常用的一些表达式进行一些记录加深自己的印象，让自己的代码看起来更加的高端大气上档次 哈哈哈哈哈

filter
list.stream()

                // filter
                .filter(sku -&gt;
                        SkuCategoryEnum.BOOKS
                                .equals(sku.getSk]]></description><category></category></item><item><title><![CDATA[mongodb常用的聚合管道操作]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/116533059</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/116533059</guid><author>ys3198</author><pubDate>Fri, 11 Jun 2021 11:03:32 +0800</pubDate><description><![CDATA[# 常用的一些mg的聚合管道操作


```
db.mg_live_gather_data.aggregate([{
$project:{
_id:0,
answerStatus:1,
clientName:{$multiply:["$type",2]} //可以输出自定义列的名称
}
}])
```


可以输出想要的列和自定义列的名称，将某个列重新起别名的是要如下代码


```
db.mg_live_gather_data.aggregate([{
$project:{
_id:0,...]]></description><category></category></item><item><title><![CDATA[lamda常用的函数式接口]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/117809525</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/117809525</guid><author>ys3198</author><pubDate>Fri, 11 Jun 2021 11:02:20 +0800</pubDate><description><![CDATA[记录一些常用的函数式接口
在java中lamda已经定义好了一些函数式接口，为了避免忘记这里对一些常用的接口做一些记录加深一下印象
使用的时候在你的方法中就可以把这个函数式接口当做参数传入。
典型的使用例子：

//list转化成另一个list
 public static &lt;F, T&gt; List&lt;T&gt; convertToList(List&lt;F&gt; fs, Function&lt;F, T&gt; function) {
    if (CollectionUtils.is]]></description><category></category></item><item><title><![CDATA[白话 spring session 源码]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/117534156</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/117534156</guid><author>ys3198</author><pubDate>Thu, 03 Jun 2021 20:41:45 +0800</pubDate><description><![CDATA[# 项目中一直使用spring session但是以前都是只有在使用没有深入了解其原理，这次碰巧项目不是很忙仔细研究了一下他的原理
## spring session 的使用
使用很简单网上一大堆教程这里面就简单说一下
引入jar包

```
&lt;dependency&gt;
   &lt;groupId&gt;org.springframework.session&lt;/groupId&gt;
   &lt;artifactId&gt;spring-session-data-redis...]]></description><category></category></item><item><title><![CDATA[mg常用的语句 增删改查]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/116532636</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/116532636</guid><author>ys3198</author><pubDate>Sat, 08 May 2021 16:32:07 +0800</pubDate><description><![CDATA[记录一下平时使用的mg查询语句，省的忘了

## 插入语句


```
db.mg_crm_user.insertOne({});
db.mg_crm_user.insertMany([{},{}],{ordered:true}) // ordered 就是插入的文档需要顺序
db.mg_crm_user.save();
db.mg_crm_user.insert();//可以插入多个 也可以插入一个
db.mg_crm_user.insertOne({_id:{userId:1,type:0}}); ..]]></description><category></category></item><item><title><![CDATA[spring mybatis多数据源开启事务，数据源不能切换的解决办法及源码分析（看完之后你绝不后悔）]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/116229491</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/116229491</guid><author>ys3198</author><pubDate>Wed, 28 Apr 2021 11:29:46 +0800</pubDate><description><![CDATA[上一章我们已经讲解了spring的读写分离,但是如果加入事务的时候切换数据源就失败了，搞了半天居然换来这种结果。。。。



这边文章就会带着大家深入了解问什么加入事务之后切换数据源会失败及解决办法。下面的文章会将一些源码，这些鬼东西读起来很烦，但是我们已经走到这步了只能硬着头皮硬钢！！！





```
@Transactional
 public void all(){
  TestService currentclass= (TestService ) AopContext.currentP...]]></description><category></category></item><item><title><![CDATA[spring mybatis 下的多数据源]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/116202449</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/116202449</guid><author>ys3198</author><pubDate>Wed, 28 Apr 2021 11:29:21 +0800</pubDate><description><![CDATA[# spring mybtis 下的多数据源

最近在项目中遇到了需要读写分离的需求优化,在此正好记录一下这次实现的过程及遇到的问题和自己的一些扩展（机智如我）。实现的方式就是一些公共的方案:

1 继承**AbstractRoutingDataSource** 重写 **determineCurrentLookupKey** 方法

2 使用 自定义注解 aop 的方式切换数据源

使用上述方法基本上可以完成多数据源的读写分离了，那还等什么？
![](https://files.mdnice.com/us]]></description><category></category></item><item><title><![CDATA[策略模式结合spring的使用]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/115550160</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/115550160</guid><author>ys3198</author><pubDate>Fri, 09 Apr 2021 14:48:57 +0800</pubDate><description><![CDATA[# 策略模式结合spring使用
我们在项目中经常会遇到if else 特别多的情况，比如前段穿了一个type,不同type 数据处理的流程逻辑也不相同，正常情况我们会怎么做呢?就会像下面一样:

```
if("aa".equals(type)){
  //一顿处理
}else if("bb".equals(type)){
  //又是一顿处理
}else if(){
 
}else if(){
 
}else if(){
 
}
```
当然了,自己写的呢我们自己肯定可以看懂了...]]></description><category></category></item><item><title><![CDATA[Spring的点点滴滴之aop]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53398352</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53398352</guid><author>ys3198</author><pubDate>Tue, 29 Nov 2016 19:43:21 +0800</pubDate><description><![CDATA[我个人对aop的理解就是在不改变原有代码的基础上嵌入一些公共的服务，aop的本质就是动态代理 
在使用aop之前先要导入两个架包： 
 
之后就是配置文件的一些配置，如下： 
加入这些： xmlns:aop="http://www.springframework.org/schema/aop"http://www.springframework.org/schema/aop
        http]]></description><category></category></item><item><title><![CDATA[Spring的点点滴滴之动态代理]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53392386</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53392386</guid><author>ys3198</author><pubDate>Tue, 29 Nov 2016 14:36:34 +0800</pubDate><description><![CDATA[动态代理的一些代码的举例public class ProxyInvocationHandler implements InvocationHandler{
    private Object target;
    public void setTarget(Object target) {
        this.target = target;
    }    public Object]]></description><category></category></item><item><title><![CDATA[Spring点点滴滴之静态代理]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53383915</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53383915</guid><author>ys3198</author><pubDate>Mon, 28 Nov 2016 20:25:35 +0800</pubDate><description><![CDATA[最近学习了静态代理，首先举个例子，就是租房子的例子。在这里有房东，中介，和我（租房子的）。这里房东将房子委托给中介，中介带这我去看房子，房子满意房东将房子租给我，我把中介费给中介。这就是一个静态代理的过程。中介代理了租房子的过程，而且在这个过程中加入了自己的一些业务（带人看房子，收中介费）。 
简单的用例图就是这样的 
下面就是一些简单的代码：public interface userService]]></description><category></category></item><item><title><![CDATA[Spring的点点滴滴之依赖注入]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53378340</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53378340</guid><author>ys3198</author><pubDate>Mon, 28 Nov 2016 15:25:18 +0800</pubDate><description><![CDATA[最近学习了依赖注入把自己所学的记录下来，首先就是有构造方法的依赖注入，要用到，这种标签的用法一般如下<constructor-arg name="" value="></constructor-arg> 
      <constructor-arg index="" value="></constructor-arg> 
      <constructor-arg name="" ref="">]]></description><category></category></item><item><title><![CDATA[对象类型的判断]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53168696</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53168696</guid><author>ys3198</author><pubDate>Tue, 15 Nov 2016 10:20:00 +0800</pubDate><description><![CDATA[Object param = params.get(i);
   if (param instanceof Integer) {
    int value = ((Integer) param).intValue();
   } else if (param instanceof String) {
    String s = (String) param;
   } else if (para]]></description><category></category></item><item><title><![CDATA[map的遍历]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53168550</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53168550</guid><author>ys3198</author><pubDate>Tue, 15 Nov 2016 10:08:33 +0800</pubDate><description><![CDATA[最近刚刚用到了map的遍历，由于有一点忘了所以在使用完之后在此记下来以便以后使用。 
代码如下Map map=new HashMap<Integer,String>();
        map.put(1, "nihasdasao");
        map.put(2, "nihsdasdao");
        map.put(3, "nisdadshao");
        map.p]]></description><category></category></item><item><title><![CDATA[SpringMvc的点点滴滴之springMvc的配置]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53080309</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53080309</guid><author>ys3198</author><pubDate>Tue, 08 Nov 2016 11:12:59 +0800</pubDate><description><![CDATA[今天将最近学的springMvc整理一下，首先就是搭建一个springMvc，第一步创建一个项目，将架包复制到lib下面。第二步就是在web.xml下配置前段控制器DispatcherServlet<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servle]]></description><category></category></item><item><title><![CDATA[springMvc的点点滴滴]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53070101</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53070101</guid><author>ys3198</author><pubDate>Mon, 07 Nov 2016 20:14:32 +0800</pubDate><description><![CDATA[这个主要是讲解一下自己遇到的@InitBinder的问题，这个@InitBinder实际上就是在springmvc中，当表单向后台传递日期类型的数据时，由于springmvc不能自动在后台转化Date类型的参数（int可以自动转化成String等等），所以用到了@InitBinder。实际上客户端向服务器传递参数都是通过request.getparameter来传递的，传递到后台实际上是字符串，这]]></description><category></category></item><item><title><![CDATA[springMvc中的@InitBinder]]></title><link>https://blog.youkuaiyun.com/ys3198/article/details/53070064</link><guid>https://blog.youkuaiyun.com/ys3198/article/details/53070064</guid><author>ys3198</author><pubDate>Mon, 07 Nov 2016 20:11:55 +0800</pubDate><description><![CDATA[这个主要是讲解一下自己遇到的@InitBinder的问题，这个@InitBinder实际上就是在springmvc中，当表单向后台传递日期类型的数据时，由于springmvc不能自动在后台转化Date类型的参数（int可以自动转化成String等等），所以用到了@InitBinder。实际上客户端向服务器传递参数都是通过request.getparameter来传递的，传递到后台实际上是字符串，这时]]></description><category></category></item></channel></rss>