`
www-hello
  • 浏览: 98787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ibator改进,生成中文注释

阅读更多

过修改ibator1.2.2(http://svn.apache.org/repos/asf/ibatis/java/ibator)

1) 修改org.apache.ibatis.ibator.api.Ibator类,

方法private void writeFile(File file, String content) throws IOException

修改编码如下:

private void writeFile(File file, String content) throws IOException {
       java.io.OutputStreamWriter fos = new java.io.OutputStreamWriter(new java.io.FileOutputStream(file), "UTF-8");
        fos.write(content);
        fos.flush();
        fos.close();
    }

 

2)修改org.apache.ibatis.ibator.internal.DefaultCommentGenerator类中的addFieldComment,addClassComment,addGetterComment,addSetterComment,addGeneralMethodComment,addComment方法,修改成你想要的格式。

修改如下方法:

public void addClassComment(InnerClass innerClass,
            IntrospectedTable introspectedTable) {
        addClassComment(innerClass, introspectedTable.getFullyQualifiedTable(), false);
    }

    public void addEnumComment(InnerEnum innerEnum,
            IntrospectedTable introspectedTable) {
        addEnumComment(innerEnum, introspectedTable.getFullyQualifiedTable());
    }

    public void addFieldComment(Field field,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {
        addFieldComment(field, introspectedTable.getFullyQualifiedTable(),
                introspectedColumn.getRemarks());
    }

    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
        addFieldComment(field, introspectedTable.getFullyQualifiedTable());
    }

    public void addGeneralMethodComment(Method method,
            IntrospectedTable introspectedTable) {
        addGeneralMethodComment(method, introspectedTable.getFullyQualifiedTable());
    }

    public void addGetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {
        addGetterComment(method, introspectedTable.getFullyQualifiedTable(),
                introspectedColumn.getRemarks());
    }

    public void addSetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {
        addSetterComment(method, introspectedTable.getFullyQualifiedTable(),
                introspectedColumn.getRemarks());
    }

    public void addClassComment(InnerClass innerClass,
            IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
        addClassComment(innerClass, introspectedTable.getFullyQualifiedTable(), markAsDoNotDelete);
    }

 主要是把

introspectedColumn.getActualColumnName()

 改成(利用数据库中的comment生成注释)

introspectedColumn.getRemarks()

 

3)修改好,把生成的jar文件:"ibator-core-1.2.2-SNAPSHOT.jar",改名为"ibator.jar",在安装了ibator插件的Eclipse中,覆盖eclipse\plugins\org.apache.ibatis.ibator.core_1.2.1下的jar文件

4)测试:

   4.1) 数据库脚本:

 

create table
CREATE TABLE `brand` (
   `code` varchar(36) NOT NULL default '' COMMENT '代码',
   `logopath` varchar(80) default NULL COMMENT 'logo路径',
   `name` varchar(40) NOT NULL default '' COMMENT '名字',
   `visible` bit(1) NOT NULL COMMENT '是否可见',
   PRIMARY KEY  (`code`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

create table
CREATE TABLE `employee` (
   `username` varchar(20) NOT NULL default '' COMMENT '用户名',
   `degree` varchar(10) default NULL COMMENT '等级',
   `email` varchar(50) default NULL COMMENT '电子邮箱',
   `gender` varchar(5) NOT NULL default '' COMMENT '性别',
   `imageName` varchar(41) default NULL COMMENT '图片名字',
   `password` varchar(20) NOT NULL default '' COMMENT '密码',
   `phone` varchar(20) default NULL COMMENT '电话',
   `realname` varchar(10) NOT NULL default '' COMMENT '真实姓名',
   `school` varchar(20) default NULL COMMENT '学校',
   `visible` bit(1) NOT NULL COMMENT '是否可见',
   `department_id` int(11) default NULL COMMENT '部门ID',
   `card_id` int(11) NOT NULL COMMENT '身份证',
   PRIMARY KEY  (`username`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

   4.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="D:/Eclipse/workspace/helios-3.6/test/lib/mysql_connector_java_5.jar" />
	<ibatorContext id="context1" targetRuntime="Ibatis2Java5">

		<commentGenerator>
			<property name="suppressDate" value="true" />
		</commentGenerator>

		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://127.0.0.1:3306/test" userId="root"
			password="root">
		</jdbcConnection>
		<javaModelGenerator targetPackage="cn.zlj.ibatis.entity"
			targetProject="test" />
		<sqlMapGenerator targetPackage="cn.zlj.ibatis.sqlmap"
			targetProject="test" />
		<daoGenerator targetPackage="cn.zlj.ibatis.dao"
			targetProject="test" implementationPackage="cn.zlj.ibatis.dao.impl"
			type="spring" />

		<table tableName="brand">
		</table>
		<table tableName="employee">
		</table>
	</ibatorContext>
</ibatorConfiguration>

 

  4.3)ibator生成文件

 

package cn.zlj.ibatis.entity;

public class Brand {
    /**
     * 代码
     */
    private String code;

    /**
     * logo路径
     */
    private String logopath;

    /**
     * 名字
     */
    private String name;

    /**
     * 是否可见
     */
    private Boolean visible;

    /**
     * 获取 代码
     *
     * @return 
     */
    public String getCode() {
        return code;
    }

    /**
     * 设置  代码
     *
     * @param code
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 获取 logo路径
     *
     * @return 
     */
    public String getLogopath() {
        return logopath;
    }

    /**
     * 设置  logo路径
     *
     * @param logopath
     */
    public void setLogopath(String logopath) {
        this.logopath = logopath;
    }

    /**
     * 获取 名字
     *
     * @return 
     */
    public String getName() {
        return name;
    }

    /**
     * 设置  名字
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取 是否可见
     *
     * @return 
     */
    public Boolean getVisible() {
        return visible;
    }

    /**
     * 设置  是否可见
     *
     * @param visible
     */
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }
}

 

package cn.zlj.ibatis.entity;

public class Employee {
    /**
     * 用户名
     */
    private String username;

    /**
     * 等级
     */
    private String degree;

    /**
     * 电子邮箱
     */
    private String email;

    /**
     * 性别
     */
    private String gender;

    /**
     * 图片名字
     */
    private String imagename;

    /**
     * 密码
     */
    private String password;

    /**
     * 电话
     */
    private String phone;

    /**
     * 真实姓名
     */
    private String realname;

    /**
     * 学校
     */
    private String school;

    /**
     * 是否可见
     */
    private Boolean visible;

    /**
     * 部门ID
     */
    private Integer departmentId;

    /**
     * 身份证
     */
    private Integer cardId;

    /**
     * 获取 用户名
     *
     * @return 
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置  用户名
     *
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取 等级
     *
     * @return 
     */
    public String getDegree() {
        return degree;
    }

    /**
     * 设置  等级
     *
     * @param degree
     */
    public void setDegree(String degree) {
        this.degree = degree;
    }

    /**
     * 获取 电子邮箱
     *
     * @return 
     */
    public String getEmail() {
        return email;
    }

    /**
     * 设置  电子邮箱
     *
     * @param email
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * 获取 性别
     *
     * @return 
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置  性别
     *
     * @param gender
     */
    public void setGender(String gender) {
        this.gender = gender;
    }

    /**
     * 获取 图片名字
     *
     * @return 
     */
    public String getImagename() {
        return imagename;
    }

    /**
     * 设置  图片名字
     *
     * @param imagename
     */
    public void setImagename(String imagename) {
        this.imagename = imagename;
    }

    /**
     * 获取 密码
     *
     * @return 
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置  密码
     *
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取 电话
     *
     * @return 
     */
    public String getPhone() {
        return phone;
    }

    /**
     * 设置  电话
     *
     * @param phone
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * 获取 真实姓名
     *
     * @return 
     */
    public String getRealname() {
        return realname;
    }

    /**
     * 设置  真实姓名
     *
     * @param realname
     */
    public void setRealname(String realname) {
        this.realname = realname;
    }

    /**
     * 获取 学校
     *
     * @return 
     */
    public String getSchool() {
        return school;
    }

    /**
     * 设置  学校
     *
     * @param school
     */
    public void setSchool(String school) {
        this.school = school;
    }

    /**
     * 获取 是否可见
     *
     * @return 
     */
    public Boolean getVisible() {
        return visible;
    }

    /**
     * 设置  是否可见
     *
     * @param visible
     */
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }

    /**
     * 获取 部门ID
     *
     * @return 
     */
    public Integer getDepartmentId() {
        return departmentId;
    }

    /**
     * 设置  部门ID
     *
     * @param departmentId
     */
    public void setDepartmentId(Integer departmentId) {
        this.departmentId = departmentId;
    }

    /**
     * 获取 身份证
     *
     * @return 
     */
    public Integer getCardId() {
        return cardId;
    }

    /**
     * 设置  身份证
     *
     * @param cardId
     */
    public void setCardId(Integer cardId) {
        this.cardId = cardId;
    }
}

 

<?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="brand" >
  <resultMap id="BaseResultMap" class="cn.zlj.ibatis.entity.Brand" >
    <result column="code" property="code" jdbcType="VARCHAR" />
    <result column="logopath" property="logopath" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="visible" property="visible" jdbcType="BIT" />
  </resultMap>
  <sql id="Example_Where_Clause" >
    <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>
  <sql id="Base_Column_List" >
    code, logopath, name, visible
  </sql>
  <select id="selectByExample" resultMap="BaseResultMap" parameterClass="cn.zlj.ibatis.entity.BrandExample" >
    select
    <isParameterPresent >
      <isEqual property="distinct" compareValue="true" >
        distinct
      </isEqual>
    </isParameterPresent>
    <include refid="brand.Base_Column_List" />
    from brand
    <isParameterPresent >
      <include refid="brand.Example_Where_Clause" />
      <isNotNull property="orderByClause" >
        order by $orderByClause$
      </isNotNull>
    </isParameterPresent>
  </select>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterClass="cn.zlj.ibatis.entity.Brand" >
    select 
    <include refid="brand.Base_Column_List" />
    from brand
    where code = #code:VARCHAR#
  </select>
  <delete id="deleteByPrimaryKey" parameterClass="cn.zlj.ibatis.entity.Brand" >
    delete from brand
    where code = #code:VARCHAR#
  </delete>
  <delete id="deleteByExample" parameterClass="cn.zlj.ibatis.entity.BrandExample" >
    delete from brand
    <include refid="brand.Example_Where_Clause" />
  </delete>
  <insert id="insert" parameterClass="cn.zlj.ibatis.entity.Brand" >
    insert into brand (code, logopath, name, visible)
    values (#code:VARCHAR#, #logopath:VARCHAR#, #name:VARCHAR#, #visible:BIT#)
  </insert>
  <insert id="insertSelective" parameterClass="cn.zlj.ibatis.entity.Brand" >
    insert into brand
    <dynamic prepend="(" >
      <isNotNull prepend="," property="code" >
        code
      </isNotNull>
      <isNotNull prepend="," property="logopath" >
        logopath
      </isNotNull>
      <isNotNull prepend="," property="name" >
        name
      </isNotNull>
      <isNotNull prepend="," property="visible" >
        visible
      </isNotNull>
      )
    </dynamic>
    values
    <dynamic prepend="(" >
      <isNotNull prepend="," property="code" >
        #code:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="logopath" >
        #logopath:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="name" >
        #name:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="visible" >
        #visible:BIT#
      </isNotNull>
      )
    </dynamic>
  </insert>
  <select id="countByExample" parameterClass="cn.zlj.ibatis.entity.BrandExample" resultClass="java.lang.Integer" >
    select count(*) from brand
    <include refid="brand.Example_Where_Clause" />
  </select>
  <update id="updateByExampleSelective" >
    update brand
    <dynamic prepend="set" >
      <isNotNull prepend="," property="record.code" >
        code = #record.code:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="record.logopath" >
        logopath = #record.logopath:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="record.name" >
        name = #record.name:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="record.visible" >
        visible = #record.visible:BIT#
      </isNotNull>
    </dynamic>
    <isParameterPresent >
      <include refid="brand.Example_Where_Clause" />
    </isParameterPresent>
  </update>
  <update id="updateByExample" >
    update brand
    set code = #record.code:VARCHAR#,
      logopath = #record.logopath:VARCHAR#,
      name = #record.name:VARCHAR#,
      visible = #record.visible:BIT#
    <isParameterPresent >
      <include refid="brand.Example_Where_Clause" />
    </isParameterPresent>
  </update>
  <update id="updateByPrimaryKeySelective" parameterClass="cn.zlj.ibatis.entity.Brand" >
    update brand
    <dynamic prepend="set" >
      <isNotNull prepend="," property="logopath" >
        logopath = #logopath:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="name" >
        name = #name:VARCHAR#
      </isNotNull>
      <isNotNull prepend="," property="visible" >
        visible = #visible:BIT#
      </isNotNull>
    </dynamic>
    where code = #code:VARCHAR#
  </update>
  <update id="updateByPrimaryKey" parameterClass="cn.zlj.ibatis.entity.Brand" >
    update brand
    set logopath = #logopath:VARCHAR#,
      name = #name:VARCHAR#,
      visible = #visible:BIT#
    where code = #code:VARCHAR#
  </update>
</sqlMap>

 

 

package cn.zlj.ibatis.dao;

import cn.zlj.ibatis.entity.Brand;
import cn.zlj.ibatis.entity.BrandExample;
import java.util.List;

public interface BrandDAO {
    /**
     * brand countByExample
     */
    int countByExample(BrandExample example);

    /**
     * brand deleteByExample
     */
    int deleteByExample(BrandExample example);

    /**
     * brand deleteByPrimaryKey
     */
    int deleteByPrimaryKey(String code);

    /**
     * brand insert
     */
    void insert(Brand record);

    /**
     * brand insertSelective
     */
    void insertSelective(Brand record);

    /**
     * brand selectByExample
     */
    List<Brand> selectByExample(BrandExample example);

    /**
     * brand selectByPrimaryKey
     */
    Brand selectByPrimaryKey(String code);

    /**
     * brand updateByExampleSelective
     */
    int updateByExampleSelective(Brand record, BrandExample example);

    /**
     * brand updateByExample
     */
    int updateByExample(Brand record, BrandExample example);

    /**
     * brand updateByPrimaryKeySelective
     */
    int updateByPrimaryKeySelective(Brand record);

    /**
     * brand updateByPrimaryKey
     */
    int updateByPrimaryKey(Brand record);
}

 

 

package cn.zlj.ibatis.dao.impl;

import cn.zlj.ibatis.dao.BrandDAO;
import cn.zlj.ibatis.entity.Brand;
import cn.zlj.ibatis.entity.BrandExample;
import java.util.List;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class BrandDAOImpl extends SqlMapClientDaoSupport implements BrandDAO {

    /**
     * brand BrandDAOImpl
     */
    public BrandDAOImpl() {
        super();
    }

    /**
     * brand countByExample
     */
    public int countByExample(BrandExample example) {
        Integer count = (Integer)  getSqlMapClientTemplate().queryForObject("brand.countByExample", example);
        return count;
    }

    /**
     * brand deleteByExample
     */
    public int deleteByExample(BrandExample example) {
        int rows = getSqlMapClientTemplate().delete("brand.deleteByExample", example);
        return rows;
    }

    /**
     * brand deleteByPrimaryKey
     */
    public int deleteByPrimaryKey(String code) {
        Brand _key = new Brand();
        _key.setCode(code);
        int rows = getSqlMapClientTemplate().delete("brand.deleteByPrimaryKey", _key);
        return rows;
    }

    /**
     * brand insert
     */
    public void insert(Brand record) {
        getSqlMapClientTemplate().insert("brand.insert", record);
    }

    /**
     * brand insertSelective
     */
    public void insertSelective(Brand record) {
        getSqlMapClientTemplate().insert("brand.insertSelective", record);
    }

    /**
     * brand selectByExample
     */
    @SuppressWarnings("unchecked")
    public List<Brand> selectByExample(BrandExample example) {
        List<Brand> list = getSqlMapClientTemplate().queryForList("brand.selectByExample", example);
        return list;
    }

    /**
     * brand selectByPrimaryKey
     */
    public Brand selectByPrimaryKey(String code) {
        Brand _key = new Brand();
        _key.setCode(code);
        Brand record = (Brand) getSqlMapClientTemplate().queryForObject("brand.selectByPrimaryKey", _key);
        return record;
    }

    /**
     * brand updateByExampleSelective
     */
    public int updateByExampleSelective(Brand record, BrandExample example) {
        UpdateByExampleParms parms = new UpdateByExampleParms(record, example);
        int rows = getSqlMapClientTemplate().update("brand.updateByExampleSelective", parms);
        return rows;
    }

    /**
     * brand updateByExample
     */
    public int updateByExample(Brand record, BrandExample example) {
        UpdateByExampleParms parms = new UpdateByExampleParms(record, example);
        int rows = getSqlMapClientTemplate().update("brand.updateByExample", parms);
        return rows;
    }

    /**
     * brand updateByPrimaryKeySelective
     */
    public int updateByPrimaryKeySelective(Brand record) {
        int rows = getSqlMapClientTemplate().update("brand.updateByPrimaryKeySelective", record);
        return rows;
    }

    /**
     * brand updateByPrimaryKey
     */
    public int updateByPrimaryKey(Brand record) {
        int rows = getSqlMapClientTemplate().update("brand.updateByPrimaryKey", record);
        return rows;
    }

    /**
     * brand
     */
    protected static class UpdateByExampleParms extends BrandExample {
        private Object record;

        public UpdateByExampleParms(Object record, BrandExample example) {
            super(example);
            this.record = record;
        }

        public Object getRecord() {
            return record;
        }
    }
}

 

OK,修改完成,去掉了很多原来自动生成的注释。

 

可以自己写实现org.apache.ibatis.ibator.api.CommentGenerato

或者重写org.apache.ibatis.ibator.internal.DefaultCommentGenerator这个类的

public void addClassComment(InnerClass innerClass,
            IntrospectedTable introspectedTable) 

    public void addEnumComment(InnerEnum innerEnum,
            IntrospectedTable introspectedTable) 

    public void addFieldComment(Field field,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) 

    public void addFieldComment(Field field, IntrospectedTable introspectedTable);

    public void addGeneralMethodComment(Method method,
            IntrospectedTable introspectedTable) ;

    public void addGetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) ;

    public void addSetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) ;

    public void addClassComment(InnerClass innerClass,
            IntrospectedTable introspectedTable, boolean markAsDoNotDelete) ;

 ibator1.2.2与以前的版本的主要改变就是以上这几个方法,原来的这种

addFieldComment(Field field, FullyQualifiedTable table, String columnName)方法,

在下一版本中就会被去掉了。

 

 

/**
     * Method from the old version of the interface.
     * 
     * TODO - remove in release 1.2.3
     * 
     * @deprecated as of version 1.2.2.
     * @see DefaultCommentGenerator#addFieldComment(Field, IntrospectedTable, IntrospectedColumn)
     */
    public void addFieldComment(Field field, FullyQualifiedTable table, String columnName) {
。。。。。
}
 

 

 

  • ibator.jar (401.6 KB)
  • 描述: ibator-core-1.2.2-SNAPSHOT.jar
  • 下载次数: 377
1
0
分享到:
评论
8 楼 linhao315 2011-10-09  
linhao315 写道
在oracle 10g下注释没任何变动,而且1.2.1中去掉daoGenerator就报空制针的问题依然存在,听说1.2.2已经修复了的。

另外请问下博主,我下载编译了ibator1.2.2,但是用java程序调用时就报错:java.net.MalformedURLException,死活找不到原因,放在插件里头也一样的错误,不知博主是怎么解决的?或者你这个版本不是最新的1.2.2?


不好意思!刚才没重启eclipse。重启后,注释变了,不过字段注释为null。daoGenerator去掉也不报错了。
但是有个问题,记得原版重新生成代码后,能覆盖原来一样的代码;但修改版第二次生成时,中文注释变为乱码,然后合并到旧代码中,导致字段重复。
7 楼 linhao315 2011-10-09  
在oracle 10g下注释没任何变动,而且1.2.1中去掉daoGenerator就报空制针的问题依然存在,听说1.2.2已经修复了的。

另外请问下博主,我下载编译了ibator1.2.2,但是用java程序调用时就报错:java.net.MalformedURLException,死活找不到原因,放在插件里头也一样的错误,不知博主是怎么解决的?或者你这个版本不是最新的1.2.2?
6 楼 www-hello 2010-12-31  
在MySQL中可以,没试过别的数据库,没有环境,没法试sqlserver的。
5 楼 tjc 2010-11-29  
这个对于sqlserver的注释貌似获取不到。。。
4 楼 webee 2010-11-07  
获取的注释信息为null.我确认有注释的!
3 楼 www-hello 2010-09-14  
创建数据库表时,加中文注释了吗?
如 `code` varchar(36) NOT NULL default '' COMMENT '代码', 
2 楼 www-hello 2010-09-14  
报什么错吗?
1 楼 jerry8601 2010-09-14  
我复制过去了,但是还是不行,能否在说明一下谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics