MyBatis Generator中文文档
MyBatis Generator中文文档地址:
http://mbg.cndocs.tk/
该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置。
本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息。
注: 本文后面提到的MBG 全部指代MyBatis Generator。
MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀
运行MyBatis Generator
有4种运行MBG的方法,具体请看文档 运行 MyBatis Generator
MBG下载地址 :http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/
XML配置详解
在MBG中,最主要也最重要的就是XML配置文件,因此本篇文章主要的内容就是XML配置。
这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。
1. 配置文件头
使用最新版的MBG需要使用上面的xml头,配置文件必须包含上面的DOCTYPE
。
2. 根节点
generatorConfiguration
节点没有任何属性,直接写节点即可,如下:
3.
子元素
从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration
元素的子元素。
包含以下子元素(有严格的顺序):
(0个或1个)
(0个或多个)
(1个或多个)
3.1
元素
这个元素用来指定外部的属性元素,不是必须的元素。
元素用于指定一个需要在配置中解析使用的外部属性文件,引入属性文件后,可以在配置中使用 ${property}
这种形式的引用,通过这种方式引用属性文件中的属性值。 对于后面需要配置的**jdbc信息**和targetProject
属性会很有用。
这个属性可以通过resource
或者url
来指定属性文件的位置,这两个属性只能使用其中一个来指定,同时出现会报错。
3.2
元素
这个元素可以0或多个,不受限制。
最常见的用法是通过这个属性指定驱动的路径,例如:
重点提醒: 本文之前在这里有误导,特别强调。
注意,classPathEntry只 在下面这两种情况下才有效 :
当加载 JDBC 驱动内省数据库时
当加载根类中的 JavaModelGenerator 检查重写的方法时
因此, 如果你需要加载其他用途的jar包,classPathEntry起不到作用 ,不能这么写,解决的办法就是将你用的jar包添加到类路径中,在Eclipse等IDE中运行的时候,添加jar包比较容易。当从命令行执行的时候,需要用java -cp xx.jar,xx2.jar xxxMainClass这种方式在-cp后面指定来使用(注意-jar会导致-cp无效)。
3.3
元素
在MBG的配置中,至少需要有一个
元素。
元素用于指定生成一组对象的环境。例如指定要连接的数据库,要生成对象的类型和要处理的数据库中的表。运行MBG的时候还可以指定要运行的
。
该元素只有一个**必选属性**id
,用来唯一确定一个
元素,该id
属性可以在运行MBG的使用。
此外还有几个**可选属性**:
defaultModelType
:**这个属性很重要**,这个属性定义了MBG如何生成**实体类**。 这个属性有以下可选值:
conditional
:*这是默认值*,这个模型和下面的hierarchical
类似,除了如果那个单独的类将只包含一个字段,将不会生成一个单独的类。 因此,如果一个表的主键只有一个字段,那么不会为该字段生成单独的实体类,会将该字段合并到基本实体类中。
flat
:该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段。**这种模型最简单,推荐使用。**
hierarchical
:如果表有主键,那么该模型会产生一个单独的主键实体类,如果表还有BLOB字段, 则会为表生成一个包含所有BLOB字段的单独的实体类,然后为所有其他的字段生成一个单独的实体类。 MBG会在所有生成的实体类之间维护一个继承关系。
targetRuntime
:此属性用于指定生成的代码的运行时环境。该属性支持以下可选值:
MyBatis3
:*这是默认值*
MyBatis3Simple
Ibatis2Java2
Ibatis2Java5
一般情况下使用默认值即可,有关这些值的具体作用以及区别请查看中文文档的详细内容。
introspectedColumnImpl
:该参数可以指定扩展org.mybatis.generator.api.IntrospectedColumn
该类的实现类。该属性的作用可以查看扩展MyBatis Generator。
一般情况下,我们使用如下的配置即可:
如果你希望不生成和Example
查询有关的内容,那么可以按照如下进行配置:
使用MyBatis3Simple
可以避免在后面的中逐个进行配置(后面会提到)。
MBG配置中的其他几个元素,基本上都是
的子元素,这些子元素(有严格的配置顺序)包括:
(0个或多个)
(0个或多个)
(0个或1个)
(1个)
(0个或1个)
(1个)
(0个或1个)
(0个或1个)
(1个或多个)
其中
属性 比较特殊,后面讲解的时候都会和父元素一起进行讲解。在讲解
属性前,我们先看看**什么是分隔符?**。
这里通过一个例子说明。假设在MySQL数据库中有一个表名为user info
,你没有看错,中间是一个空格,这种情况下如果写出select * from user info
这样的语句,肯定是要报错的,在Mysql中的时候我们一般会写成如下的样子:
select * from `user info`
这里的使用的**反单引号(`)**就是**分隔符**,**分隔符**可以用于**表名**或者**列名**。
下面继续看
支持的属性:
autoDelimitKeywords
beginningDelimiter
endingDelimiter
javaFileEncoding
javaFormatter
xmlFormatter
由于这些属性比较重要,这里一一讲解。
首先是autoDelimitKeywords
,当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。
然后这里继续上面的例子来讲beginningDelimiter
和endingDelimiter
属性。 由于beginningDelimiter
和endingDelimiter
的默认值为双引号("
),在Mysql中不能这么写,所以还要将这两个默认值改为**反单引号(`)**,配置如下:
属性javaFileEncoding
设置要使用的Java文件的编码,默认使用当前平台的编码,只有当生产的编码需要特殊指定时才需要使用,一般用不到。
最后两个javaFormatter
和xmlFormatter
属性**可能会**很有用,如果你想使用模板来定制生成的java文件和xml文件的样式,你可以通过指定这两个属性的值来实现。
接下来分节对其他的子元素逐个进行介绍。
3.3.1
元素
该元素可以配置0个或者多个,不受限制。
元素用来定义一个插件。插件用于扩展或修改通过MyBatis Generator (MBG)代码生成器生成的代码。
插件将按在配置中配置的顺序执行。
有关插件的详细信息可以参考开发插件和提供的插件了解更多。
3.3.2
元素
该元素最多可以配置1个。
这个元素非常有用,相信很多人都有过这样的需求,就是希望MBG生成的代码中可以包含**注释信息**,具体就是生成表或字段的备注信息。
使用这个元素就能很简单的实现我们想要的功能。这里先介绍该元素,介绍完后会举例如何扩展实现该功能。
该元素有一个可选属性type
,可以指定用户的实现类,该类需要实现org.mybatis.generator.api.CommentGenerator
接口。而且必有一个默认的构造方法。这个属性接收默认的特殊值DEFAULT
,会使用默认的实现类org.mybatis.generator.internal.DefaultCommentGenerator
。
默认的实现类中提供了两个可选属性,需要通过
属性进行配置。
suppressAllComments
:**阻止**生成注释,默认为false
suppressDate
:**阻止**生成的注释包含时间戳,默认为false
一般情况下由于MBG生成的注释信息没有任何价值,而且有时间戳的情况下每次生成的注释都不一样,使用**版本控制**的时候每次都会提交,因而一般情况下我们都会屏蔽注释信息,可以如下配置:
接下来我们简单举例实现生成包含表字段注释信息的注释
因为系统提供了一个默认的实现类,所以对我们来说,自己实现一个会很容易,最简单的方法就是复制默认实现类代码到一个新的文件中,修改类名如MyCommentGenerator
,在你自己的实现类中,你可以选择是否继续支持上面的两个属性,你还可以增加对其他属性的支持。
我们通过下面一个方法的修改来了解,其他几个方法请自行修改(写本章的时候我也没有完全实现该类,所以不提供完整源码了):
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
if (introspectedColumn.getRemarks() != null && !introspectedColumn.getRemarks().equals("")) {
field.addJavaDocLine("/**");
field.addJavaDocLine(" * " + introspectedColumn.getRemarks());
addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
}
这个方法是给字段添加注释信息的,其中IntrospectedColumn
包含了字段的完整信息,通过getRemarks
方法可以获取字段的注释信息。上面这个方法修改起来还是很容易的。除了字段的注释外还有Getter
和Setter
,以及类的注释。此外还有生成XML的注释,大家可以根据默认的实现进行修改。
完成我们自己的实现类后,我们还需要做如下配置:
3.3.3
元素
用于指定数据库连接信息,该元素必选,并且只能有一个。
配置该元素只需要注意如果JDBC驱动不在**classpath**下,就需要通过
元素引入jar包,这里**推荐**将jar包放到**classpath**下。
该元素有两个必选属性:
driverClass
:访问数据库的JDBC驱动程序的完全限定类名
connectionURL
:访问数据库的JDBC连接URL
该元素还有两个可选属性:
userId
:访问数据库的用户ID
password
:访问数据库的密码
此外该元素还可以接受多个
子元素,这里配置的
属性都会添加到JDBC驱动的属性中。
这个元素配置起来最容易,这里举个简单例子:
3.3.4
元素
该元素最多可以配置一个。
这个元素的配置用来指定JDBC类型和Java类型如何转换。
该元素提供了一个可选的属性type
,和
比较类型,提供了默认的实现DEFAULT
,一般情况下使用默认即可,需要特殊处理的情况可以通过其他元素配置来解决,不建议修改该属性。
该属性还有一个可以配置的
元素。
可以配置的属性为forceBigDecimals
,该属性可以控制是否强制DECIMAL
和NUMERIC
类型的字段转换为Java类型的java.math.BigDecimal
,默认值为false
,一般不需要配置。
默认情况下的转换规则为:
如果精度>0
或者长度>18
,就会使用java.math.BigDecimal
如果精度=0
并且10<=长度<=18
,就会使用java.lang.Long
如果精度=0
并且5<=长度<=9
,就会使用java.lang.Integer
如果精度=0
并且长度<5
,就会使用java.lang.Short
如果设置为true
,那么一定会使用java.math.BigDecimal
,配置示例如下:
3.3.5
元素
该元素必须配置一个,并且最多一个。
该元素用来控制生成的实体类,根据
中配置的defaultModelType
,一个表可能会对应生成多个不同的实体类。一个表对应多个类实际上并不方便,所以前面也推荐使用flat
,这种情况下一个表对应一个实体类。
该元素只有两个属性,都是必选的。
targetPackage
:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(中会提到)。
targetProject
:指定目标项目路径,可以是绝对路径或相对路径(如 targetProject="src/main/java" )。
该元素支持以下几个
子元素属性:
constructorBased
:该属性只对MyBatis3
有效,如果true
就会使用构造方法入参,如果false
就会使用setter
方式。默认为false
。
enableSubPackages
:如果true
,MBG会根据catalog
和schema
来生成子包。如果false
就会直接用targetPackage
属性。默认为false
。
immutable
:该属性用来配置实体类属性是否可变,如果设置为true
,那么constructorBased
不管设置成什么,都会使用构造方法入参,并且不会生成setter
方法。如果为false
,实体类属性就可以改变。默认为false
。
rootClass
:设置所有实体类的基类。如果设置,需要使用类的全限定名称。并且如果MBG能够加载rootClass
,那么MBG不会覆盖和父类中完全匹配的属性。匹配规则:
属性名完全相同
属性类型相同
属性有getter
方法
属性有setter
方法
trimStrings
:是否对数据库查询结果进行trim
操作,如果设置为true
就会生成类似这样public void setUsername(String username) {this.username = username == null ? null : username.trim();}
的setter
方法。默认值为false
。
配置示例如下:
3.3.6
元素
该元素可选,最多配置一个。但是有如下两种必选的特殊情况:
如果targetRuntime
目标是**iBATIS2**,该元素必须配置一个。
如果targetRuntime
目标是**MyBatis3**,只有当
需要XML时,该元素必须配置一个。 如果没有配置
,则使用以下的规则:
如果指定了一个
,那么MBG将只生成XML的SQL映射文件和实体类。
如果没有指定
,那么MBG将只生成实体类。
该元素只有两个属性(和前面提过的
的属性含义一样),都是必选的。
targetPackage
:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(中会提到)。
targetProject
:指定目标项目路径,可以是绝对路径或相对路径( 如 targetProject="src/main/resources ")。
该元素支持
子元素,只有一个可以配置的属性:
enableSubPackages
:如果true
,MBG会根据catalog
和schema
来生成子包。如果false
就会直接用targetPackage
属性。默认为false
。
配置示例:
3.3.7
元素
该元素可选,最多配置一个。
如果不配置该元素,就不会生成Mapper接口。
该元素有3个必选属性:
type
:该属性用于选择一个预定义的客户端代码(可以理解为Mapper接口)生成器,用户可以自定义实现,需要继承org.mybatis.generator.codegen.AbstractJavaClientGenerator
类,必选有一个默认的构造方法。 该属性提供了以下预定的代码生成器,首先根据
的targetRuntime
分成三类:
MyBatis3 :
ANNOTATEDMAPPER :基于注解的Mapper接口,不会有对应的XML映射文件
MIXEDMAPPER :XML和注解的混合形式,(上面这种情况中的)SqlProvider
注解方法会被XML替代。
XMLMAPPER :所有的方法都在XML中,接口调用依赖XML文件。
MyBatis3Simple :
ANNOTATEDMAPPER :基于注解的Mapper接口,不会有对应的XML映射文件
XMLMAPPER :所有的方法都在XML中,接口调用依赖XML文件。
Ibatis2Java2 或**Ibatis2Java5**:
IBATIS :生成的对象符合iBATIS的DAO框架(不建议使用)。
GENERIC-CI :生成的对象将只依赖于SqlMapClient,通过构造方法注入。
GENERIC-SI :生成的对象将只依赖于SqlMapClient,通过setter
方法注入。
SPRING :生成的对象符合Spring的DAO接口
targetPackage
:生成实体类存放的包名,一般就是放在该包下。实际还会受到其他配置的影响(中会提到)。
targetProject
:指定目标项目路径,可以是绝对路径或相对路径( 如 targetProject="src/main/java " )。
该元素还有一个可选属性:
implementationPackage
:如果指定了该属性,实现类就会生成在这个包中。
该元素支持
子元素设置的属性:
enableSubPackages
exampleMethodVisibility
methodNameCalculator
rootInterface
useLegacyBuilder
这几个属性不太常用,具体作用请看完整的文档,这里对rootInterface
做个简单介绍。
rootInterface
用于指定一个所有生成的接口都继承的父接口。 这个值可以通过配置的rootInterface
属性覆盖。
这个属性对于通用Mapper来说,可以让生成的所有接口都继承该接口。
配置示例:
3.3.8 元素
该元素至少要配置一个,可以配置多个。
该元素用来配置要通过内省的表。只有配置的才会生成实体类和其他文件。
该元素有一个必选属性:
tableName
:指定要生成的表名,可以使用SQL通配符匹配多个表。
例如要生成全部的表,可以按如下配置:
该元素包含多个可选属性:
schema
:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName
的形式。
catalog
:数据库的catalog,如果设置了该值,生成SQL的表名会变成如catalog.tableName
的形式。
alias
:如果指定,这个值会用在生成的select查询SQL的表的别名和列名上。 列名会被别名为 alias_actualColumnName(别名_实际列名) 这种模式。
domainObjectName
:生成对象的基本名称。如果没有指定,MBG会自动根据表名来生成名称。
enableXXX
:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。
selectByPrimaryKeyQueryId
:DBA跟踪工具会用到,具体请看详细文档。
selectByExampleQueryId
:DBA跟踪工具会用到,具体请看详细文档。
modelType
:和
的defaultModelType
含义一样,这里可以针对表进行配置,这里的配置会覆盖
的defaultModelType
配置。
escapeWildcards
:这个属性表示当查询列,是否对schema和表名中的SQL通配符 ('_' and '%') 进行转义。 对于某些驱动当schema或表名中包含SQL通配符时(例如,一个表名是MY_TABLE,有一些驱动需要将下划线进行转义)是必须的。默认值是false
。
delimitIdentifiers
:是否给标识符增加**分隔符**。默认false
。当catalog
,schema
或tableName
中包含空白时,默认为true
。
delimitAllColumns
:是否对所有列添加**分隔符**。默认false
。
该元素包含多个可用的
子元素,可选属性为:
constructorBased
:和
中的属性含义一样。
ignoreQualifiersAtRuntime
:生成的SQL中的表名将不会包含schema
和catalog
前缀。
immutable
:和
中的属性含义一样。
modelOnly
:此属性用于配置是否为表只生成实体类。如果设置为true
就不会有Mapper接口。如果配置了
,并且modelOnly
为true
,那么XML映射文件中只有实体对象的映射元素(
)。如果为true
还会覆盖属性中的enableXXX
方法,将不会生成任何CRUD方法。
rootClass
:和
中的属性含义一样。
rootInterface
:和
中的属性含义一样。
runtimeCatalog
:运行时的catalog
,当生成表和运行环境的表的catalog
不一样的时候可以使用该属性进行配置。
runtimeSchema
:运行时的schema
,当生成表和运行环境的表的schema
不一样的时候可以使用该属性进行配置。
runtimeTableName
:运行时的tableName
,当生成表和运行环境的表的tableName
不一样的时候可以使用该属性进行配置。
selectAllOrderByClause
:该属性值会追加到selectAll
方法后的SQL中,会直接跟order by
拼接后添加到SQL末尾。
useActualColumnNames
:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。 在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性。
useColumnIndexes
:如果是true,MBG生成resultMaps的时候会使用列的索引,而不是结果中列名的顺序。
useCompoundPropertyNames
:如果是true,那么MBG生成属性名的时候会将列名和列备注接起来. 这对于那些通过第四代语言自动生成列(例如:FLD22237),但是备注包含有用信息(例如:"customer id")的数据库来说很有用. 在这种情况下,MBG会生成属性名FLD2237_CustomerId。
除了
子元素外,还包含以下子元素:
(0个或1个)
(0个或1个)
(0个或多个)
(0个或多个)
下面对这4个元素进行详细讲解。
1.
元素
这个元素最多可以配置一个。 这个元素用来指定自动生成主键的属性(identity字段或者sequences序列)。如果指定这个元素,MBG在生成insert的SQL映射文件中插入一个
元素。 这个元素**非常重要**,这个元素包含下面两个必选属性:
column
:生成列的列名。
sqlStatement
:将返回新值的 SQL 语句。如果这是一个identity列,您可以使用其中一个预定义的的特殊值。预定义值如下:
Cloudscape
DB2
DB2_MF
Derby
HSQLDB
Informix
MySql
SqlServer
SYBASE
JDBC :这会配置MBG使用MyBatis3支持的JDBC标准的生成key来生成代码。 这是一个独立于数据库获取标识列中的值的方法。 重要 : 只有当目标运行为MyBatis3时才会产生正确的代码。 如果与iBATIS2一起使用目标运行时会产生运行时错误的代码。
这个元素还包含两个可选属性:
identity
:当设置为true
时,该列会被标记为identity
列, 并且
元素会被插入在insert
后面。 当设置为false
时,
会插入到insert
之前(通常是序列)。**重要**: 即使您type
属性指定为post
,您仍然需要为identity
列将该参数设置为true
。 这将标志MBG从插入列表中删除该列。默认值是false
。
type
:type=post and identity=true
的时候生成的
中的order=AFTER
,当type=pre
的时候,identity只能为false
,生成的
中的order=BEFORE
。可以这么理解,自动增长的列只有插入到数据库后才能得到ID,所以是AFTER
,使用序列时,只有先获取序列之后,才能插入数据库,所以是BEFORE
。
配置示例一:
对应的生成的结果:
SELECT LAST_INSERT_ID()
insert into `user login info` (Id, username, logindate, loginip)
values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{logindate,jdbcType=TIMESTAMP}, #{loginip,jdbcType=VARCHAR})
配置示例二:
对应的生成结果:
select SEQ_ID.nextval from dual
insert into `user login info` (Id, username, logindate, loginip)
values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{logindate,jdbcType=TIMESTAMP},#{loginip,jdbcType=VARCHAR})
2.
元素
该元素最多可以配置一个,使用该元素可以在生成列之前,对列进行重命名。这对那些存在同一前缀的字段想在生成属性名时去除前缀的表非常有用。 例如假设一个表包含以下的列:
CUST_BUSINESS_NAME
CUST_STREET_ADDRESS
CUST_CITY
CUST_STATE
生成的所有属性名中如果都包含CUST
的前缀可能会让人不爽。这些前缀可以通过如下方式定义重命名规则:
注意,在内部,MBG使用java.util.regex.Matcher.replaceAll
方法实现这个功能。 请参阅有关该方法的文档和在Java中使用正则表达式的例子。
当
匹配一列时,这个元素(
)会被忽略。
优先于重命名的规则。
该元素有一个必选属性:
searchString
:定义将被替换的字符串的正则表达式。
该元素有一个可选属性:
replaceString
:这是一个用来替换搜索字符串列每一个匹配项的字符串。如果没有指定,就会使用空字符串。
关于的
属性useActualColumnNames
对此的影响可以查看完整文档。
3.
元素
该元素可选,可以配置多个。
该元素从将某些属性默认计算的值更改为指定的值。
该元素有一个必选属性:
该元素有多个可选属性:
property
:要使用的Java属性的名称。如果没有指定,MBG会根据列名生成。 例如,如果一个表的一列名为STRT_DTE
,MBG会根据的useActualColumnNames
属性生成STRT_DTE
或strtDte
。
javaType
:该列属性值为完全限定的Java类型。如果需要,这可以覆盖由JavaTypeResolver
计算出的类型。 对某些数据库来说,这是必要的用来处理**“奇怪的”**数据库类型(例如MySql的unsigned bigint
类型需要映射为java.lang.Object
)。
jdbcType
:该列的JDBC类型(INTEGER, DECIMAL, NUMERIC, VARCHAR
等等)。 如果需要,这可以覆盖由JavaTypeResolver
计算出的类型。 对某些数据库来说,这是必要的用来处理怪异的JDBC驱动 (例如DB2的LONGVARCHAR
类型需要为iBATIS 映射为VARCHAR
)。
typeHandler
:用户定义的需要用来处理这列的类型处理器。它必须是一个继承iBATIS的TypeHandler
类或TypeHandlerCallback
接口(该接口很容易继承)的全限定的类名。如果没有指定或者是空白,iBATIS会用默认的类型处理器来处理类型。**重要**:MBG不会校验这个类型处理器是否存在或者可用。 MGB只是简单的将这个值插入到生成的SQL映射的配置文件中。
delimitedColumnName
:指定是否应在生成的SQL的列名称上增加**分隔符**。 如果列的名称中包含空格,MGB会自动添加**分隔符**, 所以这个重写只有当列名需要强制为一个合适的名字或者列名是数据库中的保留字时是必要的。
配置示例:
4.
元素
该元素可选,可以配置多个。
该元素可以用来屏蔽不需要生成的列。
该元素有一个必选属性:
该元素还有一个可选属性:
delimitedColumnName
:匹配列名的时候是否区分大小写。如果为true
则区分。默认值为false
,不区分大小写。
MyBatis Generator最佳实践
本节内容针对MyBatis3,使用iBATIS的不一定适用。
以下根据个人经验(对此有意见的可以留言)对一些配置看法列出如下几点:
关于实体类的modelType
,建议使用defaultModelType="flat"
,只有一个对象的情况下管理毕竟方便,使用也简单。
关于注释
,不管你是否要重写自己的注释生成器,有一点不能忘记,那就是注释中一定要保留@mbggenerated
,MBG通过该字符串来判断代码是否为代码生成器生成的代码,有该标记的的代码在重新生成的时候会被删除,不会重复。不会在XML中出现重复元素。
使用MBG生成的代码时,建议尽可能不要去修改自动生成的代码,而且要生成带有@mbggenerated
,这样才不会在每次重新生成代码的时候需要手动修改好多内容。
仍然是注释相关,在
中,建议一定要保留suppressAllComments
属性(使用默认值false
),一定要取消(设为true
)时间戳suppressDate
,避免重复提交SVN。
建议将JDBC驱动放到项目的**classpath**下,而不是使用
来引入jar包,主要考虑到所有开发人员的统一性。
当数据库字段使用CHAR
时,建议在
中设置
,可以自动去掉不必要的空格。
在
中,建议设置type="XMLMAPPER"
,不建议使用注解或混合模式,比较代码和SQL完全分离易于维护。
建议尽可能在中配置
,避免手工操作,以便于MBG重复执行代码生成。
如果有其他有价值的经验,会继续补充。
综合以上信息,这里给出一个Mysql
的简单配置:
id= "MysqlContext" targetRuntime= "MyBatis3" defaultModelType= "flat" >
name= "beginningDelimiter" value= "`" />
name= "endingDelimiter" value= "`" />
name= "suppressDate" value= "true" />
driverClass= "com.mysql.jdbc.Driver"
connectionURL= "jdbc:mysql://localhost:3306/test"
userId= "root"
password= "" >
targetPackage= "test.model" targetProject= "src\main\java" >
name= "trimStrings" value= "true" />
targetPackage= "test.xml" targetProject= "src\main\resources" />
type= "XMLMAPPER" targetPackage= "test.dao" targetProject= "src\main\java" />
tableName= "%" >
column= "id" sqlStatement= "Mysql" />
这里用的通配符匹配全部的表,另外所有表都有自动增长的id
字段。如果不是所有表的配置都一样,可以做针对性的配置。
改动: 去掉来不建议使用Example查询的建议,Example在单表操作上优势明显,可以看个人情况使用。
你可能感兴趣的:(mybati)
MybatisPlus中@EnumValue注解介绍、应用场景和示例代码
小信丶
java 持久层框架技术栈 mybatis java
@EnumValue注解详细介绍功能概述:@EnumValue注解标记在枚举类型的字段上,表示该字段是枚举值在数据库中存储的实际值。这对于枚举的持久化是关键,确保枚举在数据库中的表示与Java枚举类的一致性。主要用途:字段指定:指定枚举类中哪个字段将用于数据库存储。例如,如果一个枚举包含多个字段(如代码和描述),你可以使用@EnumValue指定哪个字段代表实际的存储值。数据转换:帮助Mybati
现在程序员这么多,我学习java这块应该学到什么程度才能不被淘汰呢?
渡你眉间山河
一、夯实基础JavaSE这是基础,一定要好好学习!Java语法,面向对象(包括类、对象、方法、继承、封装、抽象、多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程。JavaEEJavaEE是在JavaSE的基础上构建的,JavaEE容器,Web容器,常用框架(包括Struts2、Hibernate、Mybati
MyBatis 环境搭建 2019-03-25
琴匣自鸣
MyBatis各版本下载地址点击Spring各版本下载地址点击Mybatis详解http://www.mybatis.org/mybatis-3/zh/configuration.html记录下犯过的错误1.驱动driver单词写错2.数据库驱动大小写不对3.url地址写错4.log4j需要配置文件没加初步搭建环境,准备工作:Mybatis.jarLog4j.jar数据库驱动jar注意Mybati
简单工作流(后端部分-spring boot,顺便优化了下ui)
liaoyuecai
ui
整个项目我丢到github上去了,需要copy的可以直接去githubhttps://github.com/liaoyuecai/demo前端部分目录在:/react/antd-pro-demo/src/pages/workflow后端部分目录在:/java/spring-boot-demo/src/main/java/com/demo/workflow我这边用的JPA做持久化,如果是mybati
idea中常见快捷键及插件操作
程序员老石
intellij-idea java ide
1、双击shift【万能】(1)输入pull,回车可以更新代码(2)输入commit,回车可以提交代码(3)输入history,可以查看提交记录(4)输入break,回车可以查看所有断点(5)输入类名,方法名,url地址都可以检索到2、安装EasyJavadoc插件(1)在方法上ctrl+\,自动生成方法的注释信息;(2)在类上ctrl+shift+\,自动生成类相关的注释信息3、安装Mybati
SpringBoot数据库连接失败解决方案
用键盘当武器的秋刀鱼
spring boot 数据库 后端
org.mybatis.spring.bootmybatis-spring-boot-starter3.0.2com.mysqlmysql-connector-jruntimeorg.springframework.bootspring-boot-starter-web上面的是SpringBoot的Pop.xml数据库框架代码SpringBoot是会自动读取配的,就不需要像之前一样配置Mybati
Mybatis-Mybatis介绍以及mybatis-config.xml配置
Rizzo_yuan
Mybatis Mybatis介绍 Mybatis动态代理
一、什么是Mybatismybatis:是一种简化和实现了java数据化持久层(persistencelayer)的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单的API和数据交互方式。mybatis的背景:MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的全新设计,支持注解和Mapper(映射器)。MyBati
报Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String错误
打工人小夏
java spring boot spring mybatis maven
1.没有使用MybatisPlus的时候可能是你项目中缺少这个依赖,或者版本过低。导入以下maven坐标org.mybatismybatis-spring3.0.32.有使用MybatisPlus的时候mybatis-plus中集成的mybatis版本太旧,产生了冲突。导入以下maven坐标com.baomidoumybatis-plus-boot-starter3.5.4.1org.mybati
SpringBoot结合MyBatis Plus 自动生成代码 - 草稿
d4c58d726cff
SpringBoot结合MyBatisPlus自动生成代码本来这一章要介绍Redis+AOP优化权限,可是发现还是需要先介绍一些MyBatisPlus自动生成代码MyBatisPlus简介MyBatis-Plus(opensnewwindow)(简称MP)是一个MyBatis(opensnewwindow)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBati
Java项目:基于ssm框架实现的电影评论系统(ssm+B/S架构+源码+数据库+毕业论文)
飞翔的佩奇
毕设项目 java 数据库 后端 spring ssm springmvc mybatis
一、项目简介本项目是一套ssm826基于ssm框架实现的电影评论系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值二、技术实现后端:spring,springmvc,mybati
基础篇-项目架构
jimmyz81
基础架构沿用spring架构模式,同时增加infrastructure-extension,对Quarkus的扩展和补充Domain领域模型和仓储接口,仅依赖于CDI接口和基本类库,逻辑不变,功能不变RepositoryDomain中Repository接口的实现,依赖jdbc及mybatis[quarkus-mybatis,MyBatis的Quarkus的封装,支持native模式]MyBati
【JavaEE进阶】MyBatis⼊⻔
遇事问春风乄
JavaEE进阶 java-ee mybatis java
文章目录什么是MyBatis?准备⼯作创建⼯程数据准备配置数据库连接字符串在项⽬中,创建持久层接⼝UserInfoMapper单元测试使⽤Idea⾃动⽣成测试类打印⽇志⭕总结什么是MyBatis?MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。MyBatis本是Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了googlecode,并且改名为MyBati
Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA
架构悟道
image.png大家好,又见面了。这是SpringDataJPA系列的第2篇,在上一篇《SpringDataJPA系列1:JDBC、ORM、JPA、SpringDataJPA,傻傻分不清楚?给你个选择SpringDataJPA的理由!》中,我们对JPA的基本概念有了一个整体的了解,也对JAVA中进行DB操作的一些周边框架、概念等有了初步的感知。同时也给出了SpringDataJPA与MyBati
spring-mybatis项目中打印完整sql不带占位符
AaronCos
log4jdbc mybatis日志
我们在调试sql的时候,一般情况下打印的sql的都是preparedstatement语句,其中包含了占位符。这样就为我们调试工作带来了困难。使用log4jdbc能够解决这个问题:选择自己所要使用的日志工具包注意:mybatis会自动选择内置日志工具包,如果不手动设置,那么会从环境中逐个寻找,如果没有,那么不打印日志。具体查看官方文档我全局使用的slf4j,log4j.因此需要手动配置mybati
ssm整合
良月廿四212
java 开发语言
多线程共享时对象要实现序列化Serializable二级缓存cacheEabled这是官方文档里面关于二级缓存默认是开启的,而在我们使用的时候还是需要手动配置开启的MyBatis逆向工程插件1.导入jar包可以在本级项目的pom文件中添加UTF-8171717org.mybatis.generatormybatis-generator-maven-plugin1.3.0trueorg.mybati
使用mybati-plus的条件构造器QueryWrapper的eq(boolean condition, R column, Object val) 容易踩的坑!
阿文弟
数据库 mybatis spring boot spring cloud
话不多说:代码容易踩的坑我来踩,免费的赞赞你来点。先说一下这个eq函数三个参数的作用。第一个参数booleancondition代表条件判断,也就是我们可以写条件判断,如果条件最终结果是true,那么sql就会有where条件;如果是false,那么sql就不会有where条件【注意:这里是该字段不会再sql语句中带上where,但无论条件成立与否,都会走后面的两个参数】第二个参数Rcolumn代
Mybati--缓存基本概念 一图看懂
m0_58462450
缓存 java spring
Mybati缓存MyBatis内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制一级缓存:默认开启,线程级别的缓存,SqlSession的缓存;在一个SqlSession生命周期中有效.SqISession关闭,缓存清空;在同一个SqlSession中,Mybatis会把执行的方法和参数通过算法牛成缓存的键值,将键值和结果存放在一个Map中,如果后续的键值一样,则自接从Map中获取数据
MybatisPlus—快速入门
向上的咸鱼blueblue
笔记 MybatisPlus 学习 笔记
目录1.使用MybatisPlus的基本步骤1.1引入MybatisPlus的起步依赖1.2定义Mapper2.MybatisPlus常用注解
[email protected] @
[email protected] 小结3.常用配置4.总结1.使用MybatisPlus的基本步骤1.1引入MybatisPlus的起步依赖MyBatisPlus官方提供了starter,其中集成了Mybati
Java ORM 框架 Mybatis详解
码农小旋风
后端
内容Mybatis的前身就是iBatis,是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。本文以一个Mybatis完整示例为切入点,结合Mybatis底层源码分析,图文并茂的讲解Mybatis的核心工作机制。imgMybatis快速入门Mybatis原理资料官方MybatisGithubMybatis官网MyBatis官方代码生成(mybatis-generator)MyBati
使用maven进行mybatis逆向工程
浪漫宇宙与人间日常
添加maven插件,让maven环境支持mybatis-generator组件在pom.xml里面添加如下代码:taotaoorg.mybatis.generatormybatis-generator-maven-plugin1.3.2src/main/resources/generator.xmltruetrueGenerateMyBatisArtifactsgenerateorg.mybati
Java经典框架之MyBatis
方寸之间不太闲
企业级必备应用框架 java mybatis 开发语言
MyBatisJava是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过51亿个Java虚拟机,Java仍是企业和开发人员的首选开发平台。课程内容的介绍1.基本使用介绍2.配置文件详解3.映射文件详解4.动态SQL语句5.延迟加载和缓存处理6.MyBatis和Spring的整合操作7.MyBatis的逆向工程一、MyBati
Exception encountered during context initialization - cancelling refresh attempt: org.springframewor
张DD的代码铺
java
目录1、定位问题2、问题解决3、MybatisJdbcType和Mysql数据类型对应关系:1、定位问题解决错误时先找报错开始的最后一行,慢慢向上看,可确定报错文件位置,根据信息可知错误位置在MeanMapper.xml内同时接着向上看错误信息,可读出问题出在JdbcType2、问题解决后来知道数据库数据类型与mybatis有差异,有对应相应填法修改后正常运行,附上对应数据类型填法3、Mybati
初识Sringboot3+vue3环境准备
QGS-CD
java vue.js npm
环境准备后端环境准备下载JDK17https://www.oracle.com/java/technologies/downloads/#jdk17-windows安装就下一步下一步,选择安装路径配置环境环境JDK17+、IDEA2021+、maven3.5+、vscode后端基础:javaSE,javaWeb、JDBC、SMM框架(Spring+SpringMVC+MyBatis)、MyBati
Mybatis之增删查改
心凡138
mybatis java 开发语言
目录一、引言二、Mybatis——查询示例:查询用户三、Mybatis——添加示例:添加用户四、Mybatis——删除示例:删除用户五、Mybatis——修改示例:修改用户一、引言接着上次的mybatis,我们在了解完mybatis之后,肯定要知道怎么使用,本文就来详细讲解Mybatis的增删改查事务,还不了解怎么配置mybatis的朋友可以去这篇文章了解一下什么是MyBatis什么是MyBati
Springboot + Mybatis-plus事务管理
拾 -.-
java mybatis
事务事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!开启事务,在Springboot的启动类,或者某个@Configuration的类上加上@EnableTransactionManagement开启事务。因为这是数据库相关,所以我加在了mybati
jeecg boot MybatisInterceptor 的使用笔记
低头飞歌
java 数据库 java sql jeecg boot
目前使用的旧版本是2.0.2更新了新版本2.2.1sql:UPDATEtablenamesetupdate_time=#{updateTimeNew}whereID=#{id}andupdate_time=#{updateTime}使用中存在问题:首先查到了最新数据,然后执行以上sql,由于updateTime在最新版中被默认了newDate()导致查不到旧数据版本2.2.1代码片段:Mybati
【SpringBoot实战】常用工具类总结
积雨辋川
Java spring boot 后端 java
【SpringBoot实战】常用工具类总结在SpringBoot项目中,不可避免地需要使用一些工具类来来提升我们的开发效率。常用的工具类有全局异常处理类、统一返回结果类、MyBatisPlus配置类、Swagger配置类等。尽管不同项目的配置类的代码不尽相同,但主要逻辑还是类似的,经过相应修改可以应用于项目中。因此本篇文章总结了SpringBoot项目常用的配置类,并将会持续更新。1.MyBati
MyBatis运行原理和步骤
fpl1116
JAVA全栈学习路线 # MyBatis mybatis java intellij-idea
MyBatis运行原理MyBatis框架在操作数据库时,大体经过了8个步骤:1.读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。2.加载映射文件:映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybati
Mybatis-Plus基础之框架基础
Gambler_Tu
mybatis-plus mybatis
文章目录Mybatis-Plus框架基础引入maven依赖定义实体类,并标注注解定义Mapper接口,要求继承自特定父接口使用@MapperScan注解,扫描mapper接口所在位置验证Mybatis-Plus框架基础MyBatis-Plus是MyBatis的一种增强框架,目的就是为了简化开发,提高开发效率。数据库支持:任何能使用MyBatis进行crud,并且支持标准SQL的数据库。mybati
mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析
曾令胜
mybatis java spring
一、背景同事在同一个mapper.xml(namespace相同),复制了一个sql没有修改id,正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下,id重复,项目会报错无法正常启动,后来看代码发现,是mybatisplus处理了id重复,所以项目正常启动。二、mybatis解析crudsql的流程mybatis启动流程,springboot启动时,加载Mybati
PHP如何实现二维数组排序?
IT独行者
二维数组 PHP 排序
二维数组在PHP开发中经常遇到,但是他的排序就不如一维数组那样用内置函数来的方便了,(一维数组排序可以参考本站另一篇文章【PHP中数组排序函数详解汇总】)。二维数组的排序需要我们自己写函数处理了,这里UncleToo给大家分享一个PHP二维数组排序的函数:
代码:
functionarray_sort($arr,$keys,$type='asc'){
$keysvalue= $new_arr
【Hadoop十七】HDFS HA配置
bit1129
hadoop
基于Zookeeper的HDFS HA配置主要涉及两个文件,core-site和hdfs-site.xml。
测试环境有三台
hadoop.master
hadoop.slave1
hadoop.slave2
hadoop.master包含的组件NameNode, JournalNode, Zookeeper,DFSZKFailoverController
由wsdl生成的java vo类不适合做普通java vo
darrenzhu
VO wsdl webservice rpc
开发java webservice项目时,如果我们通过SOAP协议来输入输出,我们会利用工具从wsdl文件生成webservice的client端类,但是这里面生成的java data model类却不适合做为项目中的普通java vo类来使用,当然有一中情况例外,如果这个自动生成的类里面的properties都是基本数据类型,就没问题,但是如果有集合类,就不行。原因如下:
1)使用了集合如Li
JAVA海量数据处理之二(BitMap)
周凡杨
java 算法 bitmap bitset 数据
路漫漫其修远兮,吾将上下而求索。想要更快,就要深入挖掘 JAVA 基础的数据结构,从来分析出所编写的 JAVA 代码为什么把内存耗尽,思考有什么办法可以节省内存呢? 啊哈!算法。这里采用了 BitMap 思想。
首先来看一个实验:
指定 VM 参数大小: -Xms256m -Xmx540m
java类型与数据库类型
g21121
java
很多时候我们用hibernate的时候往往并不是十分关心数据库类型和java类型的对应关心,因为大多数hbm文件是自动生成的,但有些时候诸如:数据库设计、没有生成工具、使用原始JDBC、使用mybatis(ibatIS)等等情况,就会手动的去对应数据库与java的数据类型关心,当然比较简单的数据类型即使配置错了也会很快发现问题,但有些数据类型却并不是十分常见,这就给程序员带来了很多麻烦。
&nb
Linux命令
510888780
linux命令
系统信息
arch 显示机器的处理器架构(1)
uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示C
java常用JVM参数
墙头上一根草
java jvm参数
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2
我的spring学习笔记9-Spring使用工厂方法实例化Bean的注意点
aijuans
Spring 3
方法一:
<bean id="musicBox" class="onlyfun.caterpillar.factory.MusicBoxFactory"
factory-method="createMusicBoxStatic"></bean>
方法二:
mysql查询性能优化之二
annan211
UNION mysql 查询优化 索引优化
1 union的限制
有时mysql无法将限制条件从外层下推到内层,这使得原本能够限制部分返回结果的条件无法应用到内层
查询的优化上。
如果希望union的各个子句能够根据limit只取部分结果集,或者希望能够先排好序在
合并结果集的话,就需要在union的各个子句中分别使用这些子句。
例如 想将两个子查询结果联合起来,然后再取前20条记录,那么mys
数据的备份与恢复
百合不是茶
oracle sql 数据恢复 数据备份
数据的备份与恢复的方式有: 表,方案 ,数据库;
数据的备份:
导出到的常见命令;
参数 说明
USERID 确定执行导出实用程序的用户名和口令
BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示
FILE 指定导出的二进制文
线程组
bijian1013
java 多线程 thread java多线程 线程组
有些程序包含了相当数量的线程。这时,如果按照线程的功能将他们分成不同的类别将很有用。
线程组可以用来同时对一组线程进行操作。
创建线程组:ThreadGroup g = new ThreadGroup(groupName);
&nbs
top命令找到占用CPU最高的java线程
bijian1013
java linux top
上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享。 (1)使用top命令找出占用cpu最高的JAVA进程PID:28174 (2)如下命令找出占用cpu最高的线程
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
【持久化框架MyBatis3四】MyBatis3一对一关联查询
bit1129
Mybatis3
当两个实体具有1对1的对应关系时,可以使用One-To-One的进行映射关联查询
One-To-One示例数据
以学生表Student和地址信息表为例,每个学生都有都有1个唯一的地址(现实中,这种对应关系是不合适的,因为人和地址是多对一的关系),这里只是演示目的
学生表
CREATE TABLE STUDENTS
(
C/C++图片或文件的读写
bitcarter
写图片
先看代码:
/*strTmpResult是文件或图片字符串
* filePath文件需要写入的地址或路径
*/
int writeFile(std::string &strTmpResult,std::string &filePath)
{
int i,len = strTmpResult.length();
unsigned cha
nginx自定义指定加载配置
ronin47
进入 /usr/local/nginx/conf/include 目录,创建 nginx.node.conf 文件,在里面输入如下代码:
upstream nodejs {
server 127.0.0.1:3000;
#server 127.0.0.1:3001;
keepalive 64;
}
server {
liste
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方
bylijinnan
double
public class Power {
/**
*Q71-数值的整数次方
*实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。
*/
private static boolean InvalidInput=false;
public static void main(
Android四大组件的理解
Cb123456
android 四大组件的理解
分享一下,今天在Android开发文档-开发者指南中看到的:
App components are the essential building blocks of an Android
[宇宙与计算]涡旋场计算与拓扑分析
comsci
计算
怎么阐述我这个理论呢? 。。。。。。。。。
首先: 宇宙是一个非线性的拓扑结构与涡旋轨道时空的统一体。。。。
我们要在宇宙中寻找到一个适合人类居住的行星,时间非常重要,早一个刻度和晚一个刻度,这颗行星的
同一个Tomcat不同Web应用之间共享会话Session
cwqcwqmax9
session
实现两个WEB之间通过session 共享数据
查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:
If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification impleme
springmvc Spring3 MVC,ajax,乱码
dashuaifu
spring jquery mvc Ajax
springmvc Spring3 MVC @ResponseBody返回,jquery ajax调用中文乱码问题解决
Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。具体实现AnnotationMethodHandlerAdapter类handleResponseBody方法,具体实
搭建WAMP环境
dcj3sjt126com
wamp
这里先解释一下WAMP是什么意思。W:windows,A:Apache,M:MYSQL,P:PHP。也就是说本文说明的是在windows系统下搭建以apache做服务器、MYSQL为数据库的PHP开发环境。
工欲善其事,必须先利其器。因为笔者的系统是WinXP,所以下文指的系统均为此系统。笔者所使用的Apache版本为apache_2.2.11-
yii2 使用raw http request
dcj3sjt126com
http
Parses a raw HTTP request using yii\helpers\Json::decode()
To enable parsing for JSON requests you can configure yii\web\Request::$parsers using this class:
'request' =&g
Quartz-1.8.6 理论部分
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2207691 一.概述
基于Quartz-1.8.6进行学习,因为Quartz2.0以后的API发生的非常大的变化,统一采用了build模式进行构建;
什么是quartz?
答:简单的说他是一个开源的java作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。并且还能和Sp
什么是POJO?
gupeng_ie
java POJO 框架 Hibernate
POJO--Plain Old Java Objects(简单的java对象)
POJO是一个简单的、正规Java对象,它不包含业务逻辑处理或持久化逻辑等,也不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。如果项目中使用了Hiber
jQuery网站顶部定时折叠广告
ini
JavaScript html jquery Web css
效果体验:http://hovertree.com/texiao/jquery/4.htmHTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>网页顶部定时收起广告jQuery特效 - HoverTree<
Spring boot内嵌的tomcat启动失败
kane_xie
spring boot
根据这篇guide创建了一个简单的spring boot应用,能运行且成功的访问。但移植到现有项目(基于hbase)中的时候,却报出以下错误:
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.Lif
leetcode: sort list
michelle_0916
Algorithm linked list sort
Sort a linked list in O(n log n) time using constant space complexity.
====analysis=======
mergeSort for singly-linked list
====code======= /**
* Definition for sin
nginx的安装与配置,中途遇到问题的解决
qifeifei
nginx
我使用的是ubuntu13.04系统,在安装nginx的时候遇到如下几个问题,然后找思路解决的,nginx 的下载与安装
wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar zxvf nginx-1.0.11.tar.gz
./configure
make
make install
安装的时候出现
用枚举来处理java自定义异常
tcrct
java enum exception
在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeException的,但这样往往会造成异常信息说明不一致的情况,所以就想到了用枚举来解决的办法。
1,先创建一个接口,里面有两个方法,一个是getCode, 一个是getMessage
public
erlang supervisor分析
wudixiaotie
erlang
当我们给supervisor指定需要创建的子进程的时候,会指定M,F,A,如果是simple_one_for_one的策略的话,启动子进程的方式是supervisor:start_child(SupName, OtherArgs),这种方式可以根据调用者的需求传不同的参数给需要启动的子进程的方法。和最初的参数合并成一个数组,A ++ OtherArgs。那么这个时候就有个问题了,既然参数不一致,那