eclipse中mybatis generator插件的安裝及使用(已過時)

(1)eclipse中mybatis generator插件的安裝及使用:

https://blog.csdn.net/jay_1989/article/details/51983322

(2)mybatis-generator擴展教程系列-自定義sql xml文件:

https://blog.csdn.net/shadowsick/article/details/53664829

(3)mybatis-generator擴展教程系列 -- mapper xml文件增加自定義sql:

https://blog.csdn.net/shadowsick/article/details/53734608

 

/wushopAdm02/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 >
  <classPathEntry location="D:\eclipse_workspace\wushopAdm02\WebContent\WEB-INF\lib\mysql-connector-java-5.1.26-bin.jar"/>
  
  <context id="context1" targetRuntime="MyBatis3">
    <!--註釋生成 -->
    <commentGenerator>
		   <!-- 是否取消註釋 -->
		   <property name="suppressAllComments" value="true" />
		   <!-- 是否生成註釋代時間戳 -->
		   <property name="suppressDate" value="true" />
	</commentGenerator>
	
	<!-- jdbc 連接信息 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" userId="root" password="123456" />
    
    <!-- 指定【java數據模型】生成在哪個項目的哪個包-->
    <javaModelGenerator targetPackage="com.wu.entity" targetProject="wushopAdm02/src">
            <!-- 去除字段前後空格 -->
			<property name="trimStrings" value="true" />
    </javaModelGenerator>
    
    <!-- 指定【mapper接口類】生成在哪個項目的哪個包 -->
    <sqlMapGenerator targetPackage="com.wu.mapper.sysUserMapper" targetProject="wushopAdm02/src" />
    
    <!-- 指定【mapper映射文件】生成在哪個項目的哪個包 -->
    <javaClientGenerator targetPackage="com.wu.mapper.sysUserMapper" targetProject="wushopAdm02/src" type="XMLMAPPER" />
    
    <!-- 指定數據庫的【表名】和將要生成的【實體類名】 --><!-- 設置不生成Example類 -->
    <table schema="test" tableName="sys_user" domainObjectName="SysUser" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    
    
    
  </context>
</generatorConfiguration>

 

 

jar包/class文件如何快速反編譯成java文件

(1)反編譯工具:jd-gui

(2)用法:

1.點擊【file】選擇 jar包或者class文件(對壓縮文件無效);

2.點擊【file】選擇 save all sources】,將其保存到相應的目錄,保存的文件爲一個壓縮文件,將其解壓即可。

mybatis-generator -- 給mapper xml文件增加自定義sql

1.打開IntrospectedTable.java找到enum InternalAttribute這個枚舉定義增加一行我們的sql id

package org.mybatis.generator.api; 
public abstract class IntrospectedTable {                              
         protected enum InternalAttribute {                                             
                   ATTR_SELECT_BY_CONDITION_STATEMENT_ID, //新增一條【sql  id】的枚舉:通過條件查詢                         
         }  
}

2.IntrospectedTable.java增加【sql id】的【set,get方法】用於之後的讀取操作

public void setSelectByConditionStatementId(String s) {  //set方法
        internalAttributes.put(InternalAttribute.ATTR_SELECT_BY_CONDITION_STATEMENT_ID, s);  
    }  
      
    public String getSelectByConditionStatementId() {  //get方法
        return internalAttributes  
                .get(InternalAttribute.ATTR_SELECT_BY_CONDITION_STATEMENT_ID);  
    }  

3.在IntrospectedTable.java的已有方法calculateXmlAttributes()中設置【sql id】的值

protected void calculateXmlAttributes() {
        setSelectByConditionStatementId("select");//調用set方法,設置【sql id】的值
}

 

4.新建一個xml sql生成的實現類SelectByConditionElementGenerator.java

 

package org.mybatis.generator.codegen.mybatis3.xmlmapper.elements;  
  
import static org.mybatis.generator.internal.util.StringUtility.stringHasValue;  
import org.mybatis.generator.api.IntrospectedColumn;  
import org.mybatis.generator.api.dom.xml.Attribute;  
import org.mybatis.generator.api.dom.xml.TextElement;  
import org.mybatis.generator.api.dom.xml.XmlElement;  
import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;  
  

public class SelectByConditionElementGenerator extends  
        AbstractXmlElementGenerator {  
  
    public SelectByConditionElementGenerator() {  
        super();  
    }  
    
    @Override  
    public void addElements(XmlElement parentElement) {  
    	System.out.println("————————————————————————創建Xml元素對象<select></select>————————————————————————");
        XmlElement answer = new XmlElement("select"); 
        
        System.out.println("————————————————————————注入sql id——————————————————————");
        answer.addAttribute(new Attribute("id", introspectedTable.getSelectByConditionStatementId()));  
        
        System.out.println("————————————————————————注入sql resultMap——————————————————————");
        if (introspectedTable.getRules().generateResultMapWithBLOBs()) {  
            answer.addAttribute(new Attribute("resultMap", introspectedTable.getResultMapWithBLOBsId()));  
        } else {  
            answer.addAttribute(new Attribute("resultMap", introspectedTable.getBaseResultMapId()));  
        }  
        
        System.out.println("————————————————————————注入sql parameterType——————————————————————");
        String parameterType;  
        if (introspectedTable.getRules().generatePrimaryKeyClass()) {  
            parameterType = introspectedTable.getPrimaryKeyType();  
        } else {   
            if (introspectedTable.getPrimaryKeyColumns().size() > 1) {  
                parameterType = "map"; 
            } else {  
                parameterType = introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().toString();  
            }  
        }  
  
        answer.addAttribute(new Attribute("parameterType",parameterType));  
        
        System.out.println("————————————————————————往CommentGenerator生成器中添加Xml元素對象<select></select>————————————————————————");
        context.getCommentGenerator().addComment(answer);  
  
        StringBuilder sb = new StringBuilder();  
        sb.append("select ");  
  
        if (stringHasValue(introspectedTable  
                .getSelectByPrimaryKeyQueryId())) {  
            sb.append('\'');  
            sb.append(introspectedTable.getSelectByPrimaryKeyQueryId());  
            sb.append("' as QUERYID,");
        }  
        
        System.out.println("————————————————————————往<select></select>內填充文本元素'select'————————————————————————");
        answer.addElement(new TextElement(sb.toString())); 
        
        System.out.println("————————————————————————往<select></select>內填充BaseColumnListElement————————————————————————");
        answer.addElement(getBaseColumnListElement());  
        
        System.out.println("————————————————————————如果數據表中存在BLOBColumns,則往<select></select>內填充文本元素','————————————————————————");
        if (introspectedTable.hasBLOBColumns()) {  
            answer.addElement(new TextElement(","));
            answer.addElement(getBlobColumnListElement());  
        }  
        
        System.out.println("————————————————————————往<select></select>內填充文本元素'from'————————————————————————");
        sb.setLength(0);  
        sb.append("from "); 
        sb.append(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());  
        answer.addElement(new TextElement(sb.toString()));  
        
        
        System.out.println("————————————————————————往<select></select>內填充<where></where>對象————————————————————————");
        XmlElement whereOne = new XmlElement("select")
        answer.addElement(whereOne);
        for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) {  
        	System.out.println("————————————————————————往<where></where>內填充<if></if>對象————————————————————————");
        	XmlElement ifXML = new XmlElement("if")
        	whereOne.addElement(ifXML);
        	System.out.println("————————————————————————往<if></if>內填充sql的查詢條件————————————————————————");
        	sb.setLength(0);  
            sb.append("and "); 
            
            sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(introspectedColumn));  
            sb.append(" = ");  
            sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));  
            whereOne.addElement(new TextElement(sb.toString()));  
        }  
        System.out.println("————————————————————————往parentElement中添加Xml元素對象<select></select>————————————————————————");
        parentElement.addElement(answer);  
    }  
}  

5.在XMLMapperGenerator.java中編寫一個方法,該方法調用了【我們上面編寫的用於sql語句生成的實現類SelectByConditionElementGenerator.java】

protected void addSelectByConditionElement(XmlElement parentElement) {  
        if (introspectedTable.getRules().generateSelectByPrimaryKey()) {  
            AbstractXmlElementGenerator elementGenerator = new SelectByConditionElementGenerator(); // 創建實現類對象
            initializeAndExecuteGenerator(elementGenerator, parentElement);  //註冊實現類對象
        }  
    }  

5.在XMLMapperGenerator.java的已有方法getSqlMapElement()中調用一個方法,該方法就是【我們上面編寫的方法addSelectByConditionElement(XmlElement parentElement)】

protected XmlElement getSqlMapElement() {
      addSelectByConditionElement(answer);//註冊實現類對象
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章