系列
mybatis-3.4.6 配置介绍
mybatis-3.4.6 顶层配置解析
mybatis-3.4.6 子配置解析
mybatis-3.4.6 mapper解析
mybatis-3.4.6 SQL执行流程
mybatis-3.4.6 SqlSession执行过程
mybatis-3.4.6 缓存介绍
mybatis-3.4.6 自增主键
mybatis-3.4.6 foreach 自增主键
mybatis-3.4.6 事务管理
开篇
这个系列是基于mybatis-3.4.6版本的源码解析,这篇文章主要分析mybatis的主键生成的逻辑。
这篇文章会阐述JDBC本身获取自增主键的原理和mybatis处理自增主键的逻辑。
mybatis针对自增主键的处理是建立在JDBC的Statement的getGeneratedKeys基础上,所以本质还是得理解JDBC针对自增主键的处理逻辑。
JDBC自增主键
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "123");
conn.setAutoCommit(false);
PreparedStatement pstm = conn.prepareStatement("insert into students(name, email) values(?, ?)",
Statement.RETURN_GENERATED_KEYS);
pstm.setString(1, "name1");
pstm.setString(2, "email1");
pstm.addBatch();
pstm.setString(1, "name2");
pstm.setString(2, "email2");
pstm.addBatch();
pstm.executeBatch();
// 返回自增主键值
ResultSet rs = pstm.getGeneratedKeys();
while (rs.next()) {
Object value = rs.getObject(1);
System.out.println(value);
}
conn.commit();
rs.close();
pstm.close();
conn.close();
PreparedStatement在executeBatch后通过getGeneratedKeys来返回生成的主键。
mybatis自增主键
INSERT INTO imc_user (`user_nick`) VALUES (#{userNick})
mybatis的自增主键需要的配置如上所示,核心关键字包括useGeneratedKeys和keyProperty。
DefaultSqlSession
public class DefaultSqlSession implements SqlSession {
@Override
public int insert(String statement, Object parameter) {
return update(statement, parameter);
}
@Override
public int update(String statement, Object parameter) {
try {
dirty = true;
MappedStatement ms = configuration.getMappedStatement(statement);
// 通过CachingExecutor执行update操作
return executor.update(ms, wrapCollection(parameter));
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error updating database. Cause: " + e, e);
} finally {
ErrorContext.instance().reset();
}
}
}
mybaits的insert/update都是通过DefaultSqlSession的update来实现的。
DefaultSqlSession的update执行CachingExecutor的update操作。
CachingExecutor
public class CachingExecutor implements Executor {
public int update(MappedStatement ms, Object parameterObject) throws SQLException {
flushCacheIfRequired(ms);
return delegate.update(ms, parameterObject);
}
CachingExecutor调用SimpleExecutor的update操作执行逻辑。
SimpleExecutor
public abstract class BaseExecutor implements Executor {
@Override
public int update(MappedStatement ms, Object parameter) throws SQLException {
ErrorContext.instance().resource(ms.getResource()).activity("executing an update").object(ms.getId());
if (closed) {
throw new ExecutorException("Executor was closed.");
}
clearLocalCache();
return doUpdate(ms, parameter);
}
}
public class SimpleExecutor extends BaseExecutor {
public SimpleExecutor(Configuration configuration, Transaction transaction) {
super(configuration, transaction);
}
@Override
public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
Statement stmt = null;
try {
Configuration configuration = ms.getConfiguration();
// handler为PreparedStatementHandler
StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null, null);
// 生成Statement对象
stmt = prepareStatement(handler, ms.getStatementLog());
// 执行Statement的操作
return handler.update(stmt);
} finally {
closeStatement(stmt);
}
}
}
SimpleExecutor的doUpdate负责执行真正的update操作。
由PreparedStatementHandler来处理真正的update操作。
PreparedStatementHandler
public class PreparedStatementHandler extends BaseStatementHandler {
public PreparedStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
super(executor, mappedStatement, parameter, rowBounds, resultHandler, boundSql);
}
@Override
public int update(Statement statement) throws SQLException {
PreparedStatement ps = (PreparedStatement) statement;
// 执行PreparedStatement的操作
ps.execute();
// 获取影响的行数
int rows = ps.getUpdateCount();
// 获取KeyGenerator对象,处理自增主键
Object parameterObject = boundSql.getParameterObject();
// mysql使用Jdbc3KeyGenerator来进行处理
KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
keyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);
return rows;
}
本质上和mysql的交互都是由PreparedStatement的execute来实现的。
Jdbc3KeyGenerator
public class Jdbc3KeyGenerator implements KeyGenerator {
public static final Jdbc3KeyGenerator INSTANCE = new Jdbc3KeyGenerator();
@Override
public void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter) {
processBatch(ms, stmt, getParameters(parameter));
}
public void processBatch(MappedStatement ms, Statement stmt, Collection parameters) {
ResultSet rs = null;
try {
// 获取自增主键的ResultSet集合
rs = stmt.getGeneratedKeys();
final Configuration configuration = ms.getConfiguration();
final TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
final String[] keyProperties = ms.getKeyProperties();
final ResultSetMetaData rsmd = rs.getMetaData();
TypeHandler[] typeHandlers = null;
if (keyProperties != null && rsmd.getColumnCount() >= keyProperties.length) {
for (Object parameter : parameters) {
// there should be one row for each statement (also one for each parameter)
if (!rs.next()) {
break;
}
final MetaObject metaParam = configuration.newMetaObject(parameter);
if (typeHandlers == null) {
typeHandlers = getTypeHandlers(typeHandlerRegistry, metaParam, keyProperties, rsmd);
}
populateKeys(rs, metaParam, keyProperties, typeHandlers);
}
}
} catch (Exception e) {
} finally {
}
}
private void populateKeys(ResultSet rs, MetaObject metaParam, String[] keyProperties, TypeHandler[] typeHandlers) throws SQLException {
for (int i = 0; i < keyProperties.length; i++) {
String property = keyProperties[i];
TypeHandler th = typeHandlers[i];
if (th != null) {
Object value = th.getResult(rs, i + 1);
metaParam.setValue(property, value);
}
}
}
}
Jdbc3KeyGenerator在mybatis中负责处理mysql的自增主键。
PreparedStatement的getGeneratedKeys负责获取自增的key。
populateKeys根据不同数据类型对应的handler完成数据的处理。
参考文章
源码参考
mybatis官网介绍
深入理解mybatis原理
Mybatis3.4.x技术内幕
mybatis 3.x源码深度解析与最佳实践
你可能感兴趣的:(mybatis-3.4.6 自增主键)
django mysql字段类型_Django ORM常用字段类型以及参数
思想化作潮流
django mysql字段类型
这篇文章主要介绍了简单了解DjangoORM常用字段类型及参数配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一、数值型AutoField对应int(11)。自增主键,DjangoModel默认提供,可以被重写。BooleanField对应tinyint(1)。布尔类型字段,一般用于记录状态标记。DecimalField对应decimal。开发
android sqlite 自增主键,SQLite设置自增主键
洛岗
android sqlite 自增主键
心血来潮想做一个网站,具体干什么暂时还是不透露了,因为我也不确定能不能搞出来,这不,刚开始就踩到坑了。这算是第一次近距离接触SQLite吧,算是脱离文本数据库的一小步(虽然SQLite也有类似文本数据库的味道),第一次用php+sql,操作起来有点小激动,按照教程来做,感觉无比顺利,成功完成了增删改查,于是打算开始着手写点什么,比如一个简单的记事本。Runoob给的创建表的代码如下:$sql=<<
c#中的DataSet原理和用法
家里有蜘蛛
# c#学习笔记
c#中的DataSet1.DataSet是什么DateSet在c#程序中建立一个临时数据库下图所示:2…命名空间usingSystem.Data;3.DataSet的建立和用法下面是常用的方法//创建一个临时数据库DataSetds=newDataSet();//创建一个临时表DataTabledt=newDataTable();//添加自增主键DataColumndcId=newDataColu
MySQL 的 AUTO-INC 锁
程序员蔡徐坤
mysql 数据库
关于AUTO-INC锁及其相关机制的总结:一、AUTO-INC锁的作用功能:用于实现自增主键(AUTO_INCREMENT)的并发控制,确保主键值的连续性和唯一性。锁类型:表级锁。释放时机:传统模式下,AUTO-INC锁在插入语句执行完成后释放。轻量级模式下,锁在分配自增值后立即释放。二、AUTO-INC锁的演进传统模式(AUTO-INC锁):插入数据时加表级锁,语句执行完成后释放。问题:高并发插
【面试场景】MySQL分布式主键选取
5faith
面试 mysql 分布式
文章目录一.MySQL的自增主键二.UUID三.雪花ID(推荐)我的博客地址一.MySQL的自增主键适合单表的情况,在分布式分库分表下可能会有一些问题主键冲突问题在分布式系统中,多个数据库节点独立生成自增主键,很容易出现重复的主键值。例如,多个节点都从1开始递增,会导致主键冲突全局唯一性无法保证自增主键仅在单个数据库实例中唯一,无法保证在分布式环境下的全局唯一性。这使得在跨节点操作时容易出现重复主
互联网分布式ID解决方案
fajianchen
系统设计 IT架构 分布式
业界实现方案1.基于UUID2.基于DB数据库多种模式(自增主键、segment)3.基于Redis4.基于ZK、ETCD5.基于SnowFlake6.美团Leaf(DB-Segment、zk+SnowFlake)7.百度uid-generator()基于UUID生成唯一IDUUID生成策略推荐阅读DDD领域驱动与微服务架构设计设计模式与技术组件大厂案例-百度工程效率如何优化垃圾回收机制?-CSD
煤矿数据处理:日数据与月数据的协同更新(Mysql)
漏刻有时
mysql android
项目需求该项目围绕煤矿数据处理展开,主要需求可归纳为数据存储与更新两方面:数据存储:建立两个MySQL数据库表,daily_data用于存储每日煤矿车次重量数据,包含id(自增主键)、date(日期)、coal_mine(煤矿名称)、weight(重量)字段;monthly_data用于存储每月各煤矿销量汇总数据,包含id(自增主键)、year_month(年月)、coal_mine(煤矿名称)、
mybatisplus获取返回对象(自增ID)
笑发财了1
spring boot 后端 jar java maven mysql 个人开发
需求有时候我们在数据库里设置了属性自增,在添加对象后,前端需要我们返回这个属性(对象)。做法1.在该实体类的自增主键上加上注解@TableId(value="journey_location_id"),后面的type是默认值可以不写。value为数据表中的字段名@TableId(value="journey_location_id",type=IdType.AUTO)privateintjourn
MySQL索引常见面试题(2022版)
小芬熊
面试 学习路线 阿里巴巴 android 前端 后端
目录为什么要建立索引?哪些情况适合建立索引?哪些情况下不适合建索引?为什么索引是使用B+树?(重点)索引分为那几类?什么是聚簇索引?(重点)使用聚簇索引的优缺点?(知道)为什么推荐使用自增主键作为索引?(知道)什么叫回表?(重点)什么叫索引覆盖?(重点)什么是最左前缀原则?(重点)MySQL索引失效的几种情况(重点)常见的索引优化手段有哪些?
带你直击小程序毕设答辩现场(三)
计算机毕设定制辅导-无忧学长
小程序 课程设计
问题七答辩老师:你在后端使用了MyBatis框架,那可以说说除了正常的增删改查注解,还有什么是你常用的注解?同学可回答:1、@ResultMap注解引用已经定义好的结果映射。2、@Options注解可以获取到自增主键的值问题八答辩老师:还有SpringBoot框架的常用注解。同学可回答:1、@RestController该注册是默认返回的是JSON格式的数据,相当于@Controller和@Res
EFCore中利用原生sql进行联表/多表查询
xk_hypothesis
EFCore
EFCore中利用原生sql进行联表/多表查询EFCore的多表查询可以使用join,include这些进行查询,但是写起来比较复杂,它们一般适用于单表查询(个人觉得),对于多表查询,我更喜欢使用原生SQL这种方式。具体方式如下(这里以2张表关联为例):首先,创建两张数据库中对应的实体类:[Table("Sys_User")]publicclassSys_User{//////自增主键///[Ke
开源软件新峰商城之DAO接口
ch_s_t
Java java 数据库 前端
一、数据表设计管理员用户表tb_newbee_mall_admin_useradmin_user_id:管理员id,自增主键,用于唯一标识每个管理员用户。login_user_name:管理员登陆名称,用于管理员登录系统。login_password:管理员登陆密码,与登录用户名配合进行登录验证。nick_name:管理员显示昵称,用于在系统中显示管理员的称呼。locked:是否锁定0未锁定1已锁
MySQL库表设计规范
zhangkaixuan456
mysql 设计规范 数据库
MySQL库表设计规范本文仅针对MySQL、Oracle表设计1)表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估2)ID字段作为自增主键,禁止在非事务内作为上下文作为条件进行数据传递,禁止非自增非数字类型主键设计出现3)禁止使用外键,触发器,存储过程4)多表中的相同列,必须保证列定义一致5)表默认使用InnoDB,国内表字符集默认使用utf8mb4,国际默认使用
基于Spring和MybatisPlus下的Oracle转mysql语句语法适配修改
星月梦瑾
java 数据库 数据库 oracle
本文讲述了在Spring+MybatisPlus环境中,oracle数据库转为mysql后查询语法和代码的主要修改。一、insert语句Oracle的主键采用序列,mysql有自增主键,转成mysql后取消序列主键,取消id设置。Eg:oracle中 SELECTseq_factory_abnormal_approval.NEXTVALasidFROMDUAL
分布式唯一id的7种方案
木小同
面试 分布式 分布式id 雪花算法
背景为什么需要使用分布式唯一id?如果我们的系统是单体的,数据库是单库,那无所谓,怎么搞都行。但是如果系统是多系统,如果id是和业务相关,由各个系统生成的情况下,那每个主机生成的主键id就是不可控的,多个主机就有可能会造成主键冲突的问题。方案1、数据库自增1024表,不是依赖每一张表的自增主键,不同的表都从1开始累加id专门搞一个库,搞一个表,专门用于生成全局唯一id,insertinto插入一条
MySQL自增主键
中台小A
mysql mysql sql 数据库
可以在MySQL数据库中实现自增主键,使每次插入数据时,主键值会自动增长,避免手动指定主键值的麻烦。自增主键可以方便地确保每条记录的唯一性,并且提供了便利的数据管理和查询方式。1在创建表时指定自增主键:CREATETABLE表名(列名数据类型AUTO_INCREMENTPRIMARYKEY,列名数据类型,...);例如,创建一个名为users的表,其中id列是自增主键:CREATETABLEuse
redis实现分布式锁
yongbuyanqi9467
分布式锁介绍在java的开发中,我们一般在需要并发访问的资源上使用加锁Lock或者synchronized来同步访问,但是只能针对单个jvm内的加锁,当系统需要在多个系统之间访问同一个受保护的资源时,就需要用到分布式锁的机制了,比如在电商网站网站的高并发情况下,大量请求需要扣减库存,而扣减库存的操作需要受保护的。常见的实现分布式锁的方案由通过zookeeper的临时有序节点,数据库的自增主键和今天
MySql的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP
醉卧沙场丶
mysql 数据库
CREATETABLE`voyage_ma`.`t_domain_name_registration`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'自增主键',`unique_id`bigint(20)NOTNULLCOMMENT'唯一标识',`tenant_id`varchar(128)NOTNULLDEFAULT''COMMENT'租户ID',`biz
sqlserver 如何设置自增主键?
Tang_Monk
sqlserver 数据库
目录1.创建表时定义-自增主键2.已存在表定义-自增主键1.创建表时定义-自增主键在MicrosoftSQLServer中,设置一个自增(自动递增)的主键可以通过在创建表时定义具有IDENTITY属性的列来实现。以下是创建带有自增主键的新表的示例:CREATETABLEdbo.YourTable(IDINTIDENTITY(1,1)PRIMARYKEY,--其他列定义...Column1VARCH
分布式商城项目07-分布式唯一ID实战
java__1024
java 分布式 数据库 微服务
在电商业务系统中,对ID生成的系统的可用性要求极高,如果生成系统不稳定,大量依赖ID生成系统,比如订单生成等关键动作都无法完成。一般情况下,我们使用数据库自增主键作为数据ID,但是在大量数据的情况下,尤其是在分库分表之后,这样就会出现ID大量重复,难以满足业务的需求,此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢?全局唯一性:不能出现重复的ID号,既然是
主键 selectKey
神豪VS勇士赢
添加后立即得到主键使用第二阶段的方式,添加之后再查询一遍,肯定可以得到主键。selectKeyLAST_INSERT_ID:该函数是mysql的函数,获取自增主键的ID,它必须配合insert语句一起使用image.png需要注意地方是keyProperty="uId"值是对应实体类主键的属性selectLAST_INSERT_ID()INSERTINTOt_user_infou_name,u_p
深入了解 MySQL 数值型函数
冷风扇666
# 搞懂数据库 mysql 数据库
引言:在MySQL数据库中,数值型函数是处理和操作数值类型数据的重要工具。这些函数涵盖了多种数学运算和常用的数值处理需求。本文将深入介绍一些常用的MySQL数值型函数,并通过具体案例演示它们的使用。创建测试表:为了方便演示,我们首先创建一个名为numeric_table的测试表。该表包含一个自增主键id,一个双精度浮点数字段value1和一个整数字段value2。--建表语句CREATETABLE
mysql 聚簇索引和非聚簇索引的用法_聚簇索引和非聚簇索引(通俗易懂 言简意赅)...
磁盘人
mysql 聚簇索引和非聚簇索引的用法
总结:InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。我们日常工作
RBAC数据表设计
WXVirus
RBAC数据表设计三表:用户表、角色表、权限表,用户表基本一开始就存在用户表中有一个字段必须为:role_id与角色表进行关联角色表表名:role序号字段类型说明空默认值主键1idint自增主键NN/A是2role_namevarchar(20)角色名称,如:超级管理员N3auth_idstext权限表主键id集合,如:1,2,3Yauth_actext权限对应的控制器方法集合,如:indexCo
MySQL 建表为啥还设置个自增 id ?用流水号当主键不正好么?
__薇薇__
建表规约在工作中,创建表的时候,DBA也会审核一下建表SQL,检查是否符合规范以及常用字段是否设置索引。CREATETABLE`xxxx`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'自增主键',`create_time`datetime(3)NOTNULLDEFAULTcurrent_timestamp(3)COMMENT'创建时间',`update_t
自增主键不连续
feifeidata
sql mybatis 数据库
1.insert语句会分配连续id,但是没有入进去的也会分配id,致使自增主键不连续。如ignore,INSERT…ONDUPLICATEKEYUPDATE2.Simpleinserts批量入库的时候,不论顺序,入进去的数据id从自增id开始连续,没有入进去的数据随后占据自增id。3.入库数据只要不带id,不管是否入进库里,有多少条数据就会新生成多少条id.如果入库数据带有id,不论insert_
自增主键冲突
swadian2008
数据库 数据库 postgresql sql
postgresql插入数据时主键冲突异常ERROR:duplicatekeyvalueviolatesuniqueconstraint问题原因主键冲突异常,具体的导致原因则是postgresql每次插入数据时使用缓存,而不会重新确认自增主键的取值。这就导致某些情况下插入数据(例如SQL语句中指定了ID)不会更新这个自增主键下一个取值的缓存,进而在下次插入时触发错误。解决方案重置序列对象的计数器数
PostgreSQL自增序列-主键冲突问题
子木倾然
数据库
答案:SELECTsetval('自增序列名',MAX(自增主键)+1,true)FROM表名;查询全部序列:select*frompg_classwhererelowner=(selectusesysidfrompg_userwhereusename='postgres')andrelkind='S'创建序列CREATESEQUENCEt_app_app_id_seqINCREMENT1MINV
Postgresql自增主键和插入主键冲突
一笑杯莫停
数据库 笔记 postgresql sql 数据库
冲突原因:postgresql每次插入数据时使用缓存,而不会重新确认自增主键的取值。如果你以往插入数据中带了主键,而缓存中没有纪录自增主键的值,你再使用自增主键就会和你以往插入的主键起冲突。解决方案:重置序列对象的计数器数值SELECTsetval('TABLE_COLUMN_seq',(SELECTmax(COLUMN)FROM'TABLE'));其中:TABLE是表名,COLUMN是自增主键列
PostgreSQL 自增主键与MySQL的对比
shinxiang
PostgreSQL postgresql
一、创建自增主键1.MySQL创建自增主键sql:CREATETABLEtest(idint(10)unsignedNOTNULLAUTO_INCREMENT,PRIMARYKEY(`id`))2.PostgreSQL创建自增主键sql:CREATETABLEtest(idserial8,CONSTRAINT"test_primary_key"PRIMARYKEY("id"));二、清空表时自增主
面向对象面向过程
3213213333332132
java
面向对象:把要完成的一件事,通过对象间的协作实现。
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。
1、面向对象
package bigDemo.ObjectOriented;
/**
* 大象类
*
* @Description
* @author FuJian
Java Hotspot: Remove the Permanent Generation
bookjovi
HotSpot
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122
JEP 122: Remove the Permanent Generation
Author Jon Masamitsu
Organization Oracle
Created 2010/8/15
Updated 2011/
正则表达式向前查找向后查找,环绕或零宽断言
dcj3sjt126com
正则表达式
向前查找和向后查找
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。
对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的
BaseDao
171815164
seda
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
public Conn
Ant标签详解--Java命令
g21121
Java命令
这一篇主要介绍与java相关标签的使用 终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。
1
[简单]代码片段_电梯数字排列
53873039oycg
代码
今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:
import java.util.Arrays;
public class 电梯数字排列_S3_Test {
public static void main(S
Hessian原理
云端月影
hessian原理
Hessian 原理分析
一. 远程通讯协议的基本原理
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协
区分Activity的四种加载模式----以及Intent的setFlags
aijuans
android
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置
Activity有四种加载模式:
standard
singleTop
hibernate几个核心API及其查询分析
antonyup_2006
html .net Hibernate xml 配置管理
(一) org.hibernate.cfg.Configuration类
读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.)
Configuration co
PL/SQL的流程控制
百合不是茶
oracle PL/SQL编程 循环控制
PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有
流程控制;
分支语句 if 条件 then 结果 else 结果 end if ;
条件语句 case when 条件 then 结果;
循环语句 loop
强大的Mockito测试框架
bijian1013
mockito 单元测试
一.自动生成Mock类 在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类 &nbs
精通Oracle10编程SQL(11)开发子程序
bijian1013
oracle 数据库 plsql
/*
*开发子程序
*/
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_OUTPUT.put_line(systimestamp);
E
【EhCache一】EhCache版Hello World
bit1129
Hello world
本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍
环境准备
1.新建Maven项目
2.添加EhCache的Maven依赖
<dependency>
<groupId>ne
学习EJB3基础知识笔记
白糖_
bean Hibernate jboss webservice ejb
最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基
angular.bootstrap
boyitech
AngularJS AngularJS API angular中文api
angular.bootstrap
描述:
手动初始化angular。
这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。
使用方法: angular .
java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数
bylijinnan
java
public class SearchInShiftedArray {
/**
* 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
* 请在这个特殊数组中找出给定的整数。
* 解答:
* 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl
天使还是魔鬼?都是我们制造
ducklsl
生活 教育 情感
----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!!
从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影!
自己挑了两部先看了看,但是发现看完之后,心里久久不能平
[机器智能与生物]研究生物智能的问题
comsci
生物
我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别....
但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把
获取Android Device的信息
dai_lm
android
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph
最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现
datamachine
java 算法 字符串匹配
原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------
小学5年级英语单词背诵第一课
dcj3sjt126com
english word
long 长的
show 给...看,出示
mouth 口,嘴
write 写
use 用,使用
take 拿,带来
hand 手
clever 聪明的
often 经常
wash 洗
slow 慢的
house 房子
water 水
clean 清洁的
supper 晚餐
out 在外
face 脸,
macvim的使用实战
dcj3sjt126com
mac vim
macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳
1. 下载macvim
https://code.google.com/p/macvim/
2. 了解macvim
:h vim的使用帮助信息
:h macvim
java二分法查找
蕃薯耀
java二分法查找 二分法 java二分法
java二分法查找
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 11:40:03 星期二
http:/
Spring Cache注解+Memcached
hanqunfeng
spring memcached
Spring3.1 Cache注解
依赖jar包:
<!-- simple-spring-memcached -->
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>simple-s
apache commons io包快速入门
jackyrong
apache commons
原文参考
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html
Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍:
1) 工具类
2
如何学习编程
lampcy
java 编程 C++ c
首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有
架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy
nannan408
Spring3
1.前言。
如题。
2.描述。
@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。
@DependsOn({"steelAxe","abc"})
@Comp
Spring4+quartz2的配置和代码方式调度
Everyday都不同
代码 配置 spring4 quartz2.x 定时任务
前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API……
quartz定时任务必须搞清楚几个概念:
JobDetail——处理类
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发
Hibernate入门
tntxia
Hibernate
前言
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。
如
Math类
xiaoxing598
Math
一、Java中的数字(Math)类是final类,不可继承。
1、常数 PI:double圆周率 E:double自然对数
2、截取(注意方法的返回类型) double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数 int round(float f) 返回四舍五入后的整数 long round