1.分析目录结构“tools”(或者说模板)
2.首先分析ibatorConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ibatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN" "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd" > <ibatorConfiguration> <classPathEntry location="F:\sqljdbc.jar" /> <ibatorContext id="context1" targetRuntime="Ibatis2Java5"> <!-- classPathEntry 指定数据库jdbc驱动jar包的绝对路径。 --> <!-- 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="Example" /> </ibatorPlugin> <!-- ibatorPlugin 继承自IbatorPluginAdapter,包名必须是 org.apache.ibatis.ibator.plugins,具体实现可以参考官方文档 必须有替换和被替换字符属性。 --> <!-- <jdbcConnection driverClass="org.postgresql.Driver" connectionURL="jdbc:postgresql://127.0.0.1:5432/hibernateTest" userId="postgres" password="postgres" /> --> <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" connectionURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=PanaDatabase" userId="sa" password="sasa" /> <!-- 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="abator.model" targetProject="comboFramework/tools" /> <!-- targetProject 生成的Java Bean放置在哪个项目的哪个目录下 targetPackage 生成的Java Bean的包名 一个有用的属性 <property name="trimStrings" value="true" /> 从数据库返回的值被清理前后的空格 <property name="enableSubPackages" value="false" /> 是否在包名后加上scheme名称 --> <sqlMapGenerator targetPackage="abator.sqlmap" targetProject="comboFramework/tools" /> <!-- targetProject 生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下 targetPackage 生成的 SqlMap.xml 文件的包名 <property name="enableSubPackages" value="false" /> 是否在包名后加上scheme名称 --> <daoGenerator targetPackage="abator.dao" targetProject="comboFramework/tools" type="GENERIC-CI" /> <table tableName="InfoVoteItm"></table> </ibatorContext> </ibatorConfiguration>
需要注意的几点是
1.指向的jdbc包是否正确或存在
<classPathEntry location="F:\sqljdbc.jar" /> <ibatorContext id="context1" targetRuntime="Ibatis2Java5">
2.数据库连接是否配置正确
<jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver" connectionURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=PanaDatabase" userId="sa" password="sasa" />
3.指向的模板工具是否正确
<!-- targetProject 生成的Java Bean放置在哪个项目的哪个目录下 targetPackage 生成的Java Bean的包名 一个有用的属性 <property name="trimStrings" value="true" /> 从数据库返回的值被清理前后的空格 <property name="enableSubPackages" value="false" /> 是否在包名后加上scheme名称 --> <sqlMapGenerator targetPackage="abator.sqlmap" targetProject="comboFramework/tools" /> <!-- targetProject 生成的 SqlMap.xml 文件放置在哪个项目的哪个目录下 targetPackage 生成的 SqlMap.xml 文件的包名 <property name="enableSubPackages" value="false" /> 是否在包名后加上scheme名称 --> <daoGenerator targetPackage="abator.dao" targetProject="comboFramework/tools" type="GENERIC-CI" />
4.指向需要生成的表
<table tableName="InfoVoteItm"></table>
这里是单表(还没试过多个表一起生成呢,可以试试)
最终生成的结果如图
可以看出对iBATIS对表InfoVoteItm生成了三个模块即"sqlmap","model","dao"。
现在我们一个一个的来分析这三个部分。
在分析之前了解下InfoVoteItm表的结构
USE [PanaDatabase] GO /****** 对象: Table [dbo].[InfoVoteItm] 脚本日期: 06/04/2012 16:22:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[InfoVoteItm]( [EmpID] [nvarchar](250) COLLATE Chinese_PRC_CI_AS NULL, [InfoDetail_ID] [int] NULL, [VoteItmDate] [datetime] NULL CONSTRAINT [DF_InfoVoteItm_VoteItmDate] DEFAULT (getdate()) ) ON [PRIMARY]
A.首先我们来分析"sqlmap"这一部分对InfoVoteItm表生成的文件InfoVoteItm_SqlMap.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap namespace="InfoVoteItm" > <resultMap id="ibatorgenerated_BaseResultMap" class="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> <result column="EmpID" property="empid" jdbcType="VARCHAR" /> <result column="InfoDetail_ID" property="infodetailId" jdbcType="INTEGER" /> <result column="VoteItmDate" property="voteitmdate" jdbcType="TIMESTAMP" /> </resultMap> <sql id="ibatorgenerated_Example_Where_Clause" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> <iterate property="oredCriteria" conjunction="or" prepend="where" removeFirstPrepend="iterate" > <isEqual property="oredCriteria[].valid" compareValue="true" > ( <iterate prepend="and" property="oredCriteria[].criteriaWithoutValue" conjunction="and" > $oredCriteria[].criteriaWithoutValue[]$ </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithSingleValue" conjunction="and" > $oredCriteria[].criteriaWithSingleValue[].condition$ #oredCriteria[].criteriaWithSingleValue[].value# </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithListValue" conjunction="and" > $oredCriteria[].criteriaWithListValue[].condition$ <iterate property="oredCriteria[].criteriaWithListValue[].values" open="(" close=")" conjunction="," > #oredCriteria[].criteriaWithListValue[].values[]# </iterate> </iterate> <iterate prepend="and" property="oredCriteria[].criteriaWithBetweenValue" conjunction="and" > $oredCriteria[].criteriaWithBetweenValue[].condition$ #oredCriteria[].criteriaWithBetweenValue[].values[0]# and #oredCriteria[].criteriaWithBetweenValue[].values[1]# </iterate> ) </isEqual> </iterate> </sql> <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap" parameterClass="abator.model.InfovoteitmExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> select EmpID, InfoDetail_ID, VoteItmDate from InfoVoteItm <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> <isNotNull property="orderByClause" > order by $orderByClause$ </isNotNull> </isParameterPresent> </select> <delete id="ibatorgenerated_deleteByExample" parameterClass="abator.model.InfovoteitmExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> delete from InfoVoteItm <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </delete> <insert id="ibatorgenerated_insert" parameterClass="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> insert into InfoVoteItm (EmpID, InfoDetail_ID, VoteItmDate) values (#empid:VARCHAR#, #infodetailId:INTEGER#, #voteitmdate:TIMESTAMP#) </insert> <insert id="ibatorgenerated_insertSelective" parameterClass="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> insert into InfoVoteItm <dynamic prepend="(" > <isNotNull prepend="," property="empid" > EmpID </isNotNull> <isNotNull prepend="," property="infodetailId" > InfoDetail_ID </isNotNull> <isNotNull prepend="," property="voteitmdate" > VoteItmDate </isNotNull> ) </dynamic> values <dynamic prepend="(" > <isNotNull prepend="," property="empid" > #empid:VARCHAR# </isNotNull> <isNotNull prepend="," property="infodetailId" > #infodetailId:INTEGER# </isNotNull> <isNotNull prepend="," property="voteitmdate" > #voteitmdate:TIMESTAMP# </isNotNull> ) </dynamic> </insert> <select id="ibatorgenerated_countByExample" parameterClass="abator.model.InfovoteitmExample" resultClass="java.lang.Integer" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> select count(*) from InfoVoteItm <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </select> <update id="ibatorgenerated_updateByExampleSelective" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> update InfoVoteItm <dynamic prepend="set" > <isNotNull prepend="," property="record.empid" > EmpID = #record.empid:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.infodetailId" > InfoDetail_ID = #record.infodetailId:INTEGER# </isNotNull> <isNotNull prepend="," property="record.voteitmdate" > VoteItmDate = #record.voteitmdate:TIMESTAMP# </isNotNull> </dynamic> <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> <update id="ibatorgenerated_updateByExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> update InfoVoteItm set EmpID = #record.empid:VARCHAR#, InfoDetail_ID = #record.infodetailId:INTEGER#, VoteItmDate = #record.voteitmdate:TIMESTAMP# <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update> </sqlMap>
可以看出对表InfoVoteItm做了实体映射(实现增加add,删除delete,修改update,查询select)
首先分析下映射实体类
<resultMap id="ibatorgenerated_BaseResultMap" class="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> <result column="EmpID" property="empid" jdbcType="VARCHAR" /> <result column="InfoDetail_ID" property="infodetailId" jdbcType="INTEGER" /> <result column="VoteItmDate" property="voteitmdate" jdbcType="TIMESTAMP" /> </resultMap>
其中"id"起标识的作用,"class"映射由iBATIS生成的实体类(路径指向,若要移动该文件此处要及得修改)
"column"可以随意定义但前提是实体类中有相匹配的字段即"property","jdbcType"设置字段属性(属性与数据库字段类型相同)
查询(可以看出resultMap是对实体类的一种映射,如果查询select中的字段在实体类中未定义则会出现异常,parameterClass指向的是参数需要注意与class的区别)
<select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap" parameterClass="abator.model.InfovoteitmExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> select EmpID, InfoDetail_ID, VoteItmDate from InfoVoteItm <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> <isNotNull property="orderByClause" > order by $orderByClause$ </isNotNull> </isParameterPresent> </select>
查询返回结果值
<select id="ibatorgenerated_countByExample" parameterClass="abator.model.InfovoteitmExample" resultClass="java.lang.Integer" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> select count(*) from InfoVoteItm <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </select>
删除
<delete id="ibatorgenerated_deleteByExample" parameterClass="abator.model.InfovoteitmExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> delete from InfoVoteItm <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </delete>
添加
1.添加所有项
<insert id="ibatorgenerated_insert" parameterClass="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> insert into InfoVoteItm (EmpID, InfoDetail_ID, VoteItmDate) values (#empid:VARCHAR#, #infodetailId:INTEGER#, #voteitmdate:TIMESTAMP#) </insert>
2.选择性添加
<insert id="ibatorgenerated_insertSelective" parameterClass="abator.model.Infovoteitm" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> insert into InfoVoteItm <dynamic prepend="(" > <isNotNull prepend="," property="empid" > EmpID </isNotNull> <isNotNull prepend="," property="infodetailId" > InfoDetail_ID </isNotNull> <isNotNull prepend="," property="voteitmdate" > VoteItmDate </isNotNull> ) </dynamic> values <dynamic prepend="(" > <isNotNull prepend="," property="empid" > #empid:VARCHAR# </isNotNull> <isNotNull prepend="," property="infodetailId" > #infodetailId:INTEGER# </isNotNull> <isNotNull prepend="," property="voteitmdate" > #voteitmdate:TIMESTAMP# </isNotNull> ) </dynamic> </insert>
变更
1.选择性变更(条件可选)
<update id="ibatorgenerated_updateByExampleSelective" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> update InfoVoteItm <dynamic prepend="set" > <isNotNull prepend="," property="record.empid" > EmpID = #record.empid:VARCHAR# </isNotNull> <isNotNull prepend="," property="record.infodetailId" > InfoDetail_ID = #record.infodetailId:INTEGER# </isNotNull> <isNotNull prepend="," property="record.voteitmdate" > VoteItmDate = #record.voteitmdate:TIMESTAMP# </isNotNull> </dynamic> <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update>
2.条件必须
<update id="ibatorgenerated_updateByExample" > <!-- WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify. This element was generated on Wed Mar 09 16:57:25 CST 2011. --> update InfoVoteItm set EmpID = #record.empid:VARCHAR#, InfoDetail_ID = #record.infodetailId:INTEGER#, VoteItmDate = #record.voteitmdate:TIMESTAMP# <isParameterPresent > <include refid="InfoVoteItm.ibatorgenerated_Example_Where_Clause" /> </isParameterPresent> </update>
"model"是对实体类的封装就不说了,看下"dao"层。
"dao"层生成了两个文件InfovoteitmDAO是接口类对方法的声明(包括增,删,改,查)而InfovoteitmDAOImpl是类是对InfovoteitmDAO接口方法的
实现。
InfovoteitmDAO 接口
package abator.dao; import abator.model.Infovoteitm; import abator.model.InfovoteitmExample; import java.sql.SQLException; import java.util.List; public interface InfovoteitmDAO { /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ int countByExample(InfovoteitmExample example) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ int deleteByExample(InfovoteitmExample example) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ void insert(Infovoteitm record) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ void insertSelective(Infovoteitm record) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ List<Infovoteitm> selectByExample(InfovoteitmExample example) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ int updateByExampleSelective(Infovoteitm record, InfovoteitmExample example) throws SQLException; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ int updateByExample(Infovoteitm record, InfovoteitmExample example) throws SQLException; }
InfovoteitmDAOImpl类
package abator.dao; import abator.model.Infovoteitm; import abator.model.InfovoteitmExample; import com.ibatis.sqlmap.client.SqlMapClient; import java.sql.SQLException; import java.util.List; public class InfovoteitmDAOImpl implements InfovoteitmDAO { /** * This field was generated by Apache iBATIS ibator. * This field corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ private SqlMapClient sqlMapClient; /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public InfovoteitmDAOImpl(SqlMapClient sqlMapClient) { super(); this.sqlMapClient = sqlMapClient; } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public int countByExample(InfovoteitmExample example) throws SQLException { Integer count = (Integer) sqlMapClient.queryForObject("InfoVoteItm.ibatorgenerated_countByExample", example); return count; } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public int deleteByExample(InfovoteitmExample example) throws SQLException { int rows = sqlMapClient.delete("InfoVoteItm.ibatorgenerated_deleteByExample", example); return rows; } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public void insert(Infovoteitm record) throws SQLException { sqlMapClient.insert("InfoVoteItm.ibatorgenerated_insert", record); } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public void insertSelective(Infovoteitm record) throws SQLException { sqlMapClient.insert("InfoVoteItm.ibatorgenerated_insertSelective", record); } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ @SuppressWarnings("unchecked") public List<Infovoteitm> selectByExample(InfovoteitmExample example) throws SQLException { List<Infovoteitm> list = sqlMapClient.queryForList("InfoVoteItm.ibatorgenerated_selectByExample", example); return list; } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public int updateByExampleSelective(Infovoteitm record, InfovoteitmExample example) throws SQLException { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = sqlMapClient.update("InfoVoteItm.ibatorgenerated_updateByExampleSelective", parms); return rows; } /** * This method was generated by Apache iBATIS ibator. * This method corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ public int updateByExample(Infovoteitm record, InfovoteitmExample example) throws SQLException { UpdateByExampleParms parms = new UpdateByExampleParms(record, example); int rows = sqlMapClient.update("InfoVoteItm.ibatorgenerated_updateByExample", parms); return rows; } /** * This class was generated by Apache iBATIS ibator. * This class corresponds to the database table InfoVoteItm * * @ibatorgenerated Wed Mar 09 16:57:25 CST 2011 */ private static class UpdateByExampleParms extends InfovoteitmExample { private Object record; public UpdateByExampleParms(Object record, InfovoteitmExample example) { super(example); this.record = record; } public Object getRecord() { return record; } } }