在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。如果你踩过这个坑,并且知道具体的原因,那这篇文章可以加深你的印象。...通过调用链,往后走三步,我们可以看到sql是从boundSql中获取到的: ? 那么boundSql是从哪里来的呢?我们继续往回走。 往回走11步,我们可以看到boundSql的获取过程: ?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...然后还有其他的大量文章都只是扔给你一个解决方法,并没有写为什么这样写就可以解决这个问题。...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
这是why技术的第14篇原创文章 在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。...通过调用链,往后走三步,我们可以看到sql是从boundSql中获取到的: ? 那么boundSql是从哪里来的呢?我们继续往回走。 往回走11步,我们可以看到boundSql的获取过程: ?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...然后还有其他的大量文章都只是扔给你一个解决方法,并没有写为什么这样写就可以解决这个问题。...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
分享一个 linux 技能飞书话题群的一个问题。 ---- 问: 在linux系统里,普通用户目录是在 /home 下,root用户目录在 /root,因此全部用户共享目录的。...那如果我们要装一个东西的话,是不是只用装一遍?(比如说ohmyzsh之类的) 我之前在自己服务器上,每次都需要安装两遍,一次只有当前那个用户生效,这是为什么呢?...---- 答: 不一定,当我们说我们在 linux 装了一个东西,指的是:「我们装了一个命令,可全局执行」。此时是将该命令放在了全局执行目录(或者将该命令目录放在了 $PATH)。...哦对,PATH 该路径列表可自定义,而每一个用户都可以有独立的 PATH 环境变量。...所以,要看一个命令是所有用户共享还是仅对当前用户有效,具体要看该命令是怎么装的,可以看看 which command 进一步排查。
例如:新闻应用可以使用一个片段在左侧显示文章列表,使用另一个片段在右侧显示文章—两个片段并排显示在一个 Activity 中,每个片段都具有自己的一套生命周期回调方法,并各自处理自己的用户输入事件。...也就是说,由于每个片段都会通过各自的生命周期回调来定义其自己的布局和行为,您可以将一个片段加入多个 Activity,因此,您应该采用可复用式设计,避免直接从某个片段直接操纵另一个片段。...这特别重要,因为模块化片段让您可以通过更改片段的组合方式来适应不同的屏幕尺寸。 在设计可同时支持平板电脑和手机的应用时,您可以在不同的布局配置中重复使用您的片段,以根据可用的屏幕空间优化用户体验。...v4,可以向下兼容 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套 的Fragment也是需要嵌套在Activity中的,间接地说,Fragment...Fragment中的UI控件 TextView tv = (TextView) findViewById(R.id.textview); tv.setText("我在Act
> params; //数据填充对象 InputStream is; //读入模板文件的流 XWPFDocument doc; //内存中构建的文档对象 /**...* 使用文件路径和变量集合创建 * * @param templateDocxFile * @param params */ public DocxTemplateUtils...} catch (IOException e) { e.printStackTrace(); } } /** * 使用文件和和变量集合创建...} catch (IOException e) { e.printStackTrace(); } } /** * 使用模板读入的流和变量集合创建...word模板的工具类 **/ public XWPFDocument getDoc() { return doc; } /** * 替换所有段落中的变量
代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示: ?...如上面代码中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个过程中,并无任何异常抛出。 ?...MODE_WORLD_READABLE:表示当前文件可以被其他应用读取. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入 SP.xml中的文件 中的代码片段 //获取SharedPreferences对象 Context ctx = LoginActivity.this; SharedPreferences..."Uemail",user.getUemail()); ed.putString("Usex",user.getUsex()); ed.commit(); 资料编辑Activity中的代码片段
PyQt5是Qt的Python绑定库,既有Qt的强大,又有Python语言的简洁,要实现一个实际场景的GUI程序的时候,确实非常实用而且代码量不是太多。...这里我总结了最近写一个界面时用到的代码片段,希望以后用到的时候能及时拾起来,也希望能帮助到别人。 此外我将这个内容也放到GitHub上,有兴趣的同学可以收藏下。...安装 目前PyQt主要是4和5版本,因为两者不兼容,因此官方建议使用PyQt5, 这里以Python3 为例进行说明。...pip3 install PyQt5 SIP 安装好后可以使用下面这个代码片段测试安装是否成功,如果可以正常运行说明安装已经成功: import sys from PyQt5 import QtCore...,只列出了一些常用的功能,别的功能还得在使用的时候再查找。
应用中的一个 Activity 会被指定为主 Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动另一个 Activity,以执行不同的操作。...可以使用 startActivity() 或 startActivityForResult() 方法启动新 Activity。这两种方法都需要传入一个 Intent 对象。...您可以在一个 Activity 中组合多个片段,从而构建多窗格界面,并在多个 Activity 中重复使用某个片段。...您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(这有点像可以在不同 Activity 中重复使用的...获取对 Fragment 的引用来调用片段中的方法。
大家好,又见面了,我是全栈君。 遇到了一个坑QMediaPlayer::duration的坑....这个坑是当你setMedia之后, 直接使用duration获取播放时长会得到0, 出错时候的代码片段例如以下: void MainWindow::slotPlayAudio(const QString...setMaximum(player_->duration()); //这里的duration返回是0, 从而导致之后处理进度的时候出错 player_->play(); pushButtonPlay->setText...("pause"); } 针对这个问题文档中对此描写叙述是” The value may change across the life time of the QMediaPlayer object...and may not be available when initial playback begins “ 要解决问题能够在响应durationChanged信号的槽中获取duration
6.5 菜单的使用 菜单是屏幕中比较独立的一个元素,它和普通的控件略有不同,很多 GUI 系统都对菜单有单独的接口和运作方式。在 Android 中具有单独接口,用于在活动中使用菜单。...本例使用一个菜单来控制按钮的背景颜色,从其中可以了解如何在应用程序中使用菜单。 ?...建立菜单和调用的代码片段如下所示: public class TestMenu extends Activity { private static final String TAG = "TestMenu...Activity 中的两个函数来实现: public boolean onCreateOptionsMenu(Menu menu) public boolean onOptionsItemSelected...使用这个类可以进行一些更为细节的设置和操作。
springboot中 整合了mail帮助我们更方便的发送邮件 平时我们发送邮件是通过 邮件的服务器发送出去的 比如qq邮件调用qq的邮件服务器 网易的邮件通过网易的服务器 我们使用邮件服务器发送邮件需要提前配置一些内容...我要以使用qq邮箱服务器发送邮件为例 我们登录qq邮箱 点击设置 进来之后点击账户 下拉 找到开启服务 发送一条短信之后即可开启 然后我们点击黄色框中的生成授权码 会给我们生成一个授权码...一会我们需要使用到这个授权码 复制记录好授权码 我们创建一个springboot工程 导入发送邮件的依赖 org.springframework.boot...MimeMessageHelper(mimeMessage,true); helper.setSubject("今天开学"); //Text兼容html片段...参数二 表示当前是否是html标签 helper.setText("今天开学啦!!
为了让程序能响应拖动条滑块位置的改变,程序可以为SeekBar绑定一个OnSeekBaiChangeListener监听器,其三个回调方法如下: onProgressChanged:进度发生改变时会触发...接下来通过一个简单的示例程序来学习系统默认SeekBar的使用。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建seekbar_layout.xml文件,在其中填充如下代码片段: 可以考虑为它绑定一个OnRatingBarChangeListener监听器。 接下来通过一个简单的示例程序来学习系统默认RatingBar的使用。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建ratingbar_layout.xml文件,在其中填充如下代码片段:
使用Snackbar需要导入android-support-design,同时design库依赖于android-support-v7-appcompat,所以design库与appcompat库要同时导入到工程中...另外,Snackbar最好配合控件CoordinatorLayout使用,因为这样Snackbar才能够像通知那样通过右滑手势取消。...Snackbar的用法与Toast类似,常用方法说明如下: make : 构造一个Snackbar对象。可指定提示条的上级视图、提示消息文本、显示时长等信息。...="wrap_content" android:layout_alignParentBottom="true" /> 下面是演示用的代码例子片段...void onClick(View v) { if (v.getId() == R.id.btn_snackbar_simple) { Snackbar.make(cl_container, "把我往右滑动看看会发生什么事
对于一个最简单的文本组件而言 function Text(){ const [text, setText] = useState('载入') return (){ {text} } } 你觉得应该把 text 从 Text 组件中剥离么?...其实很简单只要给这些 jsx 片段绑定上一个共同的 context 就行了, import {createComponent} from 'structured-react-hook' const Component...)} {this.view.renderA()} ) } } }) 参考 前端进阶面试题详细解答 一个组件可以切分任一的...无论跨越多少层, 最终我都会找到你. 所以解决这两个问题, 还需要额外的状态管理么?
对于一个最简单的文本组件而言 function Text(){ const [text, setText] = useState('载入') return (){ {text} } } 你觉得应该把 text 从 Text 组件中剥离么?...其实很简单只要给这些 jsx 片段绑定上一个共同的 context 就行了 import {createComponent} from 'structured-react-hook' const Component...this.view.renderB()} {this.view.renderA()} ) } } }) 一个组件可以切分任一的...无论跨越多少层, 最终我都会找到你. 所以解决这两个问题, 还需要额外的状态管理么?
大家好,又见面了,我是你们的朋友全栈君。...A是发小,和我同岁,但是比我大一级,但现在已经是国科大直博生在读,B是北邮的研一在读。饭间在讨论专业技术的事,因为都是搞计算机的,虽然方向不一样,但也算同行。...其间也谈谈人生,聊聊感触,但是听他们说起来项目,实习,比赛,收入等等,感觉真的不是一个层次的人,哎,变强的路上自闭真的是难免的。 饭后也是九点多了吧,我就直接住在A家了。....setText(0, 'child2') child2.setText(1, '2') # 为child2添加一个子节点child3 child3 = QTreeWidgetItem(child2)...(0,'修改节点') item.setText(1,'值已经被修改') def deleteNode(self): print('删除节点') #防止item是root时,root无父结点报错,要使用下面的写法
因此我们构建的网络请求框架要可以解决以下问题: 分离业务与网络请求代码 网络库可以很容易的被替换 网络库可以很方便的复用 所以在 App 组件化/模块化开发架构思路 一文中,我们把网络请求作为内核层的一个组件...封装第三方网络请求接口 一般来说,目前绝大部分 App 的数据请求都是使用 HTTP 协议,而数据交换的协议使用 json 格式。因此可以封装一个通用的请求接口。...为了减少代码的篇幅,省略一些对本文说明不重要的片段,本文代码可以在 //https://github.com/wecodexyz/Componentization 获取到 void...doRequest() 方法中,该方法实现了网络请求的代码,返回一个 Pair 对象,该对象的 first 属性是一个请求 code ,用于标识网络请求码(即是网络请求返回的...SimpleTextRequest 假设有一个请求业务数据接口,返回数据是一个字符串。那么我们使用我们的框架就是这样来使用。本文例子是请求我们项目中的 README.md 的内容。
接下来通过一个简单的示例程序来学习ImageSwitcher 的使用。...文件,在其中填充如下代码片段: 使用一个最重要的地方就是需要为它指定一个ViewFactory,也就是定义它是如何把内容显示出来的,一般做法为在使用ImageSwitcher的该类中实现ViewFactory...接下来通过一个简单的示例程序来学习TextSwitcher的使用。...继续使用WidgetSample工程的advancedviewsample模块,在app/main/res/layout/目录下创建textwitcher_layout.xml文件,在其中填充如下代码片段
前言 我找了许多资料,发现SWT的很少,但是工作的时候在Eclipse开发窗口化的时候会用到,它相对于Swing来说,外观要更好看一些,性能也好一些,Swing是集成在IDEAJ上的,我通过看SWT face...此方法既可以起到帮助功能又可以起到容错功能。...clearSelection()清除所选文本 五:Combo类 下拉框(Combo)作用是用户从下拉项中 选择选项,用户也可以在下拉框(Combo)中键入选项值。...deselectAll()清除在下拉项中所选的选项(当前选项)getItem(int index)获取接收者(这里是 Combo)下拉项中相对于零给定的索引选项。...setItem(int index, String string)在下拉框的下拉项的指定位置设置选项。 setText(String string)设置当前选项。
领取专属 10元无门槛券
手把手带您无忧上云