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源码分析(一))
高级汇编语言编程技巧与优化
代码世界探索者
汇编语言详解 汇编 linux
一、宏和宏指令1.宏的基本概念•定义:宏是一种文本替换机制。它允许程序员定义一个宏名,并将一组指令或代码片段与该宏名关联起来。在代码中使用宏名时,汇编器会将其替换为对应的指令或代码片段。2.宏的定义和使用(1)定义宏在汇编语言中,宏的定义通常使用MACRO指令开始,以ENDM指令结束。宏的定义包括宏名和一组指令或代码片段。语法:宏名MACRO参数1,参数2,...指令1指令2...ENDM示例:;
【Statsmodels和SciPy介绍与常用方法】
机器学习司猫白
scipy statsmodels 统计
Statsmodels库介绍与常用方法Statsmodels是一个强大的Python库,专注于统计建模和数据分析,广泛应用于经济学、金融、生物统计等领域。它提供了丰富的统计模型、假设检验和数据探索工具,适合进行回归分析、时间序列分析等任务。本文将介绍Statsmodels的核心功能,并通过代码示例展示其常用方法。Statsmodels简介Statsmodels建立在NumPy和SciPy的基础上,
(五)PS识别:压缩痕迹挖掘-压缩量化表与 DCT 系数分析
超龄超能程序猿
机器学习 python 图像处理 人工智能 计算机视觉
(一)PS识别:Python图像分析PS识别之道(二)PS识别:特征识别-直方图分析的从原理到实现(三)PS识别:基于噪声分析PS识别的技术实现(四)PS识别:基于边缘纹理检测分析PS识别的技术实现一介绍本文将介绍一种基于量化表分析和DCT系数分析的图片PS检测方法,帮助你判断图片是否经过处理。二实现原理量化表分析在JPEG图片的压缩过程中,量化表起着关键作用。不同的软件或处理操作可能会改变量化表
数据库MySQL与SQLite
afab
数据库 数据库 sqlite
常用数据库及Qt中的用法一、常用数据库数据库管理系统(DBMS)是旨在使用、检索和定义规则以验证和操作数据库中的数据的软件。有四种DBMS类型:关系型、面向对象型、分层型和网络型。有很多开源数据库,包括MySQL、SQLite等。SQLite:是一个开源的关系型数据库管理系统(RDBMS)。RDBMS在多个二维表中存储数据,而不是一个大表。每张表由包含唯一值的行组成,该值被称为键,用于连接各表。这
算法分析与设计实验2:实现克鲁斯卡尔算法和prim算法
表白墙上别挂我
算法 笔记 经验分享
实验原理(一)克鲁斯卡尔算法:一种用于求解最小生成树问题的贪心算法,该算法的基本思想是按照边的权重从小到大排序,然后依次选择边,并加入生成树中,同时确保不会形成环路,直到生成树包含图中所有的顶点为止。具体步骤:边的排序:将所有边按照权重从小到大排序。初始化:创建一个空的生成树(可以是一个空的图结构),以及一个用于记录每个顶点所属集合(或称为连通分量)的数据结构(例如并查集)。边的选择:依次选择排序
【Rust】数据类型
Panda-gallery
Rust rust 算法 开发语言
目录思维导图1.数据类型概述1.1标量类型1.1.1整数类型1.1.2浮点数类型1.1.3布尔类型1.1.4字符类型1.2复合类型1.2.1元组类型1.2.2数组类型2.类型注解与类型推断3.整数溢出处理4.数字运算5.示例思维导图1.数据类型概述Rust是一种静态类型语言,所有变量的类型在编译时必须明确。Rust支持两种主要的数据类型:标量类型和复合类型。1.1标量类型标量类型表示单一值,Rus
MySQL与SQLite区别
GoKu~
mysql sqlite
MySQL和SQLite都是关系型数据库管理系统(RDBMS),它们都使用SQL(结构化查询语言)作为标准查询语言。然而,尽管它们共享许多共同点,但它们在语法、功能、性能和存储机制方面存在一些差异。以下是一些主要的差异:1.存储引擎:-MySQL:支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有不同的特性,如事务支持、索引类型、数据存储方式等。-SQLite:只有一
Python高频面试题(四)
Irene-HQ
测试 python 自动化测试 python 开发语言 面试 测试工具 github pycharm
以下是Python研发和自动化测试面试中更高阶的专项考点及典型问题一、并发与异步编程(高级)GIL全局解释器锁的应对策略问题:GIL如何影响Python多线程性能?如何绕过GIL限制?答案:GIL使同一时刻仅一个线程执行字节码,CPU密集型任务性能受限绕过方案:使用多进程(multiprocessing)、C扩展(如Cython)、异步IO(asyncio)46协程异步调用示例问题:
SQLite和MySQL数据库的区别与应用
坚持学习的小菜鸟
数据库
简单来说,SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。下面详细介绍两者的区别和应用:SQLiteSQLite是非凡的数据库,他可以进程在使用它的应用中。作为一个自包含、
(面经总结)一篇文章带你整理面试过程中常考的九大排序算法
南淮北安
冲刺大厂之面经总结 面经 排序算法 二分插入 冒泡 快速
文章目录一、二分插入排序1.原理2.代码二、冒泡排序1.原理2.代码三、插入排序算法1.原理2.代码四、快速排序算法1.原理2.代码五、希尔排序1.原理2.代码六、归并排序1.原理2.代码七、桶排序八、基数排序九、堆排序1.原理2.代码十、总结1.算法分类2.性能分析一、二分插入排序首先必须是排好序的数组,然后通过二分查找,找到合适的位置,插入1.原理二分查找算法又叫作折半查找,要求待查找的序列有
Python常考面试题汇总(附答案)
TT图图
面试 职场和发展
写在前面本文面向中高级Python开发,太基本的题目不收录。本文只涉及Python相关的面试题,关于网络、MySQL、算法等其他面试必考题会另外开专题整理。不是单纯的提供答案,抵制八股文!!更希望通过代码演示,原理探究等来深入讲解某一知识点,做到融会贯通。部分演示代码也放在了我的github的该目录下。语言基础篇Python的基本数据类型Python3中有六个标准的数据类型:Number(数字)(
JavaScript Math(算数)详解
lsx202406
开发语言
JavaScriptMath(算数)详解引言JavaScriptMath对象是JavaScript内置的一个对象,用于执行基本的数学运算。它提供了一系列的静态方法,使得进行数学运算变得非常简单。本文将详细介绍JavaScriptMath对象的各个方法及其应用。Math对象概述Math对象是一个静态对象,意味着它不能被实例化。它包含了一些数学常量和方法,可以用来执行各种数学运算。Math对象的常量M
HTTP 响应头信息详解
lsx202406
开发语言
HTTP响应头信息详解引言HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。在HTTP协议中,响应头信息是服务器向客户端发送的重要信息之一。响应头信息包含了关于响应的元数据,如状态码、内容类型、缓存策略等。本文将详细介绍HTTP响应头信息的概念、类型、作用以及常见响应头信息的解析。HTTP响应头信息概述HTTP响应头信息是服务器在发送HTTP响应时,除了响应体之外,附加在响应体前面的
Rust 注释
froginwe11
开发语言
Rust注释引言Rust编程语言以其内存安全、并发支持和高性能等特点在软件开发领域获得了广泛的关注。在Rust编程中,注释是一种非常重要的元素,它不仅可以帮助程序员理解代码,还可以提高代码的可维护性和可读性。本文将详细介绍Rust中的注释类型、语法及其应用场景。一、Rust注释类型Rust中的注释主要分为两种类型:单行注释和多行注释。1.单行注释单行注释用于对代码的某一小部分进行简要说明。其语法格
Scala 简介
froginwe11
开发语言
Scala简介引言Scala是一种多范式编程语言,它结合了面向对象和函数式编程的特性。自从2003年由MartinOdersky教授在EPFL开发以来,Scala已经成为了在Java虚拟机(JVM)上运行的高效编程语言。本文将为您详细介绍Scala的起源、特点、应用场景以及学习资源。Scala的起源与发展起源Scala的灵感来源于多种编程语言,包括Java、C++、Self、Haskell和ML。
Swift 下标脚本
froginwe11
开发语言
Swift下标脚本引言Swift是一种强大的编程语言,广泛应用于iOS、macOS、watchOS和tvOS等平台。在Swift中,下标脚本(Subscript)是一种非常实用的特性,它允许你为结构体(Struct)和类(Class)提供类似数组或字典的下标访问方式。本文将深入探讨Swift下标脚本的使用方法、优势以及注意事项。下标脚本的基本概念在Swift中,下标脚本是一种简化访问集合中元素的方
Python 编程基础作业总结
本周主要围绕Python基础编程展开了学习,通过一系列的作业题来巩固所学知识。这些题目涵盖了输入输出、条件判断、循环结构等多个基础知识点,下面将对每道作业题进行详细分析。1.计算指定月份第一天是星期几题目描述编写一个程序,接受用户输入的一个年份和一个月份,输出该月份的第一天是星期几。使用蔡乐公式计算星期。提示:使用蔡乐公式计算星期。W=((26*M-2)/10+D+Y+Y/4+C/4-2*C)%7
SQLite - C/C++编程环境搭建与使用指南
lsx202406
开发语言
SQLite-C/C++编程环境搭建与使用指南引言SQLite是一款轻量级的数据库管理系统,广泛应用于嵌入式系统、移动设备、Web应用等场景。其独特的架构和易用性使其成为许多开发者的首选。本文将详细介绍如何搭建SQLite的C/C++编程环境,并探讨如何在C/C++程序中集成SQLite数据库。环境搭建1.获取SQLite首先,我们需要从SQLite的官方网站(https://www.sqlite
star31.6k,Aider:让代码编写如虎添翼的终端神器
ider是一款运行在终端中的AI结对编程工具,它能与大型语言模型(LLM)无缝协作,直接在您的本地Git仓库中编辑代码。无论是启动新项目,还是优化现有代码库,Aider都能成为您最得力的助手。它支持Claude3.5Sonnet、DeepSeekV3、GPT-4o等顶级AI模型,几乎可以连接任何LLM,让编程体验如虎添翼。Stars数35,188Forks数3,230主要特点Git操作:Aider
C# 上位机开发指南:高效学习建议
IT趣编程
学习
C#作为一种编程语言,以其强大的功能、易学易用等特点,在工业自动化领域得到了广泛应用。特别是在上位机软件开发中,C#语言在.NET框架的强大生态系统,能够快速构建出高效、稳定的工业控制系统。本文将介绍C#在上位机开发中的应用并提供一些学习建议,希望通过本指南,能够帮助大家更好的学习上位机开发。前言上位机概念基础知识1、C#语言基础2、.NET框架3、桌面应用开发4、设备通信5、数据操作6、多线程和
如何自定义R语言函数?参数中的省略号`...`有什么用?
「已注销」
python 编程语言 java 人工智能 c++
学习R未必要学习很多工具包,有时候根据自己的理解去自定义函数也是一个不错的选择。本篇推文主要介绍两方面的内容:在R语言中自定义函数的一般方法;函数参数中...的作用。在看函数的帮助文档时会发现许多函数的参数中都有...符号,它是表示被省略的参数吗?如果是,作者为什么会省略它?如果不是,那又表示什么含义呢?不久前,学堂君分享了自己编写的计算空间可达性的函数,详见推文:两步移动搜索法(2SFCA)计算
【C#之模块化】C#和C++之不同的模块化形式
子夏i
C# C/C++ c# c++
C#和C++之不同的模块化理念一、前言二、C++和C#的模块化方式1.C++2.C#一、前言C++和C#都支持面向对象编程,但C#通过简化模块化组织,移除了C++中诸如头文件和预处理器等被认为是冗余的设计元素。这种简化使得C#在面向对象方面更为直观和易于管理,能够获得更加清晰和一致的代码结构。二、C++和C#的模块化方式1.C++在C++中,模块化结构通常涉及头文件和源文件的分离。头文件包含类的声
php输出扶墙而立的三角形,扶墙而立的成长历程——涉县五中刘嘉巍
王克丹
php输出扶墙而立的三角形
两周,我们就犹如一个婴儿,从母亲的怀抱实现了能够扶墙而立的成长历程。经过两周的实践,我基本能按照教案的要求,将一堂体育课较为完整执行开展,而且最重要的是我们每个人从心理上实现了从学生到教师的转变,当然这也体现在我们的举止、仪表、谈吐和教态间。相信,每一个实习老师在上完一节体育课后,心中总有那么股成就感和无限的自信。这就是我们成长与进步的最好体现。实践的操作、指导老师的传授、自己的亲身经验、使我们在
C# OPC UA 客户端开发实战:与PLC的数据交互
仰望尾迹云
本文还有配套的精品资源,点击获取简介:本压缩包提供了一个利用C#与OPCUA和KepServerEX实现与PLC数据交互的项目案例。介绍了OPCUA协议的工业通信标准、KepServerEX的使用、C#在工业自动化中的应用、OPCUA客户端API的基本功能,以及相关的DLL文件和工具,旨在简化OPCUA客户端的开发流程,帮助开发者快速创建能够与PLC进行数据交互的C#应用程序。1.OPCUA(OP
MavenHelper插件:解决IntelliJ IDEA中Maven依赖冲突的利器
本文还有配套的精品资源,点击获取简介:MavenHelper是一款专门针对IntelliJIDEA设计的Maven插件,旨在帮助开发者快速识别和解决Maven项目中的依赖冲突问题。该插件能生成项目的依赖树,标记版本冲突的依赖项,并提供建议解决方案和可视化界面来管理依赖。此外,它还包括一键升级或降级依赖、清理Maven缓存和自定义配置功能,以确保与团队规范的一致性。通过使用MavenHelper,开
行业案例| MongoDB在腾讯零售优码中的应用
MongoDB中文社区
MongoDB 数据库 mongodb
本文主要分享腾讯智慧零售团队优码业务在MongoDB中的应用,采用腾讯云MongoDB作为主存储服务给业务带来了较大收益,主要包括:高性能、快捷的DDL操作、低存储成本、超大存储容量等收益,极大的降低了业务存储成本,并提高了业务迭代开发效率。一.业务场景腾讯优码从连接消费者到连接渠道终端,实现以货的数字化为基础的企业数字化升级,包含营销能力升级和动销能力升级。腾讯优码由正品通、门店通和会员通三个子
如何解决ubuntu 中DNS无法修改导致无法联网的问题
BTU_YC
linux ubuntu ubuntu linux 服务器
写在前面:在刚开始遇到这个问题的时候,在网上搜了很多资料,都无法解决DNS总是无法修改,一些文章中提到过,直接修改的/etc/resolv.conf,之后确实能够通过pingwww.baidu.com的方式解决,但是当重启电脑的时候,网络有无法使用了。之前的方法就不提了,直接介绍一下我这解决的方法吧如何解决:先使用这个命令进入编辑页面vim/etc/systemd/resolved.conf输入命
ViP-LLaVA: 使大型多模态模型理解任意视觉提示
AI专题精讲
Paper阅读 多模态 人工智能 AI
摘要现有的大型视觉-语言多模态模型主要关注整体图像理解,但在实现区域特定的理解方面仍存在显著差距。目前,使用文本坐标或空间编码的方法通常无法为视觉提示提供用户友好的接口。为了解决这个问题,我们提出了一种新颖的多模态模型,能够解码任意(自由形式)视觉提示。这使得用户可以通过自然提示(如“红色边框”或“指向箭头”)直观地标记图像并与模型互动。我们的简单设计直接将视觉标记叠加在RGB图像上,避免了复杂的
opencv-python与opencv-contrib-python的区别联系
剑心缘
零碎小知识 python opencv
opencv-python包含基本的opencvopencv-contrib-python是高配版,带一些收费或者专利的算法,还有一些比较新的算法的高级版本,这些算法稳定之后会加入上面那个。官网对contrib模块的简介(点击链接跳转)参考链接
Aider:27.6K Star!这个终端AI编程神器能用语音改代码,自动生成Git记录并提交,接入DeepSeek斩获编程基准最高分
蚝油菜花
每日 AI 项目与应用实例 AI编程 git 人工智能 开源
❤️如果你也关注AI的发展现状,且对AI应用开发感兴趣,我会每日分享大模型与AI领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!AI在线答疑->智能检索历史文章和开源项目->尽在微信公众号->搜一搜:蚝油菜花⌨️“每个CLI爱好者都该试试的AI编程革命:对着终端说话自动生成Gitcommit是怎样的体验?”大家好,我是蚝油菜花。如果你也经历过——在vim里卡了半小时,只为给函
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