ibator 生成代码给数据库添加一条记录 数据库默认值怎么添加
1个回答
推荐于2016-05-23 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517201
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
由于对ibator了解的不够深入,毅然决然的开始了修改ibator插件的过程,修改的过程收获很大,了解了这个插件的诸多使用技巧。
1.自动生成的代码中的讨厌的Example怎么改名?
这个也是驱动我去修改ibator plugin的原动力,因为我懒,不想每次生成代码以后再去替换Example单词,使用UltraEditor自动把Ibator源程序中的所有Example都替换了,替换完以后才发现,ibator插件可以自动帮我们替换,配置一个参数就可以了,汗啊。替换内容如下:
<!--
id 这个id可以在使用命令行运行Abator时指定,以单独处理某一个ibatorContext
targetRuntime Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
-->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
<!--
ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档
必须有替换和被替换字符属性。
-->
2.既然动手改了,就把看着不顺眼的地方统统的改掉吧,以下是便于日后再想改的时候要看的内容:
代码注释在org.apache.ibatis.ibator.internal这个package下的DefaultCommentGenerator.java中,可以把英文的注释改成中文的,但是sqlmap中的注释不能直接改中文,因为sqlmap.xml文件时utf-8编码的,直接写入中文注释会出现乱码的情况。
在org.apache.ibatis.ibator.config这个package下的MergeConstants.java中包含有代码注解中的某些单词,可以考虑修改。
3.下面是从别人的博客转过来的内容:
1、Abator生成Java类文件时,根据注释区分属性和方法是系统生成或用户自定义,以此决定保留或者覆写.
2、Abator生成SQLMap的xml文件时,根据元素id是否包含前缀 ibatorgenerated_ 区分元素是系统
生成或用户自定义,以此决定保留或者覆写.。
3、注意ibatorConfig.xm 文件中节点的顺序
4、生成的数据对象
Primary Key Class 主键的所有组成字段在一个类中
Record Class 非主键字段非BLOB字段组成的类,继承于Primary Key Class
Record With BLOBs Class 所有BLOB字段组成的类,继承于Record Class (如不存在),就会继承Primary Key Class
不支持只包含BLOB字段的表。
Example Class 用于生成动态where条件的类
5、example Class 使用(可以使用逻辑运算的结合律简化where条件)
代码:
TestTableExample example = new TestTableExample();
example.createCriteria().andField1EqualTo(5);
产生条件:
where field1 = 5
代码:
TestTableExample example = new TestTableExample();
example.createCriteria()
.andField1EqualTo(5)
.andField2IsNull();
example.or(example.createCriteria()
.andField3NotEqualTo(9)
.andField4IsNotNull());
List<Integer> field5Values = new ArrayList<Integer>();
field5Values.add(8);
field5Values.add(11);
field5Values.add(14);
field5Values.add(22);
example.or(example.createCriteria()
.andField5In(field5Values));
example.or(example.createCriteria()
.andField6Between(3, 7));
产生条件:
where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7)
6、ibatorConfig.xm 文件分析
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS IbatorConfiguration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" >
<ibatorConfiguration>
<properties url="file:/home/guo/workspace_google/iBATIS/config/config.properties"/>
<!--
url 指定属性文件绝对路径。注意与指定数据库jdbc驱动jar包路径的区别哈。
可以使用${property}的格式引用属性文件中的属性值。
-->
<classPathEntry location="/home/guo/java/workspace/newbee/lib/ibatis/postgresql-8.3-604.jdbc3.jar" />
<!--
classPathEntry 指定数据库jdbc驱动jar包的绝对路径。
-->
<ibatorContext id="context1" targetRuntime="Ibatis2Java5">
<!--
id 这个id可以在使用命令行运行Abator时指定,以单独处理某一个ibatorContext
targetRuntime Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
-->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
<!--
ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档
必须有替换和被替换字符属性。
-->
<jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://192.168.1.2:5432/newbee" userId="sa" password="esoon" />
<!--
driverClass 数据库驱动类
connectionURL 数据库连接地址
userId 用户
password 密码
还可以使用以下格式添加数据库的其他连接属性
<property name="" value=""/>
-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
<!--
默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
-->
</javaTypeResolver>
<javaModelGenerator targetPackage="com.newbee.bean" targetProject="newbee/src" />
<!--
targetProject 生成的Java Bean放置在哪个项目的哪个目录下
targetPackage 生成的Java Bean的包名
一个有用的属性
<property name="trimStrings" value="true" />
从数据库返回的值被清理前后的空格
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
-->
<sqlMapGenerator targetPackage="com.newbee.xml" targetProject="newbee/src" />
<!--
targetProject 生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下
targetPackage 生成的 SqlMap.xml 文件的包名
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
-->
<daoGenerator targetPackage="com.newbee.dao" targetProject="newbee/src" type="GENERIC-CI" />
<!--
targetProject 生成的 dao类文件放置在哪个项目的哪个目录下
targetPackage 生成的 dao类文件的包名
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
type 生成dao文件的类型,可选择IBATIS、SPRING、GENERIC-CI、GENERIC-SI。默认使用GENERIC-CI
dao类在构造器中获取 SqlMapClient。
-->
<table tableName="ALLTYPES" domainObjectName="Customer" >
<!--
tableName 数据库表明,据说可以包含SQL通配符%和_。
domainObjectName 数据库表对应的数据对象名称,默认使用表名作为对象名称。
-->
<property name="useActualColumnNames" value="true"/>
<!--
对象的属性名是否使用字段名称
-->
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<!--
column 自增长或使用sequence生成的字段名
sqlStatement 生成字段的sql片段或其简称(参考官方文档)
identity true表示后生成,false表示预生成
例如:
postgresql:<generatedKey
column="lid"
sqlStatement="select nextval('tb000000producttype_lid_seq')"
identity="false" />
sqlserver:<generatedKey
column="lid"
sqlStatement="SqlServer"
identity="true" />
oracle:<generatedKey
column="lid"
sqlStatement="select tb000000producttype_lid_seq.nextval from dual"
identity="false" />
-->
<columnOverride column="DATE_FIELD" property="startDate" />
<!--
column 字段名
property 字段对应的属性名。(默认使用字段名的)
javaType 对应的Java类型
jdbcType 对应的jdbc类型
这里的设置覆写javaTypeResolver中的指定
-->
<ignoreColumn column="FRED" />
<!--
column 需要忽略的数据库字段
-->
<columnRenamingRule searchString="^CUST_" replaceString="" />
<!--
数据库字段名称到对象属性名称的影射关系。就是一个替换处理。
-->
</table>
</ibatorContext>
</ibatorConfiguration>
1.自动生成的代码中的讨厌的Example怎么改名?
这个也是驱动我去修改ibator plugin的原动力,因为我懒,不想每次生成代码以后再去替换Example单词,使用UltraEditor自动把Ibator源程序中的所有Example都替换了,替换完以后才发现,ibator插件可以自动帮我们替换,配置一个参数就可以了,汗啊。替换内容如下:
<!--
id 这个id可以在使用命令行运行Abator时指定,以单独处理某一个ibatorContext
targetRuntime Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
-->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
<!--
ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档
必须有替换和被替换字符属性。
-->
2.既然动手改了,就把看着不顺眼的地方统统的改掉吧,以下是便于日后再想改的时候要看的内容:
代码注释在org.apache.ibatis.ibator.internal这个package下的DefaultCommentGenerator.java中,可以把英文的注释改成中文的,但是sqlmap中的注释不能直接改中文,因为sqlmap.xml文件时utf-8编码的,直接写入中文注释会出现乱码的情况。
在org.apache.ibatis.ibator.config这个package下的MergeConstants.java中包含有代码注解中的某些单词,可以考虑修改。
3.下面是从别人的博客转过来的内容:
1、Abator生成Java类文件时,根据注释区分属性和方法是系统生成或用户自定义,以此决定保留或者覆写.
2、Abator生成SQLMap的xml文件时,根据元素id是否包含前缀 ibatorgenerated_ 区分元素是系统
生成或用户自定义,以此决定保留或者覆写.。
3、注意ibatorConfig.xm 文件中节点的顺序
4、生成的数据对象
Primary Key Class 主键的所有组成字段在一个类中
Record Class 非主键字段非BLOB字段组成的类,继承于Primary Key Class
Record With BLOBs Class 所有BLOB字段组成的类,继承于Record Class (如不存在),就会继承Primary Key Class
不支持只包含BLOB字段的表。
Example Class 用于生成动态where条件的类
5、example Class 使用(可以使用逻辑运算的结合律简化where条件)
代码:
TestTableExample example = new TestTableExample();
example.createCriteria().andField1EqualTo(5);
产生条件:
where field1 = 5
代码:
TestTableExample example = new TestTableExample();
example.createCriteria()
.andField1EqualTo(5)
.andField2IsNull();
example.or(example.createCriteria()
.andField3NotEqualTo(9)
.andField4IsNotNull());
List<Integer> field5Values = new ArrayList<Integer>();
field5Values.add(8);
field5Values.add(11);
field5Values.add(14);
field5Values.add(22);
example.or(example.createCriteria()
.andField5In(field5Values));
example.or(example.createCriteria()
.andField6Between(3, 7));
产生条件:
where (field1 = 5 and field2 is null)
or (field3 <> 9 and field4 is not null)
or (field5 in (8, 11, 14, 22))
or (field6 between 3 and 7)
6、ibatorConfig.xm 文件分析
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS IbatorConfiguration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" >
<ibatorConfiguration>
<properties url="file:/home/guo/workspace_google/iBATIS/config/config.properties"/>
<!--
url 指定属性文件绝对路径。注意与指定数据库jdbc驱动jar包路径的区别哈。
可以使用${property}的格式引用属性文件中的属性值。
-->
<classPathEntry location="/home/guo/java/workspace/newbee/lib/ibatis/postgresql-8.3-604.jdbc3.jar" />
<!--
classPathEntry 指定数据库jdbc驱动jar包的绝对路径。
-->
<ibatorContext id="context1" targetRuntime="Ibatis2Java5">
<!--
id 这个id可以在使用命令行运行Abator时指定,以单独处理某一个ibatorContext
targetRuntime Ibatis2Java5 生成适合JDK5.0的类,另一个选项是 Ibatis2Java2,生成适合Java2的类。
-->
<ibatorPlugin type="org.apache.ibatis.ibator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="Example$" />
<property name="replaceString" value="Criteria" />
</ibatorPlugin>
<!--
ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档
必须有替换和被替换字符属性。
-->
<jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://192.168.1.2:5432/newbee" userId="sa" password="esoon" />
<!--
driverClass 数据库驱动类
connectionURL 数据库连接地址
userId 用户
password 密码
还可以使用以下格式添加数据库的其他连接属性
<property name="" value=""/>
-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
<!--
默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer
true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
-->
</javaTypeResolver>
<javaModelGenerator targetPackage="com.newbee.bean" targetProject="newbee/src" />
<!--
targetProject 生成的Java Bean放置在哪个项目的哪个目录下
targetPackage 生成的Java Bean的包名
一个有用的属性
<property name="trimStrings" value="true" />
从数据库返回的值被清理前后的空格
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
-->
<sqlMapGenerator targetPackage="com.newbee.xml" targetProject="newbee/src" />
<!--
targetProject 生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下
targetPackage 生成的 SqlMap.xml 文件的包名
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
-->
<daoGenerator targetPackage="com.newbee.dao" targetProject="newbee/src" type="GENERIC-CI" />
<!--
targetProject 生成的 dao类文件放置在哪个项目的哪个目录下
targetPackage 生成的 dao类文件的包名
<property name="enableSubPackages" value="false" />
是否在包名后加上scheme名称
type 生成dao文件的类型,可选择IBATIS、SPRING、GENERIC-CI、GENERIC-SI。默认使用GENERIC-CI
dao类在构造器中获取 SqlMapClient。
-->
<table tableName="ALLTYPES" domainObjectName="Customer" >
<!--
tableName 数据库表明,据说可以包含SQL通配符%和_。
domainObjectName 数据库表对应的数据对象名称,默认使用表名作为对象名称。
-->
<property name="useActualColumnNames" value="true"/>
<!--
对象的属性名是否使用字段名称
-->
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<!--
column 自增长或使用sequence生成的字段名
sqlStatement 生成字段的sql片段或其简称(参考官方文档)
identity true表示后生成,false表示预生成
例如:
postgresql:<generatedKey
column="lid"
sqlStatement="select nextval('tb000000producttype_lid_seq')"
identity="false" />
sqlserver:<generatedKey
column="lid"
sqlStatement="SqlServer"
identity="true" />
oracle:<generatedKey
column="lid"
sqlStatement="select tb000000producttype_lid_seq.nextval from dual"
identity="false" />
-->
<columnOverride column="DATE_FIELD" property="startDate" />
<!--
column 字段名
property 字段对应的属性名。(默认使用字段名的)
javaType 对应的Java类型
jdbcType 对应的jdbc类型
这里的设置覆写javaTypeResolver中的指定
-->
<ignoreColumn column="FRED" />
<!--
column 需要忽略的数据库字段
-->
<columnRenamingRule searchString="^CUST_" replaceString="" />
<!--
数据库字段名称到对象属性名称的影射关系。就是一个替换处理。
-->
</table>
</ibatorContext>
</ibatorConfiguration>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询