MyBatis故事:
官方网站: http://www.mybatis.org
官方文档: http://www.mybatis.org/mybatis-3/
GitHub:https://github.com/mybatis
通过在MyBatis的官方网站,我们会看到和MyBatis相关的一些软件产品:
MyBatis Migrations 是一款数据库迁移工具 http://www.mybatis.org/migrations ;
MyBatipse (Eclipse plugin) ,Eclipse插件提供在编写xml配置文件 时的内容提示和验证;
MyBatis Generator 代码生成工具;
What is MyBatis?
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis SQL mapper framework for Java可以将其称之为Java持久层框架.
MyBatis 的前身是apache下的一个开源项目iBatis, iBATIS是一个由Clinton Begin 在2002年发起的开源项目,是一个基于Java的持久层框架。
iBATIS:http://ibatis.apache.org
iBATIS这个项目于2010年6月16号由apache迁移到了google code,iBatis3.x并且改名为MyBatis 。
MyBatis: http://code.google.com/p/mybatis/ (现在已经无法打开)
2013年11月MyBatis又从google code将代码迁移到Github。
MyBatis和Hibernate
MyBatis的作者:Clinton Begin 加拿大人 https://www.linkedin.com/in/clintonbegin
Hibernate 2001年推出的Java持久层框架,澳大利亚人 Gavin King https://www.linkedin.com/in/GavinKing
人们经常喜欢比较这两款优秀的持久层框架的特点:
技术
优点
缺点
jdbc
简单,纯粹,一切均可见,最基础的一种技术
1:需要手动关闭连接
2:结果集不能自动映射为对象
3:SQL夹杂在代码中,耦合度高,导致硬编码内伤
4:实际开发中SQL经常随需求变动,导致频繁修改,不易维护
jdbcTemplate
简单、纯粹、自动会话管理、结果集映射
需要手动拼装 SQL,SQL与Java代码混合在一起,长的SQL管理混乱
Hibernate
JPA
编程效率高,无需编写 SQL。 数据库更换成本低
较完善的二级缓存、自动防 SQL注入
完全掌握的门槛高 ; 复杂 SQL、复杂映射处理困难; 性能优化较麻烦、不易做特殊优化 ; 基于全映射的全自动框架,大量字段的 POJO进行部分映射时比较困难,导致数据库性能下降;
MyBatis
学习成本低、可以进行更为 细腻 的 SQL优化,减少查询字段、统一的SQL管理 SQL和 Java编码分开,功能边界清晰
需要手动编写维护 SQL、表结构变更之后需要手动维护SQL与映射;
MyBatis的定位
MyBatis专注于SQL本身,其为SQL映射,而非完整的SQL映射,它是一个半自动的ORM框架,需要自己编写SQL语句,这是其优点,也是缺点.
优点:SQL语句单独维护,便于SQL优化,便于发挥SQL的最大性能.
缺点:当数据库表和字段更改后,实体和数据库的映射关系需要手动维护,耗费时间长.
使用场景:是用于性能要求高,有大量的查询操作,适用于互联网项目,如:电商,O2O
互联网项目对持久层的需求:
1:对数据库的访问更加纯粹
2:尽可能不要使用数据库做运算
3:SQL语句尽可能命中索引(字段排序,查询字段,查询条件,尽可能命中索引)
MyBatis实战应用:
Mybatis框架就一个jar包;要使用 MyBatis, 只需将 mybatis-3.5.1.jar 文件置于 classpath 中即可。
使用Maven构建项目
org.mybatis
mybatis
3.5 .1
下载 MyBatis源码,构建 MyBatis 项目;https://codeload.github.com/mybatis/mybatis-3/zip/mybatis-3.5.1
如果不出意外,我们解压下载的压缩包,然后通过pom.xml导入IDEA中,通过Maven的compiler就可以正常编译成功,首次编译可能需要一定时间。
为了验证我么编译的项目是否可用,我们可以写一个简单的案例项目去测试一下,也方便后续的断点跟踪源码分析。
创建普通的Maven项目,添加Maven依赖
junit
junit
4.11
test
mysql
mysql-connector-java
5.1 .47
org.projectlombok
lombok
1.18 .8
org.slf4j
slf4j-api
1.7 .26
org.apache.logging.log4j
log4j-api
2.11 .2
org.apache.logging.log4j
log4j-slf4j-impl
2.11 .2
cglib
cglib
3.3 .0
org.javassist
javassist
3.27 .0 -GA
添加resources编译,个人建议添加
src/main/java
**/* .xml
src/main/resources
**/ *.*
添加jdbc.properties,根据自身配置
jdbc.username=xxx
jdbc.password =xxxxx
jdbc.driver =com.mysql.jdbc.Driver
jdbc.url =jdbc:mysql:// xxxx:3306/xxx?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
最后贴上mybatis的xml配置
"1.0 " encoding=" UTF-8 " ?>
DOCTYPE configuration
PUBLIC " -//mybatis.org//DTD Config 3.0//EN "
" http://mybatis.org/dtd/mybatis-3-config.dtd " >
"D:\mybatis-3-mybatis-3.5.1\mybatis3-test\src\main\resources\jdbc.properties " />
"logImpl " value=" SLF4J " />
"cacheEnabled " value=" true " />
"com.xxx.model.User " alias=" User " />
"com.xxx.type.CryptHandlerType "
javaType =" com.xxx.model.IdCardType " />
default=" development " >
"development " >
"org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"test " >
"JDBC " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"product " >
"JDBC " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"com/xxx/mapper/UsersMapper.xml " />
日志配置
"1.0 " encoding=" UTF-8 " ?>
"debug " >
"Console " target=" SYSTEM_OUT " >
"%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n " />
"debug " >
ref=" Console " />
贴上本人的项目结构,仅供参考
MyBatis独立使用
// 通过配置文件获取输入流
InputStream resourceAsStream = Resources.getResourceAsStream(" mybatis-config.xml " );
// 构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 打开session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 第四步 获取Mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class );
// 第五步 调用Mapper接口对象的方法操作数据库
User user = mapper.selectByPrimaryKey(1 );
// 获取结果,处理业务
log.info(" 查询结果: " ,user.getId());
当我们数据库配置等都设置完毕,正常来说查询数据是不会出现异常的,这样就说明我们的源码编译是成功的。
MyBatis Generator (MBG)
MyBatis Generator 简称MBG,是用Java语言开发 的一个代码生成工具,可以深入分析你的数据库和表,帮助你生成基本的对数据库的 CRUD操作代码以及QBC风格的条件查询,但是表连接、存储过程等这些复杂SQL的定义需要我们手工编写。
MyBatis Generator 生成3个东西:
1、POJO
2、Mapper XML Files
3、Mapper interface
MyBatis Generator 生成代码不需要依赖任何第三方jar包,仅仅需要一个jdbc驱动包;
文档: http://www.mybatis.org/generator/
Github:https://github.com/mybatis/generator
原来 MyBatis Generator老版本:ibator,用于iBatis代码生成;
1、配置 MyBatis Generator (MBG) 的配置文件;
"1.0 " encoding=" UTF-8 " ?>
DOCTYPE generatorConfiguration
PUBLIC " -//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN "
" http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd " >
"jdbc.properties " />
"F:/mysql-connector-java-5.1.46.jar " />
"tables " targetRuntime=" MyBatis3 " >
"suppressAllComments " value=" true " />
"driverClass " value=" ${jdbc.driver} " />
"connectionURL " value=" ${jdbc.url} " />
"userId " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"org.mybatis.model " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"trimStrings " value=" false " />
"org.mybatis.mapper " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"XMLMAPPER " targetPackage=" org.mybatis.mapper " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"user "
domainObjectName =" User "
enableCountByExample =" false "
enableUpdateByExample =" false "
enableDeleteByExample =" false "
enableSelectByExample =" false "
selectByExampleQueryId =" false " />
1、生成代码
--通过命令行生成 java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml ( 用得比较少 )
--通过Ant生成 ( ant几乎被淘汰了)
--通过java程序生成
--通过maven生成
org.mybatis.generator
mybatis-generator-maven-plugin
1.3 .7
src/main/resources/generatorConfig.xml
true
true
--通过Eclipse生成
建议不要用 mysql驱动8.0, 用 5.1.x系列的驱动;
使用maven插件通过以下方式即可自动生成。
在源码分析的前面,我会分享一些MyBatis的常规应用
你可能感兴趣的:(MyBatis源码分析(一))
深入理解 Java 内存模型(JMM):原理、可见性与并发控制
全栈探索者chen
java java 开发语言 缓存 程序人生 数据库 JMM 内存
深入理解Java内存模型(JMM):原理、可见性与并发控制1.引言在多线程编程中,内存可见性、指令重排序和线程同步是开发者必须理解的核心概念。Java内存模型(JMM,JavaMemoryModel)定义了一组规则,确保Java程序在并发环境下的线程安全性和一致性。本文将深入剖析JMM的原理,并通过代码示例展示如何正确控制并发。2.什么是Java内存模型(JMM)?Java内存模型(JMM)是Ja
Java 并发编程实战:深入理解线程池的核心原理与最佳实践
全栈探索者chen
java java 服务器 开发语言 性能优化 缓存 node.js 数据库
Java并发编程实战:深入理解线程池的核心原理与最佳实践1.为什么需要线程池?在Java并发编程中,直接创建和管理线程的成本较高,频繁创建线程会带来性能开销和资源浪费。线程池(ThreadPool)的作用:降低线程创建和销毁的开销,提高系统响应速度。提高系统吞吐量,充分利用CPU资源。避免资源耗尽,限制最大线程数,防止OOM(内存溢出)。支持任务排队,确保任务按照一定规则执行。2.线程池的核心组成
STM32F1基于HAL库的学习记录实用使用教程分享(五、PWM驱动舵机、呼吸灯)
藤樂.
STM32学习 stm32 学习 数据库
往期内容STM32F1基于HAL库的学习记录实用使用教程分享(一、GPIO_Output)STM32F1基于HAL库的学习记录实用使用教程分享(二、GPIO_Input按键)STM32F1基于HAL库的学习记录实用使用教程分享(三、外部中断按键)STM32F1基于HAL库的学习记录实用使用教程分享(四、OLEDIIC驱动软件IIC硬件IIC)文章目录往期内容前言一、PWMPWM如何控制LED亮度?
linux——线程
這~悸ベ雨落憂殇
Linux linux java android
线程概念什么是线程?在一个程序里的一个执行流叫做线程。一切进程至少有一个线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化我们都知道在每一个进程都有属于自己的PCB,里面装满了描述进程的各种字段…,而线程呢,是在进程中产生的,所以会共享共一个进程地址空间,如上图所示。线程的优点创建一个新线程的代价要比创建一个新进程小与进程之间
为什么要制定执行标准?
德为先科技
标准 执行标准 业界资讯 大数据
一、确保工作质量和效率1、明确工作要求:清晰界定各项工作的具体内容、流程和质量标准,员工能明确努力方向,减少工作中的不确定性和盲目性,从而提高工作质量和效率。2、规范操作流程:统一工作方法和步骤,避免因个人操作差异导致的质量波动或效率低下,有助于实现标准化作业,便于进行质量控制和管理。二、保障产品或服务的一致性1、满足客户期望:无论何时何地,客户都能享受到质量稳定、标准统一的产品或服务,有助于树立
制定执行标准的意义有哪些?
德为先科技
执行标准 标准 大数据 业界资讯
1、规范行为和流程:为组织内的各项工作提供明确的准则和规范,使员工的行为和工作流程标准化、规范化,减少随意性和不确定性,确保工作的一致性和连贯性。2、提高管理效率:管理者依据执行标准进行管理,能够更清晰地了解工作进展和质量情况,便于发现问题、解决问题,从而提高管理的效率和效果,降低管理成本。3、保障产品和服务质量:明确产品或服务应达到的质量水平,有助于在生产和服务过程中进行严格的质量控制,确保向客
自动化测试 —— Pytest fixture及conftest详解
程序员曦曦
软件测试 pytest 功能测试 软件测试 自动化测试 程序人生 职场和发展
前言fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在,类似unittest中setup/teardown,但是比它们要强大、灵活很多,它的优势是可以跨文件共享。一、Pytestfixture1.pytestfix
OpenSSH详解:构建安全远程管理的核心技术
ScilogyHunter
常见软件库 安全 OpenSSH
OpenSSH详解:构建安全远程管理的核心技术引言在数字化时代,远程管理服务器和数据传输的安全性至关重要。OpenSSH(OpenSecureShell)作为SSH协议的开源实现,通过加密通信、身份验证和数据完整性保护,彻底解决了传统工具(如Telnet、FTP)的明文传输风险。本文将从核心原理、配置实践到高级功能,全面解析OpenSSH的技术细节与应用场景。一、OpenSSH的核心架构与工作原理
火语言 RPA 的独特优势:为何它能脱颖而出?
IDFaucet
rpa
(一)低门槛上手:技术小白的福音与其他一些需要深厚编程基础才能操作的自动化工具不同,火语言RPA的语法设计极其亲民。它采用类似于自然语言的表达方式,通过简单的指令组合,就能实现复杂的自动化流程。例如,“打开Excel文件‘销售数据.xlsx’,选中A1到C10单元格区域,计算平均值并将结果填入D1单元格”,这样一段简单的描述,通过火语言稍加整理就能转化为可执行的自动化脚本。这意味着,即使你从未接触
关于vue+element ui 中的导航菜单问题
空心闲人
前端 程序员
关于vue+elementui中的导航菜单问题最近公司要开发一个vue项目,自己搭框架的时候用到了element,目标是实现一个顶部菜单以及侧边菜单栏。直接上代码。importcommonHeaderfrom"@/components/header"importleftContentfrom"@/components/leftContent"exportdefault{name:'layout',
交换机救命命令手册:华为 & 思科平台最全运维指令速查表
IT程序媛-桃子
数通 华为认证 服务器 运维
引言:这是一份救命的交换机运维秘籍在交换机配置与故障排查过程中,不论你是初入网络世界的小白,还是年资数年的资深工程师,总会遇到那些“关键时刻靠得住的命令”。这篇文章,我将整理一份覆盖华为+思科双平台的实战命令手册,从最基础的设备状态查看,到VLAN、STP、防环、LACP、QOS、抓包、限速、安全加固等操作,通通囊括。关键时刻,拿来即用,就是这篇的全部意义。01️⃣基础生存命令:先活下来再说场景华
利用AI与MySQL提升工业物联网健康监测的智慧水平——构建预测性维护的新纪元
墨夶
数据库学习资料1 人工智能 mysql 物联网
在工业4.0和智能制造的大背景下,如何确保生产设备的高效稳定运行成为企业竞争力的核心要素之一。传统的事后维修方式已经难以满足现代制造业的需求,而基于人工智能(AI)的预测性维护系统则为这一挑战提供了全新的解决方案。今天,我们将深入探讨如何结合AI技术和MySQL数据库,打造一个智能、高效的工业物联网(IIoT)健康监测平台,助力企业在激烈的市场竞争中脱颖而出。一、为什么选择AI+MySQL?1.A
MySQL中基于机器学习的自适应缓存热点识别优化策略——开启数据库性能新纪元
墨夶
数据库学习资料1 数据库 mysql 机器学习
在数据驱动的世界里,数据库的性能直接影响到整个应用系统的响应速度和用户体验。随着业务量的增长和技术的发展,传统的缓存机制逐渐暴露出局限性。如何更智能地识别并利用热点数据进行缓存优化,成为提升数据库性能的关键所在。今天,我们将深入探讨一种创新的方法——基于机器学习的自适应缓存热点识别优化策略,并分享其在MySQL中的具体实现方案。为什么选择机器学习?传统上,开发者们依赖于手动配置或预设规则来决定哪
数据安全新纪元——多方安全计算与MySQL结合的隐私预算管理深度解析
墨夶
数据库学习资料1 安全 mysql android
在当今数字化时代,数据已成为企业最宝贵的资产之一。然而,随着数据泄露事件频发,如何确保数据的安全性和隐私性成为了亟待解决的问题。传统的加密技术虽然能在一定程度上保护静态数据,但在动态数据分析过程中却显得力不从心。为了解决这一难题,隐私计算作为一种新兴的技术应运而生,它允许在不解密原始数据的前提下进行有效的计算和分析。本文将深入探讨如何利用多方安全计算(MPC)与关系型数据库MySQL相结合的方式实
27寸显示屏,字体看着比较小,如何调大?>?
Gin387
学习
win+i打开设置点击辅助功能,然后选择文本大小,我的27寸,2k显示屏,然后字体设置的是110%的大小看着是比较舒服的。注意点:1.有些设置可能是需要重启之后才可以,更改的,比如我发的上一博客,(关于如何去掉桌面图标下面的文字的黑色背影的方法)这个就是需要重启之后才可以设置的东西。
python中rmdir和rmtree的用法
Gin387
python
shutil.rmtree()是Python中shutil模块提供的一个函数,用于递归删除整个目录树(包括子目录和所有文件)。os.rmdir()(只能删除空目录)不同,shutil.rmtree()可以强制删除非空目录importshutil#删除指定目录及其所有内容shutil.rmtree('path/to/directory')
Linux:动静态库
嶔某
Linux linux 运维 服务器
✨✨所属专栏:Linux✨✨✨✨作者主页:嶔某✨✨什么是库库是写好的现有的,成熟的可以复用的代码。现实中每个程序都需要依赖很多基础的底层库。世界上有很多大佬为了实现某一个功能,写了很多很NB的代码。他们把代码封装成一个库,这样我们不必写出像他们一样厉害的代码,只需要使用它们分享的库,也能使用对应的功能了。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。静态库.a[Linux/
springCloud集成tdengine(原生和mapper方式) 其二 原生篇
张小娟
spring cloud tdengine spring
mapper篇请看另一篇文章一、引入pom文件com.taosdata.jdbctaos-jdbcdriver3.5.3二、在nacos中填写数据库各种value值tdengine:datasource:location:yourLocationusername:rootpassword:yourPassword三、编写TDengineUtil文件下方util文件里面,包含创建database的方
构建 Python 插件架构:打造灵活可扩展的模块化应用
全栈探索者chen
python python 架构 开发语言 学习 机器学习 程序人生 插件
构建Python插件架构:打造灵活可扩展的模块化应用前言在现代软件开发中,单一的代码库往往难以满足不断变化的业务需求和多样化的扩展场景。如何设计一个应用,使其既能保持核心功能的稳定,又能轻松集成第三方功能、模块或定制化扩展?答案就是——插件架构。通过插件架构,你可以让应用具备极高的灵活性,支持动态加载、无缝扩展以及解耦维护。本文将深入探讨如何在Python中设计和构建一个插件架构。从核心概念、模块
OpenCV图像拼接(4)图像拼接模块的一个匹配器类cv::detail::BestOf2NearestRangeMatcher
村北头的码农
OpenCV opencv 人工智能 计算机视觉
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述cv::detail::BestOf2NearestRangeMatcher是OpenCV库中用于图像拼接模块的一个匹配器类,专门用于寻找两幅图像之间的最佳特征点匹配。它是基于“最近邻与次近邻距离比”原则来过滤匹配点对的,以提高匹配结果的准确性。这个类特别适用于需
Java 24 正式发布:AI 开发与后量子安全引领企业级编程革命
程序猿小白菜
后端java生态圈 java 人工智能 安全
摘要2025年3月18日,Oracle正式发布Java24(OracleJDK24),这是Java诞生30周年之际的重要版本更新。新版本聚焦AI开发支持、后量子安全加密、性能优化和开发效率提升,提供20余项新特性及数千项改进,为企业级应用开发注入全新动力。一、语言特性:代码简洁性与模式匹配增强Java24在语法层面进一步简化代码逻辑,提升开发效率:JEP488:原始类型模式匹配(第二次预览)支持在
股票市场的量化交易策略如何应对市场情绪变化?
云策量化
程序化炒股 量化软件 量化交易 量化炒股 QMT 股票交易 PTrade 量化交易 股票投资 deepseek
推荐阅读:《程序化炒股:如何申请官方交易接口权限?个人账户可以申请吗?》股票市场的量化交易策略如何应对市场情绪变化?在股票市场中,量化交易策略是一种基于数学模型和算法的交易方式,它通过分析历史数据来预测未来价格走势,并据此制定交易决策。然而,市场情绪的变化对股票价格有着不可忽视的影响。本文将探讨量化交易策略如何应对市场情绪的变化,并提供一些具体的代码示例。一、市场情绪的重要性市场情绪是指投资者对市
股神系列:蒋菲的量化投资中,如何利用大数据优化模型?她的数据来源有哪些?
云策量化
量化交易 量化软件 量化炒股 量化炒股 QMT 量化交易 入门教程 PTrade 股票投资 deepseek
推荐阅读:《程序化炒股:如何申请官方交易接口权限?个人账户可以申请吗?》标题:股神系列:蒋菲的量化投资中,如何利用大数据优化模型?她的数据来源有哪些?正文:在金融投资的世界里,量化投资以其科学、系统和客观的特点,成为了众多投资者追求的“圣杯”。而在量化投资领域,蒋菲以其独特的大数据量化投资模型而闻名。本文将深入探讨蒋菲如何利用大数据优化其量化投资模型,以及她的数据来源有哪些。一、量化投资模型的优化
【产品经理修炼之道】-UX设计实践技巧
xiaoli8748_软件开发
产品经理 产品经理 ux
本文将深入探讨一系列实践方法,帮助您创建出既美观又实用的产品,确保满足用户的多样化需求。无论您是设计师、产品经理还是创业者,这些策略都将对您的工作产生积极影响。UX设计(用户体验设计)对创建用户友好且高效的产品至关重要。01实践方法在本节中,我们将讨论一些可以帮助您为产品打造最佳用户体验的实践方法。1.理解您的用户在开始设计任何产品或功能之前,了解和理解您的用户至关重要。进行用户研究,创建用户画像
解决前后端分离跨域产生的session丢失问题
luckilyil
BUG java servlet
目录前言存储用户信息的方式Cookies:Token(令牌):LocalStorage/SessionStorage:Session:Redis:OAuth/OIDC:本篇文章主要讲使用session会话来存储信息会话机制1.何为一次会话,会话从什么时候开始,从什么时候结束?2.cookies如何保持会话,它的工作流程?3.什么是Session?Session的工作原理:问题出现解决方法总结前言现
产品经理必备知识之网页设计系列(二)-如何设计出一个优秀的界面
文宇肃然
产品运营系列课程 快速学习实战应用 界面设计 产品设计 产品经理 网页设计
前言第一部分参见产品经理必备知识之网页设计系列(一)-创建出色用户体验https://blog.csdn.net/wenyusuran/article/details/108199875第三部分参见产品经理必备知识之网页设计系列(三)-移动端适配&无障碍设计及测试https://wenyusuran.blog.csdn.net/article/details/108199947设计师和开发人员在构
练1:编写一个 NumPy 程序来创建一个 10x10 矩阵,其中边界上的元素是 1,内部元素是 0。练2:编写一个 NumPy 程序来创建一个 4x4 矩阵,其中 0 和 1 交错,主对角线都是0.
weixin_57738499
numpy 矩阵 线性代数
importnumpyasnp'''练习1:编写一个NumPy程序来创建一个10x10矩阵,其中边界上的元素是1,内部元素是0。'''x1=np.ones((10,10))#创建一个10行10列全1的数组x1[1:-1,1:-1]=0print(x1)'''练习2:编写一个NumPy程序来创建一个4x4矩阵,其中0和1交错,主对角线都是0。'''x2=np.zeros((4,4))x2[::2,1
31天Python入门——第11天:挑战一口气把闭包·装饰器讲明白
安然无虞
Python手把手教程 python 开发语言 后端 pyqt
你好,我是安然无虞。文章目录1.闭包扩展知识:闭包的自由变量是如何存储的2.装饰器装饰器的应用场景3.补充练习1.闭包闭包是指在一个函数内部定义的函数,并且这个内部函数可以访问外部函数的变量、参数.换句话说,闭包是一个包含了函数及其相关引用环境的组合体.在Python中,当一个函数返回了内部函数的引用时,这个内部函数可以访问并操作外部函数的局部变量,它就创建了一个闭包,即使外部函数已经执行完毕,它
算法笔记——前缀树、贪心算法(更新ing.......
不吃香菜的码农
左神算法笔记 算法 数据结构 贪心算法 leetcode 堆栈
前缀树、贪心算法一、前缀树1.什么是前缀树2.如何生成前缀树二、贪心算法1.拼接字符串2.金条问题3.项目会议时间问题4.项目收益最大化4.随时获得数据流的中位数一、前缀树1.什么是前缀树前缀树一般指字典树这是指一种结构而不是一类题(注意信息是在树的路上)典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查
Go 语言实用工具:如何高效解压 ZIP 文件
程序员爱钓鱼
golang ios 开发语言
在日常开发中,我们经常需要处理ZIP文件,例如从远程服务器下载压缩包后解压、备份数据或处理日志文件等。在本文中,我们将介绍一个使用Go语言编写的高效ZIP文件解压工具,并提供示例代码帮助你快速上手。代码实现以下是Unzip函数的完整实现,它可以将ZIP文件解压到指定的目录,并返回解压后的文件路径列表。packageutilsimport("archive/zip""fmt""io""os""pat
html
周华华
html
js
1,数组的排列
var arr=[1,4,234,43,52,];
for(var x=0;x<arr.length;x++){
for(var y=x-1;y<arr.length;y++){
if(arr[x]<arr[y]){
&
【Struts2 四】Struts2拦截器
bit1129
struts2拦截器
Struts2框架是基于拦截器实现的,可以对某个Action进行拦截,然后某些逻辑处理,拦截器相当于AOP里面的环绕通知,即在Action方法的执行之前和之后根据需要添加相应的逻辑。事实上,即使struts.xml没有任何关于拦截器的配置,Struts2也会为我们添加一组默认的拦截器,最常见的是,请求参数自动绑定到Action对应的字段上。
Struts2中自定义拦截器的步骤是:
make:cc 命令未找到解决方法
daizj
linux 命令未知 make cc
安装rz sz程序时,报下面错误:
[root@slave2 src]# make posix
cc -O -DPOSIX -DMD=2 rz.c -o rz
make: cc:命令未找到
make: *** [posix] 错误 127
系统:centos 6.6
环境:虚拟机
错误原因:系统未安装gcc,这个是由于在安
Oracle之Job应用
周凡杨
oracle job
最近写服务,服务上线后,需要写一个定时执行的SQL脚本,清理并更新数据库表里的数据,应用到了Oracle 的 Job的相关知识。在此总结一下。
一:查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行
多线程机制
朱辉辉33
多线程
转至http://blog.csdn.net/lj70024/archive/2010/04/06/5455790.aspx
程序、进程和线程:
程序是一段静态的代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的
web报表工具FineReport使用中遇到的常见报错及解决办法(一)
老A不折腾
web报表 finereport java报表 报表工具
FineReport使用中遇到的常见报错及解决办法(一)
这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、address pool is full:
含义:地址池满,连接数超过并发数上
mysql rpm安装后没有my.cnf
林鹤霄
没有my.cnf
Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,
至于为什么没有这个文件而MySQL却也能正常启动和作用,在这儿有两个说法,
第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动,
第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于r
Kindle Fire HDX root并安装谷歌服务框架之后仍无法登陆谷歌账号的问题
aigo
root
原文:http://kindlefireforkid.com/how-to-setup-a-google-account-on-amazon-fire-tablet/
Step 4: Run ADB command from your PC
On the PC, you need install Amazon Fire ADB driver and instal
javascript 中var提升的典型实例
alxw4616
JavaScript
// 刚刚在书上看到的一个小问题,很有意思.大家一起思考下吧
myname = 'global';
var fn = function () {
console.log(myname); // undefined
var myname = 'local';
console.log(myname); // local
};
fn()
// 上述代码实际上等同于以下代码
m
定时器和获取时间的使用
百合不是茶
时间的转换 定时器
定时器:定时创建任务在游戏设计的时候用的比较多
Timer();定时器
TImerTask();Timer的子类 由 Timer 安排为一次执行或重复执行的任务。
定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定
JDK1.5 Queue
bijian1013
java thread java多线程 Queue
JDK1.5 Queue
LinkedList:
LinkedList不是同步的。如果多个线程同时访问列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方
http认证原理和https
bijian1013
http https
一.基础介绍
在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更加安全。
Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后
【Java范型五】范型继承
bit1129
java
定义如下一个抽象的范型类,其中定义了两个范型参数,T1,T2
package com.tom.lang.generics;
public abstract class SuperGenerics<T1, T2> {
private T1 t1;
private T2 t2;
public abstract void doIt(T
【Nginx六】nginx.conf常用指令(Directive)
bit1129
Directive
1. worker_processes 8;
表示Nginx将启动8个工作者进程,通过ps -ef|grep nginx,会发现有8个Nginx Worker Process在运行
nobody 53879 118449 0 Apr22 ? 00:26:15 nginx: worker process
lua 遍历Header头部
ronin47
lua header 遍历
local headers = ngx.req.get_headers()
ngx.say("headers begin", "<br/>")
ngx.say("Host : ", he
java-32.通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小(两数组的差最小)。
bylijinnan
java
import java.util.Arrays;
public class MinSumASumB {
/**
* Q32.有两个序列a,b,大小都为n,序列元素的值任意整数,无序.
*
* 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
* 例如:
* int[] a = {100,99,98,1,2,3
redis
开窍的石头
redis
在redis的redis.conf配置文件中找到# requirepass foobared
把它替换成requirepass 12356789 后边的12356789就是你的密码
打开redis客户端输入config get requirepass
返回
redis 127.0.0.1:6379> config get requirepass
1) "require
[JAVA图像与图形]现有的GPU架构支持JAVA语言吗?
comsci
java语言
无论是opengl还是cuda,都是建立在C语言体系架构基础上的,在未来,图像图形处理业务快速发展,相关领域市场不断扩大的情况下,我们JAVA语言系统怎么从这么庞大,且还在不断扩大的市场上分到一块蛋糕,是值得每个JAVAER认真思考和行动的事情
安装ubuntu14.04登录后花屏了怎么办
cuiyadll
ubuntu
这个情况,一般属于显卡驱动问题。
可以先尝试安装显卡的官方闭源驱动。
按键盘三个键:CTRL + ALT + F1
进入终端,输入用户名和密码登录终端:
安装amd的显卡驱动
sudo
apt-get
install
fglrx
安装nvidia显卡驱动
sudo
ap
SSL 与 数字证书 的基本概念和工作原理
darrenzhu
加密 ssl 证书 密钥 签名
SSL 与 数字证书 的基本概念和工作原理
http://www.linuxde.net/2012/03/8301.html
SSL握手协议的目的是或最终结果是让客户端和服务器拥有一个共同的密钥,握手协议本身是基于非对称加密机制的,之后就使用共同的密钥基于对称加密机制进行信息交换。
http://www.ibm.com/developerworks/cn/webspher
Ubuntu设置ip的步骤
dcj3sjt126com
ubuntu
在单位的一台机器完全装了Ubuntu Server,但回家只能在XP上VM一个,装的时候网卡是DHCP的,用ifconfig查了一下ip是192.168.92.128,可以ping通。
转载不是错:
Ubuntu命令行修改网络配置方法
/etc/network/interfaces打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.
1. 以D
php包管理工具推荐
dcj3sjt126com
PHP Composer
http://www.phpcomposer.com/
Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
中文文档
入门指南
下载
安装包列表
Composer 中国镜像
Gson使用四(TypeAdapter)
eksliang
json gson Gson自定义转换器 gsonTypeAdapter
转载请出自出处:http://eksliang.iteye.com/blog/2175595 一.概述
Gson的TypeAapter可以理解成自定义序列化和返序列化 二、应用场景举例
例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都
JQM控件之Navbar和Tabs
gundumw100
html xml css
在JQM中使用导航栏Navbar是简单的。
只需要将data-role="navbar"赋给div即可:
<div data-role="navbar">
<ul>
<li><a href="#" class="ui-btn-active&qu
利用归并排序算法对大文件进行排序
iwindyforest
java 归并排序 大文件 分治法 Merge sort
归并排序算法介绍,请参照Wikipeida
zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
基本思想:
大文件分割成行数相等的两个子文件,递归(归并排序)两个子文件,直到递归到分割成的子文件低于限制行数
低于限制行数的子文件直接排序
两个排序好的子文件归并到父文件
直到最后所有排序好的父文件归并到输入
iOS UIWebView URL拦截
啸笑天
UIWebView
本文译者:candeladiao,原文:URL filtering for UIWebView on the iPhone说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以想把javascript文件打包在app里,当UIWebView需要加载该脚本时就从app本地读取,但UIWebView并不支持加载本地资源。最后从下文中找到了解决方法,第一次翻译,难免有
索引的碎片整理SQL语句
macroli
sql
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL
--设置最大允许的碎片数量,超过则对索引进行碎片
Angularjs同步操作http请求with $promise
qiaolevip
每天进步一点点 学习永无止境 AngularJS 纵观千象
// Define a factory
app.factory('profilePromise', ['$q', 'AccountService', function($q, AccountService) {
var deferred = $q.defer();
AccountService.getProfile().then(function(res) {
hibernate联合查询问题
sxj19881213
sql Hibernate HQL 联合查询
最近在用hibernate做项目,遇到了联合查询的问题,以及联合查询中的N+1问题。
针对无外键关联的联合查询,我做了HQL和SQL的实验,希望能帮助到大家。(我使用的版本是hibernate3.3.2)
1 几个常识:
(1)hql中的几种join查询,只有在外键关联、并且作了相应配置时才能使用。
(2)hql的默认查询策略,在进行联合查询时,会产
struts2.xml
wuai
struts
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache