1. 程式人生 > >MyBatis Generator系列(二)----自定義CommentGenerator實現中文註釋

MyBatis Generator系列(二)----自定義CommentGenerator實現中文註釋

一、簡介

由於MyBatis Generator自帶了生成註釋的功能,但是,是英文的而且生成的根本無法理解,所以可以通過,修改他的原始碼來實現生成中文的註釋,具體方式有以下幾種:

1) 自定義CommentGenerator

2) 修改原始碼

3) PluginAdapter外掛的形式

二、自定義CommentGenerator實現中文註釋

2.1、先建立Maven專案


然後右鍵專案->new->source folder,輸入src/main/resources,建好resources目錄


然後在POM.XML中加入以下依賴:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.fendo</groupId>
  <artifactId>mybatis-generator-plus</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mybatis-generator-plus</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	    <scope>test</scope>
	</dependency>
	
	<dependency>
	    <groupId>org.mybatis.generator</groupId>
	    <artifactId>mybatis-generator-core</artifactId>
	    <version>1.3.5</version>
    </dependency>
	<dependency>
	     <groupId>com.oracle</groupId>
	     <artifactId>ojdbc6</artifactId>
	     <version>6.0</version>
	</dependency>
	<dependency>
	     <groupId>mysql</groupId>
	     <artifactId>mysql-connector-java</artifactId>
	     <version>5.1.9</version>
	</dependency>
	
  </dependencies>
  <build>
    <finalName>mybatis-generator-plus</finalName>
    <plugins>
      	<plugin>
	    	<groupId>org.apache.maven.plugins</groupId>
	    	<artifactId>maven-compiler-plugin</artifactId>
	    	<version>2.3.2</version>
	    	<configuration>
	    	  <source>1.8</source>
	    	  <target>1.8</target>
	    	</configuration>
	    </plugin>
    </plugins>
   </build>
  
</project>

引入了mybatis-generator-core1.3.5和mysql,oracle。

注意: 

ojdbc6需要自己手動進行安裝,下載ojdbc6之後,通過以下命令進行安裝:

mvn install:install-file -Dfile=C:/Users/fendo/Downloads/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=6.0 -Dpackaging=jar -DgeneratePom=true


2.2、建立MyCommentGenerator類實現CommentGenerator介面

package org.mybatis.generator;


import static org.mybatis.generator.internal.util.StringUtility.isTrue;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

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.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.InnerClass;
import org.mybatis.generator.api.dom.java.InnerEnum;
import org.mybatis.generator.api.dom.java.JavaElement;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.api.dom.java.Parameter;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;

/**   
 * @Title: MyCommentGenerator.java 
 * @Package com.fendo.mybatis_generator_plus 
 * @Description:  mybatis generator 自定義comment生成器.
 *                基於MBG 1.3.5
 * @author fendo
 * @date 2017年10月5日 下午3:07:26 
 * @version V1.0   
*/
public class MyCommentGenerator implements CommentGenerator{

    /**
      * properties配置檔案
     */
    private Properties properties;
    /**
      * properties配置檔案
     */
    private Properties systemPro;
    
    /*
     * 父類時間
     */
    private boolean suppressDate;
    
    /**
     * 父類所有註釋
     */
    private boolean suppressAllComments;
    
    /**
     * 當前時間
     */
    private String currentDateStr;
    
    public MyCommentGenerator() {
        super();
        properties = new Properties();
        systemPro = System.getProperties();
        suppressDate = false;
        suppressAllComments = false;
        currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
    }
    
    /**
     * Java類的類註釋
     */
	@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().replace("\n", " "));
        innerClass.addJavaDocLine(" */");
	}

	/**
	 * 為類添加註釋
	 */
	@Override
	public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
		if (suppressAllComments) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        innerClass.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        innerClass.addJavaDocLine(sb.toString().replace("\n", " "));
        sb.setLength(0);
        sb.append(" * @author ");
        sb.append(systemPro.getProperty("user.name"));
        sb.append(" ");
        sb.append(currentDateStr);
        innerClass.addJavaDocLine(" */");
	}

	
	/**
	 * Mybatis的Mapper.xml檔案裡面的註釋
	 */
	@Override
	public void addComment(XmlElement xmlElement) {
		
	}

	/**
	 * 
	 *@Title addConfigurationProperties 
	 *@Description: 從該配置中的任何屬性新增此例項的屬性CommentGenerator配置。
	 *              這個方法將在任何其他方法之前被呼叫。
	 *@Author fendo
	 *@Date 2017年10月5日 下午3:45:58
	 *@return
	 *@throws
	 */
	@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));
	}

	/**
	 * 
	 *@Title getDateString 
	 *@Description: 此方法返回格式化的日期字串以包含在Javadoc標記中和XML註釋。 如果您不想要日期,則可以返回null在這些文件元素中。
	 *@Author fendo
	 *@Date 2017年10月5日 下午3:45:58
	 *@return
	 *@throws
	 */
    protected String getDateString() {
        String result = null;
        if (!suppressDate) {
            result = currentDateStr;
        }
        return result;
    }
    
    /**
     * 
     *@Title addJavadocTag 
     *@Description: 此方法為其添加了自定義javadoc標籤。
     *@Author fendo
     *@Date 2017年10月5日 下午3:49:05
     *@param javaElement
     *@param markAsDoNotDelete
     *@throws
     */
	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());
    }
	
	
	/**
	 * 為列舉添加註釋
	 */
	@Override
	public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
		if (suppressAllComments) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        innerEnum.addJavaDocLine("/**");
        sb.append(" * ");
        sb.append(introspectedTable.getFullyQualifiedTable());
        innerEnum.addJavaDocLine(sb.toString().replace("\n", " "));
        innerEnum.addJavaDocLine(" */");
	}

	/**
	 * Java屬性註釋
	 */
	@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().replace("\n", " "));
        field.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().replace("\n", " "));
        field.addJavaDocLine(" */");
	}

	/**
	 * 普通方法的註釋,這裡主要是XXXMapper.java裡面的介面方法的註釋
	 */
	@Override
	public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
	  if (suppressAllComments) {
        return;
      }
      method.addJavaDocLine("/**");
      addJavadocTag(method, false);
      method.addJavaDocLine(" */");
	}

	
	/**
	 * 給getter方法加註釋
	 */
	@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().replace("\n", " "));
        sb.setLength(0);
        sb.append(" * @return ");
        sb.append(introspectedColumn.getActualColumnName());
        sb.append(" ");
        sb.append(introspectedColumn.getRemarks());
        method.addJavaDocLine(sb.toString().replace("\n", " "));
        method.addJavaDocLine(" */");
	}

	/**
	 * 給Java檔案加註釋,這個註釋是在檔案的頂部,也就是package上面。
	 */
	@Override
	public void addJavaFileComment(CompilationUnit compilationUnit) {
    	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    	compilationUnit.addFileCommentLine("/*");
    	compilationUnit.addFileCommentLine("*");
    	compilationUnit.addFileCommentLine("* "+compilationUnit.getType().getShortName()+".java");
    	compilationUnit.addFileCommentLine("* Copyright(C) 2017-2020 fendo公司");
    	compilationUnit.addFileCommentLine("* @date "+sdf.format(new Date())+"");
    	compilationUnit.addFileCommentLine("*/");
	}

	/**
	 * 為模型類添加註釋
	 */
	@Override
	public void addModelClassComment(TopLevelClass arg0, IntrospectedTable arg1) {
		
	}

	/**
	 * 為呼叫此方法作為根元素的第一個子節點添加註釋。
	 */
	@Override
	public void addRootComment(XmlElement arg0) {
		
	}

	
	/**
	 * 給setter方法加註釋
	 */
	@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().replace("\n", " "));
        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().replace("\n", " "));
        method.addJavaDocLine(" */");
	}

}

配置generator.xml,修改其中的<commentGenerator>為如下形式:
<commentGenerator type="package org.mybatis.generator.MyCommentGenerator">
</commentGenerator>

注意type的值為MyCommentGenerator類的全路徑,完整檔案如下:

<?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:\MavenRepository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>  
    <context id="DB2Tables"  targetRuntime="MyBatis3">  
		<!-- 指定生成的java檔案的編碼,沒有直接生成到專案時中文可能會亂碼 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 這裡的type裡寫的是你的實現類的類全路徑 -->
        <commentGenerator type="com.fendo.generatorplus.MyCommentGenerator">
        </commentGenerator>
        
        <!--資料庫連結URL,使用者名稱、密碼 -->   
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root">  
        </jdbcConnection>  
        <javaTypeResolver>  
            <property name="forceBigDecimals" value="false"/>  
        </javaTypeResolver>  
        <!-- 生成模型的包名和位置-->  
        <javaModelGenerator targetPackage="com.fendo.generatorplus.entity" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
            <property name="trimStrings" value="true"/>  
        </javaModelGenerator>  
        <!-- 生成對映檔案的包名和位置-->  
        <sqlMapGenerator targetPackage="com.fendo.generatorplus.dao" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
        </sqlMapGenerator>  
        <!-- 生成DAO的包名和位置-->  
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.fendo.generatorplus.dao" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
        </javaClientGenerator>  
        <!-- 要生成的表 tableName是資料庫中的表名或檢視名 domainObjectName是實體類名-->  
        <table tableName="test" domainObjectName="Test" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>  
</generatorConfiguration>  

2.3、測試程式碼生成

新建StartUp測試類

package org.mybatis.generator;

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

/**   
 * @Title: StartUp.java 
 * @Package com.fendo.mybatis_generator_plus 
 * @Description: TODO
 * @author fendo
 * @date 2017年10月5日 下午3:53:17 
 * @version V1.0   
*/
public class StartUp {

	public static void main(String[] args) throws URISyntaxException {
        try {
        	System.out.println("--------------------start generator-------------------");
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            ClassLoader classloader = Thread.currentThread().getContextClassLoader();
            InputStream is = classloader.getResourceAsStream("generatorConfig.xml");
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(is);
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        	System.out.println("--------------------end generator-------------------");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
    }
}


然後執行StartUp檔案,就會自動生成程式碼了,生成的bean程式碼如下:


生成的Mapper如下


能生成中文註釋了,但是好像類的註釋並沒有生成,而且mapper中的註釋生成的有點無視。。。這些問題,在修改原始碼實現中文註釋中,得以解決,下一步,就是,把這個專案,打包成JAR,這樣才好使用,要使依賴包被打包到最後的jar包中,要在pom.xml中進行相應的配置:

	    <plugin>
              <!-- 因為專案中使用了依賴包,所以要使用maven-assembly-plugin來構建,會把依賴包同時打進jar包中 -->
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.6</version>
              <configuration>
                  <!-- 這裡不指定為false打包會生成兩個jar包,我們要用的那個jar包命名很亂,後面加了
                  jar-with-dependencies,不喜歡,直接禁用掉 -->
                  <appendAssemblyId>false</appendAssemblyId>
                  <archive>
                      <manifest>
                          <!-- 指定類的全路徑  否則執行會報找不到main class的錯誤-->
                          <mainClass>org.mybatis.generator.api.ShellRunner</mainClass>
                      </manifest>
                  </archive>
                  <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
              </configuration>
              <executions>
                  <execution>
                      <id>make-assembly</id>
                      <phase>package</phase>
                      <goals>
                          <goal>single</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>


由於使用了Generator的ShellRunner,所以在打包JAR的時候,可以刪了StartUp和generatorConfig.xml檔案,然後在專案根路徑使用打包命令

mvn clean package

來打包成jar檔案,生成如下的jar包

然後把mybatis-generator-plus.jar複製到一個目錄下,同時新建一個generatorConfig.xml配置檔案,以及一個cmd檔案


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:\MavenRepository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar"/>  
    <context id="DB2Tables"  targetRuntime="MyBatis3">  
		<!-- 指定生成的java檔案的編碼,沒有直接生成到專案時中文可能會亂碼 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 這裡的type裡寫的是你的實現類的類全路徑 -->
        <commentGenerator type="org.mybatis.generator.MyCommentGenerator">
        </commentGenerator>
        
        <!--資料庫連結URL,使用者名稱、密碼 -->   
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root">  
        </jdbcConnection>  
        <javaTypeResolver>  
            <property name="forceBigDecimals" value="false"/>  
        </javaTypeResolver>  
        <!-- 生成模型的包名和位置-->  
        <javaModelGenerator targetPackage="com.fendo.generatorplus.entity" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
            <property name="trimStrings" value="true"/>  
        </javaModelGenerator>  
        <!-- 生成對映檔案的包名和位置-->  
        <sqlMapGenerator targetPackage="com.fendo.generatorplus.dao" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
        </sqlMapGenerator>  
        <!-- 生成DAO的包名和位置-->  
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.fendo.generatorplus.dao" targetProject="src/main/java">  
            <property name="enableSubPackages" value="true"/>  
        </javaClientGenerator>  
        <!-- 要生成的表 tableName是資料庫中的表名或檢視名 domainObjectName是實體類名-->  
        <table tableName="test" domainObjectName="Test" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>  
</generatorConfiguration>  

cmd內容如下:
echo off
set JAVA_HOME=C:\work\java\jdk1.8.0_102
set M2_HOME=C:\work\Java\apache-maven-3.0.3

set PATHP=%PATH%
set PATH=%PATH%;%M2_HOME%\bin;%ANT_HOME%\bin

Java -jar mybatis-generator-plus.jar -configfile generatorConfig.xml -overwrite

set PATHP=%PATH%

然後一執行就cmd檔案就會自動生成程式碼了。

相關推薦

MyBatis Generator系列()----定義CommentGenerator實現中文註釋

一、簡介 由於MyBatis Generator自帶了生成註釋的功能,但是,是英文的而且生成的根本無法理解,所以可以通過,修改他的原始碼來實現生成中文的註釋,具體方式有以下幾種: 1) 自定義CommentGenerator 2) 修改原始碼 3) PluginAdap

整合maven+mybatis+generator生成java定義model實體類,dao介面和mapper對映檔案

通過繼承PluginAdapter類,開發自定義外掛,生成自定義的中文註解的java實體類,dao介面和mapper對映檔案. 1.pom.xml新增依賴的jar包: <dependencies> <!--mysql-->

Android繪圖系列()——定義View繪製基本圖形

這個系列主要是介紹下Android自定義View和Android繪圖機制,自己能力有限,如果在介紹過程中有什麼錯誤,歡迎指正 前言 在上一篇Android繪圖系列(一)——自定義View基礎中我們瞭解自定義View相關的基本知識,不過,這些東西依舊還

MyBatis Generator系列(八)----MyBatis Generator定義外掛實現定義Mapper

一、建立基類 有時候會通過建立實體的基類,用來複用一些程式碼,然後讓其他的實體類整合這個類: package com.fendo.bean; /** * @Title: BaseModel.java * @Package com.fendo.bean *

Spring Boot入門系列(十七)整合Mybatis,建立定義mapper 實現多表關聯查詢!

之前講了Springboot整合Mybatis,介紹瞭如何自動生成pojo實體類、mapper類和對應的mapper.xml 檔案,並實現最基本的增刪改查功能。mybatis 外掛自動生成的mapper 實現了大部分基本、通用的方法,如:insert、update、delete、select 等大概20個左右

Mybatis定義註解實現DAO層--實現DAO層介面

  Java新增自定義註解:https://www.cnblogs.com/0xcafedaddy/p/6095187.html 1、自定義一個註解@MybatisRepository用作dao掃描 /** * @author cao * @description 前沿my

Spark 次排序定義key 實現(Java)

楔子 spark java版本的二次排序 實現 資料如下 2::4 2::10 3::6 1::5 按照 第一列 和第二列 倒敘排列 實現如下的結果 3::6 2::10 2::4 1::5 demo GitHub 位置 的 Second

ios多執行緒操作(十)—— 定義NSOperation實現網路下載後回撥

- (void)main { @autoreleasepool { // 下載圖片的耗時操作 NSURL *url = [NSURL URLWithString:self.urlString]; NSData *data = [NSDa

Mybatis呼叫Postgres定義函式實現批量更新的解決方案

前言 如題,提供批量更新的一種解決方案,不一定最優,僅僅是一種解決問題的思路,廢話不多說下面具體看一下應用場景和詳細的解決步驟~ 應用場景 如下圖所示,是一個資訊編輯頁面: 可以這是

Android實現定義相機系列(1)—定義view裁剪控制元件

目標 本系列文章主要記錄自定義相機拍照系列,專案原始碼還在編寫中,後續會傳到github,內容包括: 1、使用Android的Camera API自定義拍照模式,例如人臉拍照,OCR拍照等; 2、對拍完的照片進行裁剪; 3、自定義圖片伸縮view,使用手勢對圖

J2EE專案使用定義註解實現基於SpringMVC + Mybatis + Mysql的讀寫分離

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/

MyBatis Generator系列(三)----修改原始碼實現中文註釋

1)匯入原始碼 再新建一個Maven專案,然後把mybatis-generator-core-1.3.5解壓,複製org目錄到eclipse中去,完整的專案如下: 此時,專案有可能會報錯,因為有依賴包沒有引入,缺少log4j和ant包,在pom.xml中新增上依賴,順

android定義View,實現折線圖(

效果圖: LineChartView類: public class LineChartView extends View { private int width; private int height; private float maxVal

Spring+SpringMVC+Mybatis 利用AOP定義註解實現可配置日

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 5

Hadoop系列-MapReduce定義資料型別(序列化、反序列化機制)(十

Github程式碼下載地址: 大家都知道,Hadoop中為Key的資料型別必須實現WritableComparable介面,而Value的資料型別只需要實現Writable介面即可;能做Key的一定可以做Value,能做Value的未必能做Key。但是具體應該怎麼應

vue2入坑隨記() -- 定義動態組件

blank -1 reat files 但是 name define 構建 prototype 學習了Vue全家桶和一些UI基本夠用了,但是用元素的方式使用組件還是不夠靈活,比如我們需要通過js代碼直接調用組件,而不是每次在頁面上通過屬性去控制組件的表現。下面講一下如何定

Android -- 定義view實現keep歡迎頁倒計時效果

super onfinish -m use new getc awt ttr alt 1,最近打開keep的app的時候,發現它的歡迎頁面的倒計時效果還不錯,所以打算自己來寫寫,然後就有了這篇文章。 2,還是老規矩,先看一下我們今天實現的效果   相較於我們常見的倒計時

Android定義View——實現水波紋效果類似剩余流量球

string 三個點 pre ber block span 初始化 move 理解 最近突然手癢就想搞個貝塞爾曲線做個水波紋效果玩玩,終於功夫不負有心人最後實現了想要的效果,一起來看下吧: 效果圖鎮樓 一:先一步一步來分解一下實現的過程 需要繪制一個正弦曲線(sin

Android定義processor實現bindView功能

lis dds 定義 java代碼 cli 註冊 文章 type() mage 一、簡介 在現階段的Android開發中,註解越來越流行起來,比如ButterKnife,Retrofit,Dragger,EventBus等等都選擇使用註解來配置。按照處理時期,註解又分為兩

定義toast實現

web javascript html5 toast ys_toast.css.ys-toast{ position:fixed; left:0; right:0; top:0; bottom:0; z-index: 999999; } .ys-toast>em{ pos