说明: 适用于maven项目, mysql/oracle数据库, 开发工具: IDEA
1.配置generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 引入配置文件 --> <!--<properties resource="application-test.properties"/>--> <!--<classPathEntry--> <!--location="C:\Users\ubeii\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar"/>--> <context id="default" targetRuntime="MyBatis3"> <!-- 生成的Java文件的编码 --> <property name="javaFileEncoding" value="UTF-8" /> <!-- 格式化java代码 --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" /> <!-- JavaBean 实现 序列化 接口 --> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <!-- genenat entity时,生成toString --> <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> <!-- 自定义物理分页 可生成支持Mysql数据的limit 不支持Oracle --> <!--<plugin type="org.mybatis.generator.plugins.page.PaginationPlugin" />--> <!-- 自定义查询指定字段 --> <!--<plugin type="org.mybatis.generator.plugins.field.FieldsPlugin" />--> <!-- 开启支持内存分页 可生成 支持内存分布的方法及参数 <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin" /> --> <!-- generate entity时,生成hashcode和equals方法 <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin" /> --> <!-- 此处是将Example改名为Criteria 当然 想改成什么都行~ --> <!--<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">--> <!--<property name="searchString" value="Example$" />--> <!--<!– 替换后 --> <!--<property name="replaceString" value="Criteria" /> --> <!--–>--> <!--<property name="replaceString" value="Query" />--> <!--</plugin>--> <!-- 此处是将UserMapper.xml改名为UserDao.xml 当然 想改成什么都行~ --> <!--<plugin type="org.mybatis.generator.plugins.rename.RenameSqlMapperPlugin">--> <!--<property name="searchString" value="Mapper" />--> <!--<property name="replaceString" value="Dao" />--> <!--</plugin>--> <!--<!– 此处是将UserMapper改名为UserDao 接口 当然 想改成什么都行~ –>--> <!--<plugin type="org.mybatis.generator.plugins.rename.RenameJavaMapperPlugin">--> <!--<property name="searchString" value="Mapper$" />--> <!--<property name="replaceString" value="Dao" />--> <!--</plugin>--> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <commentGenerator> <property name="suppressAllComments" value="false"/> <!--生成的注释包含时间戳--> <property name="suppressDate" value="true"/> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://45.78.46.203:3306/allen?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true" userId="root" password="root"> <property name="useInformationSchema" value="true"/> </jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="true"/> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="com.allen.common.entity" targetProject="src/main/java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="true"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <!--<sqlMapGenerator targetPackage="com.allen.common.mapper" targetProject="src/main/java">--> <!--<!– enableSubPackages:是否让schema作为包的后缀 –>--> <!--<property name="enableSubPackages" value="true"/>--> <!--</sqlMapGenerator>--> <!--ANNOTATEDMAPPER: 生成java类文件,基于注解的Mapper接口,不会有对应的XML映射文件 MIXEDMAPPER:XML和注解的混合形式 XMLMAPPER:所有的方法都在XML中,接口调用依赖XML文件 --> <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.allen.common.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--<table tableName="user" domainObjectName="User" enableCountByExample="false"--> <!--enableSelectByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"/>--> <table schema="allen" tableName="USER" domainObjectName="TUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
2. 配置pom文件
2.1 添加依赖
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency>
2.2 添加插件
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <!--配置文件的位置--> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> </dependencies> </plugin>
3. 启动
出现下面情形说明成功:
BUILD SUCCESS , Process finished with exit code 0 (如果code值为1则失败)
4. 看一下生成后的文件
package com.allen.common.entity; import java.io.Serializable; public class TUser implements Serializable { private String userId; private String userPassword; private String userName; private String userSex; private String userPhone; private String userEmail; private String userAddress; private String userRemark; private static final long serialVersionUID = 1L; public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId == null ? null : userId.trim(); } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword == null ? null : userPassword.trim(); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName == null ? null : userName.trim(); } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex == null ? null : userSex.trim(); } public String getUserPhone() { return userPhone; } public void setUserPhone(String userPhone) { this.userPhone = userPhone == null ? null : userPhone.trim(); } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail == null ? null : userEmail.trim(); } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress == null ? null : userAddress.trim(); } public String getUserRemark() { return userRemark; } public void setUserRemark(String userRemark) { this.userRemark = userRemark == null ? null : userRemark.trim(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", userId=").append(userId); sb.append(", userPassword=").append(userPassword); sb.append(", userName=").append(userName); sb.append(", userSex=").append(userSex); sb.append(", userPhone=").append(userPhone); sb.append(", userEmail=").append(userEmail); sb.append(", userAddress=").append(userAddress); sb.append(", userRemark=").append(userRemark); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]"); return sb.toString(); } }
package com.allen.common.mapper; import com.allen.common.entity.TUser; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.InsertProvider; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.UpdateProvider; import org.apache.ibatis.type.JdbcType; public interface TUserMapper { @Delete({ "delete from USER", "where USER_ID = #{userId,jdbcType=VARCHAR}" }) int deleteByPrimaryKey(String userId); @Insert({ "insert into USER (USER_ID, USER_PASSWORD, ", "USER_NAME, USER_SEX, ", "USER_PHONE, USER_EMAIL, ", "USER_ADDRESS, USER_REMARK)", "values (#{userId,jdbcType=VARCHAR}, #{userPassword,jdbcType=VARCHAR}, ", "#{userName,jdbcType=VARCHAR}, #{userSex,jdbcType=VARCHAR}, ", "#{userPhone,jdbcType=VARCHAR}, #{userEmail,jdbcType=VARCHAR}, ", "#{userAddress,jdbcType=VARCHAR}, #{userRemark,jdbcType=VARCHAR})" }) int insert(TUser record); @InsertProvider(type=TUserSqlProvider.class, method="insertSelective") int insertSelective(TUser record); @Select({ "select", "USER_ID, USER_PASSWORD, USER_NAME, USER_SEX, USER_PHONE, USER_EMAIL, USER_ADDRESS, ", "USER_REMARK", "from USER", "where USER_ID = #{userId,jdbcType=VARCHAR}" }) @Results({ @Result(column="USER_ID", property="userId", jdbcType=JdbcType.VARCHAR, id=true), @Result(column="USER_PASSWORD", property="userPassword", jdbcType=JdbcType.VARCHAR), @Result(column="USER_NAME", property="userName", jdbcType=JdbcType.VARCHAR), @Result(column="USER_SEX", property="userSex", jdbcType=JdbcType.VARCHAR), @Result(column="USER_PHONE", property="userPhone", jdbcType=JdbcType.VARCHAR), @Result(column="USER_EMAIL", property="userEmail", jdbcType=JdbcType.VARCHAR), @Result(column="USER_ADDRESS", property="userAddress", jdbcType=JdbcType.VARCHAR), @Result(column="USER_REMARK", property="userRemark", jdbcType=JdbcType.VARCHAR) }) TUser selectByPrimaryKey(String userId); @UpdateProvider(type=TUserSqlProvider.class, method="updateByPrimaryKeySelective") int updateByPrimaryKeySelective(TUser record); @Update({ "update USER", "set USER_PASSWORD = #{userPassword,jdbcType=VARCHAR},", "USER_NAME = #{userName,jdbcType=VARCHAR},", "USER_SEX = #{userSex,jdbcType=VARCHAR},", "USER_PHONE = #{userPhone,jdbcType=VARCHAR},", "USER_EMAIL = #{userEmail,jdbcType=VARCHAR},", "USER_ADDRESS = #{userAddress,jdbcType=VARCHAR},", "USER_REMARK = #{userRemark,jdbcType=VARCHAR}", "where USER_ID = #{userId,jdbcType=VARCHAR}" }) int updateByPrimaryKey(TUser record); }
package com.allen.common.mapper; import com.allen.common.entity.TUser; import org.apache.ibatis.jdbc.SQL; public class TUserSqlProvider { public String insertSelective(TUser record) { SQL sql = new SQL(); sql.INSERT_INTO("USER"); if (record.getUserId() != null) { sql.VALUES("USER_ID", "#{userId,jdbcType=VARCHAR}"); } if (record.getUserPassword() != null) { sql.VALUES("USER_PASSWORD", "#{userPassword,jdbcType=VARCHAR}"); } if (record.getUserName() != null) { sql.VALUES("USER_NAME", "#{userName,jdbcType=VARCHAR}"); } if (record.getUserSex() != null) { sql.VALUES("USER_SEX", "#{userSex,jdbcType=VARCHAR}"); } if (record.getUserPhone() != null) { sql.VALUES("USER_PHONE", "#{userPhone,jdbcType=VARCHAR}"); } if (record.getUserEmail() != null) { sql.VALUES("USER_EMAIL", "#{userEmail,jdbcType=VARCHAR}"); } if (record.getUserAddress() != null) { sql.VALUES("USER_ADDRESS", "#{userAddress,jdbcType=VARCHAR}"); } if (record.getUserRemark() != null) { sql.VALUES("USER_REMARK", "#{userRemark,jdbcType=VARCHAR}"); } return sql.toString(); } public String updateByPrimaryKeySelective(TUser record) { SQL sql = new SQL(); sql.UPDATE("USER"); if (record.getUserPassword() != null) { sql.SET("USER_PASSWORD = #{userPassword,jdbcType=VARCHAR}"); } if (record.getUserName() != null) { sql.SET("USER_NAME = #{userName,jdbcType=VARCHAR}"); } if (record.getUserSex() != null) { sql.SET("USER_SEX = #{userSex,jdbcType=VARCHAR}"); } if (record.getUserPhone() != null) { sql.SET("USER_PHONE = #{userPhone,jdbcType=VARCHAR}"); } if (record.getUserEmail() != null) { sql.SET("USER_EMAIL = #{userEmail,jdbcType=VARCHAR}"); } if (record.getUserAddress() != null) { sql.SET("USER_ADDRESS = #{userAddress,jdbcType=VARCHAR}"); } if (record.getUserRemark() != null) { sql.SET("USER_REMARK = #{userRemark,jdbcType=VARCHAR}"); } sql.WHERE("USER_ID = #{userId,jdbcType=VARCHAR}"); return sql.toString(); } }
5. 如果想生成带注释的实体类, 需要修改mybatis-generator-core-1.3.6.jar
5.1 在项目中创建实体类DefaultCommentGenerator 创建路径一定不能错:org/mybatis/generator/internal/DefaultCommentGenerator.java
package org.mybatis.generator.internal; import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.*; import org.mybatis.generator.api.dom.xml.XmlElement; import org.mybatis.generator.config.MergeConstants; import org.mybatis.generator.config.PropertyRegistry; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import java.util.Set; import static org.mybatis.generator.internal.util.StringUtility.isTrue; /** * mybatis generator 注释 * * @author Klaus Allen * @date 2018/6/15 */ public class DefaultCommentGenerator implements CommentGenerator { private Properties properties; private Properties systemPro; private boolean suppressDate; private boolean suppressAllComments; private String currentDateStr; public DefaultCommentGenerator() { super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date()); } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { // add no file level comments by default return; } /** * Adds a suitable comment to warn users that the element was generated, and * when it was generated. */ @Override public void addComment(XmlElement xmlElement) { return; } @Override public void addRootComment(XmlElement rootElement) { // add no document level comments by default return; } @Override public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) { } @Override public void addGeneralMethodAnnotation(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) { } @Override public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) { } @Override public void addFieldAnnotation(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn, Set<FullyQualifiedJavaType> set) { } @Override public void addClassAnnotation(InnerClass innerClass, IntrospectedTable introspectedTable, Set<FullyQualifiedJavaType> set) { } @Override public void addConfigurationProperties(Properties properties) { this.properties.putAll(properties); suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE)); suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS)); } /** * This method adds the custom javadoc tag for. You may do nothing if you do * not wish to include the Javadoc tag - however, if you do not include the * Javadoc tag then the Java merge capability of the eclipse plugin will * break. * * @param javaElement the java element */ protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) { javaElement.addJavaDocLine(" *"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(MergeConstants.NEW_ELEMENT_TAG); if (markAsDoNotDelete) { sb.append(" do_not_delete_during_merge"); } String s = getDateString(); if (s != null) { sb.append(' '); sb.append(s); } javaElement.addJavaDocLine(sb.toString()); } /** * This method returns a formated date string to include in the Javadoc tag * and XML comments. You may return null if you do not want the date in * these documentation elements. * * @return a string representing the current timestamp, or null */ protected String getDateString() { String result = null; if (!suppressDate) { result = currentDateStr; } return result; } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); sb.append(" "); sb.append(getDateString()); innerClass.addJavaDocLine(sb.toString()); innerClass.addJavaDocLine(" */"); } @Override public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerEnum.addJavaDocLine("/**"); // addJavadocTag(innerEnum, false); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerEnum.addJavaDocLine(sb.toString()); innerEnum.addJavaDocLine(" */"); } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(sb.toString()); // addJavadocTag(field, false); field.addJavaDocLine(" */"); } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); field.addJavaDocLine(sb.toString()); field.addJavaDocLine(" */"); } @Override public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { } @Override public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { if (suppressAllComments) { return; } // method.addJavaDocLine("/**"); // addJavadocTag(method, false); // method.addJavaDocLine(" */"); } @Override public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @return "); sb.append(introspectedColumn.getActualColumnName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); // addJavadocTag(method, false); method.addJavaDocLine(" */"); } @Override public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } method.addJavaDocLine("/**"); StringBuilder sb = new StringBuilder(); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); Parameter parm = method.getParameters().get(0); sb.setLength(0); sb.append(" * @param "); sb.append(parm.getName()); sb.append(" "); sb.append(introspectedColumn.getRemarks()); method.addJavaDocLine(sb.toString()); // addJavadocTag(method, false); method.addJavaDocLine(" */"); } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); innerClass.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedTable.getFullyQualifiedTable()); innerClass.addJavaDocLine(sb.toString()); sb.setLength(0); sb.append(" * @author "); sb.append(systemPro.getProperty("user.name")); sb.append(" "); sb.append(currentDateStr); // addJavadocTag(innerClass, markAsDoNotDelete); innerClass.addJavaDocLine(" */"); } }
5.2 用压缩文件打开本地仓库中的 mybatis-generator-core-1.3.6.jar , 把编译好的class文件DefaultCommentGenerator.class替换掉原来jar包中的文件
5.3 配置文件中
<property name="suppressAllComments" value="true"/> true 改成 false
再次生成文件看一下效果:
package com.allen.common.entity; import java.io.Serializable; public class TUser implements Serializable { /** * 用户ID */ private String userId; /** * 用户密码 */ private String userPassword; /** * 用户名 */ private String userName; /** * 用户性别:01 男 02 女 */ private String userSex; /** * 用户电话 */ private String userPhone; /** * 用户邮箱 */ private String userEmail; /** * 用户地址 */ private String userAddress; /** * 备注 */ private String userRemark; /** * USER */ private static final long serialVersionUID = 1L; /** * 用户ID * @return USER_ID 用户ID */ public String getUserId() { return userId; } /** * 用户ID * @param userId 用户ID */ public void setUserId(String userId) { this.userId = userId == null ? null : userId.trim(); } /** * 用户密码 * @return USER_PASSWORD 用户密码 */ public String getUserPassword() { return userPassword; } /** * 用户密码 * @param userPassword 用户密码 */ public void setUserPassword(String userPassword) { this.userPassword = userPassword == null ? null : userPassword.trim(); } /** * 用户名 * @return USER_NAME 用户名 */ public String getUserName() { return userName; } /** * 用户名 * @param userName 用户名 */ public void setUserName(String userName) { this.userName = userName == null ? null : userName.trim(); } /** * 用户性别:01 男 02 女 * @return USER_SEX 用户性别:01 男 02 女 */ public String getUserSex() { return userSex; } /** * 用户性别:01 男 02 女 * @param userSex 用户性别:01 男 02 女 */ public void setUserSex(String userSex) { this.userSex = userSex == null ? null : userSex.trim(); } /** * 用户电话 * @return USER_PHONE 用户电话 */ public String getUserPhone() { return userPhone; } /** * 用户电话 * @param userPhone 用户电话 */ public void setUserPhone(String userPhone) { this.userPhone = userPhone == null ? null : userPhone.trim(); } /** * 用户邮箱 * @return USER_EMAIL 用户邮箱 */ public String getUserEmail() { return userEmail; } /** * 用户邮箱 * @param userEmail 用户邮箱 */ public void setUserEmail(String userEmail) { this.userEmail = userEmail == null ? null : userEmail.trim(); } /** * 用户地址 * @return USER_ADDRESS 用户地址 */ public String getUserAddress() { return userAddress; } /** * 用户地址 * @param userAddress 用户地址 */ public void setUserAddress(String userAddress) { this.userAddress = userAddress == null ? null : userAddress.trim(); } /** * 备注 * @return USER_REMARK 备注 */ public String getUserRemark() { return userRemark; } /** * 备注 * @param userRemark 备注 */ public void setUserRemark(String userRemark) { this.userRemark = userRemark == null ? null : userRemark.trim(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", userId=").append(userId); sb.append(", userPassword=").append(userPassword); sb.append(", userName=").append(userName); sb.append(", userSex=").append(userSex); sb.append(", userPhone=").append(userPhone); sb.append(", userEmail=").append(userEmail); sb.append(", userAddress=").append(userAddress); sb.append(", userRemark=").append(userRemark); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]"); return sb.toString(); } }
也可以直接下载我改好的jar包
https://download.csdn.net/download/qigc_0529/10480965
如果可以用, 就点个赞喽!