Mybatis逆工程jar包的修改和打包
作者:安度因 发布时间:2023-06-03 09:28:14
上一篇文章Mybatis逆工程的使用主要是讲了mybatis-generator-core-1.3.2.jar的使用,这一篇我要介绍的是,修改jar包代码,实现生成自定义模板。
1.我们从这里可以下载mybatis-generator-core-1.3.2.jar项目源码
http://maven.outofmemory.cn/org.mybatis.generator/mybatis-generator-core/1.3.2/
2.在eclipse下导入存在的maven项目,File->Import
选择项目源码位置,点finish完成导入。
项目目录结构大概这样子。
3.下面我逆工程要生成的mapping和xml格式。
4.开始修改,首先说明一下各目录
最底边的tse包是我自定义的包,里面是个主类,测试生成的代码是否达到预期标准。
由于这个架包是老外写的,生成的代码风格和我们不大一一样,如果你想修改代码格式,建议你看一下菠萝大象的文章,我这里就不讲代码格式了。
http://www.blogjava.net/bolo/archive/2015/03/20/423683.html
首先,我们先修改逆工程要生成的接口文件mapping的代码,默认情况下有增删改查,我们讲其中一个改方法update吧
比如 我要让生成的mapping中有这样的一个方法 void update(Map<String, Object> dataMap);
就修改org.mybatis.generator.codegen.mybatis3.javamapper.elements包下的UpdateByPrimaryKeyWithoutBLOBsMethodGenerator类,如下:
/*
* Copyright 2009 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mybatis.generator.codegen.mybatis3.javamapper.elements;
import java.util.Set;
import java.util.TreeSet;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.JavaVisibility;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.Parameter;
/**
*
* @author Jeff Butler
*
*/
public class UpdateByPrimaryKeyWithoutBLOBsMethodGenerator extends
AbstractJavaMapperMethodGenerator {
public UpdateByPrimaryKeyWithoutBLOBsMethodGenerator() {
super();
}
@Override
public void addInterfaceElements(Interface interfaze) {
Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
FullyQualifiedJavaType parameterType = new FullyQualifiedJavaType(
introspectedTable.getBaseRecordType());
importedTypes.add(parameterType);
//新增一个方法
Method method = new Method();
//添加方法修饰符PUBLIC
method.setVisibility(JavaVisibility.PUBLIC);
//设置返回值,这里我用的是自定义的void,无返回值方法 getVoidInstance()
//FullyQualifiedJavaType类中可以自定义返回值方法,大家可以自己进去添加
//不想那么麻烦的话,可以 new FullyQualifiedJavaType("void") , 构造函数写上返回类型就行了
method.setReturnType(FullyQualifiedJavaType.getVoidInstance());
//设置方法名,同样可以自己进去看
method.setName(introspectedTable.getUpdateByPrimaryKeyStatementId());
//method.addParameter(new Parameter(parameterType, "record")); //$NON-NLS-1$
FullyQualifiedJavaType mapType=FullyQualifiedJavaType.getMyMapInstance();
//方法的参数,这里是Map类型的dateMap参数
Parameter parameter = new Parameter(mapType, "dataMap");
method.addParameter(parameter);
context.getCommentGenerator().addGeneralMethodComment(method,
introspectedTable);
addMapperAnnotations(interfaze, method);
if (context.getPlugins()
.clientUpdateByPrimaryKeyWithoutBLOBsMethodGenerated(method,
interfaze, introspectedTable)) {
interfaze.addImportedTypes(importedTypes);
interfaze.addMethod(method);
}
}
public void addMapperAnnotations(Interface interfaze, Method method) {
return;
}
}
大家可以根据注释来修改。
接下来修改mapping对应的xml中的代码,同样的,这里我只介绍修改update方法,相信看完你就能自己修改其它方法。
就修改org.mybatis.generator.codegen.mybatis3.xmlmapper.elements包下的UpdateByPrimaryKeyWithoutBLOBsElementGenerator类,如下:
/*
* Copyright 2009 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mybatis.generator.codegen.mybatis3.xmlmapper.elements;
import java.util.Iterator;
import java.util.List;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.dom.OutputUtilities;
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;
/**
*
* @author Jeff Butler
*
*/
public class UpdateByPrimaryKeyWithoutBLOBsElementGenerator extends
AbstractXmlElementGenerator {
//private boolean isSimple;
public UpdateByPrimaryKeyWithoutBLOBsElementGenerator(boolean isSimple) {
super();
//this.isSimple = isSimple;
}
@Override
public void addElements(XmlElement parentElement) {
//update标签(方法最外层)
XmlElement answer = new XmlElement("update"); //$NON-NLS-1$
//update标签的属性
answer.addAttribute(new Attribute(
"id", introspectedTable.getUpdateByPrimaryKeyStatementId())); //$NON-NLS-1$
answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$
"Map"));
//把标签加进去
context.getCommentGenerator().addComment(answer);
StringBuilder sb = new StringBuilder();
sb.append("update "); //$NON-NLS-1$
sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
//标签内容,即文本元素
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
//set标签
XmlElement setElement = new XmlElement("set"); //$NON-NLS-1$
//获取数据库表中的所有字段
List <IntrospectedColumn> cols=introspectedTable.getAllColumns();
//迭代
java.util.Iterator<IntrospectedColumn> iter =cols.iterator();
while (iter.hasNext()) {//迭代
//迭代到某一字段
IntrospectedColumn introspectedColumn = iter.next();
//if标签
XmlElement ifElement = new XmlElement("if"); //$NON-NLS-1$
//字段名
String str=MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn);
//if标签添加属性test,值为 字段 !=null and 字段!=''
ifElement.addAttribute(new Attribute("test",str+" != null and "+str+"!='' "));
//if标签内容 ,文本元素,给字段赋予即将修改的值
sb.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
sb.append(" = "); //$NON-NLS-1$
sb.append(MyBatis3FormattingUtilities
.getParameterClause(introspectedColumn));
if (iter.hasNext()) {
sb.append(',');
}
//if标签添加上面的文本元素
ifElement.addElement(new TextElement(sb.toString()));
if (iter.hasNext()) {
sb.setLength(0);
OutputUtilities.xmlIndent(sb, 1);
}
setElement.addElement(ifElement);
}
//where元素(修改的字段前提条件)
XmlElement whereElement =new XmlElement("where");
for (IntrospectedColumn introspectedColumn : introspectedTable
.getPrimaryKeyColumns()) {//遍历表中字段进行判断
sb.setLength(0);
sb.append(MyBatis3FormattingUtilities
.getEscapedColumnName(introspectedColumn));
sb.append(" = "); //$NON-NLS-1$
sb.append(MyBatis3FormattingUtilities
.getParameterClause(introspectedColumn));
whereElement.addElement(new TextElement(sb.toString()));
}
//方法中最外层xml元素 update元素添加set元素和where元素
answer.addElement(setElement);
answer.addElement(whereElement);
if (context.getPlugins()
.sqlMapUpdateByPrimaryKeyWithoutBLOBsElementGenerated(answer,
introspectedTable)) {
parentElement.addElement(answer);
}
}
}
其它方法大家可以根据这个update方法改。
如果要添加新方法的话参考下面这个帖子
http://m.blog.csdn.net/article/details?id=35985705
下面我来验证修改成果
generatorConfig.xml //先配置xml 放在src/main/resources/ 目录下
<?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>
<!-- 引入配置文件 -->
<!-- 指定数据连接驱动jar地址 -->
<classPathEntry location="E:\eclipse_workspace\testMybatis\mysql-connector-java-5.1.13-bin.jar" />
<!-- 一个数据库一个context -->
<context id="infoGuardian" 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/login?characterEncoding=UTF-8" userId="root"
password="root" />
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成实体类地址 -->
<javaModelGenerator targetPackage="pojo"
targetProject="mybatis3" >
<!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
<property name="enableSubPackages" value="true"/>
<!-- 是否针对string类型的字段在set的时候进行trim调用 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapxml文件 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="mybatis3" >
<!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成mapxml对应client,也就是接口dao -->
<javaClientGenerator type="XMLMAPPER" targetPackage="mapper"
targetProject="mybatis3">
<!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 配置表信息,这里没生成一张表,这里需要改变一次对应表名 -->
<table tableName="login"
domainObjectName="Login" enableCountByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
enableUpdateByExample="false">
</table>
</context>
</generatorConfiguration>
StartUp.java//验证的主程序
package tse;
import static org.junit.Assert.assertEquals;
import java.io.File;
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.internal.DefaultShellCallback;
public class StartUp {
public static void main(String []args)throws Exception{
List<String> warnings = new ArrayList<String>();
File configFile=new File(StartUp.class.getResource("/generatorConfig.xml").toURI());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback shellCallback = new DefaultShellCallback(true);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, shellCallback, warnings);
myBatisGenerator.generate(null);
System.out.println(warnings);
}
}
好了,运行StartUp.java
就根据generatorConfig.xml的配置在目标目录生成对应文件。
OK,和我预期结果一样。
5.上面修改完了,我们开始打包。
由于是个maven项目,我用的是maven3.3.9,大家也可以用eclipse内置的maven,反正我是不喜欢。
下面是我maven项目的pom.xml文件代码
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2009-2011 The MyBatis Team
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
version: $Id: pom.xml 4114 2011-11-27 19:03:32Z simone.tripodi $
-->
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.3.2</version>
</parent>
<artifactId>mybatis-generator-core</artifactId>
<packaging>jar</packaging>
<name>MyBatis Generator Core</name>
<build>
<!-- this build creates and installs an instrumented JAR file
for use by the systests projects - so we can gather
consolidated coverage information
-->
<plugins>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>site</goal>
</goals>
</execution>
</executions>
</plugin> -->
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin> -->
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<includes>
<include>**/org/**</include>
</includes>
</configuration>
</execution>
</executions>
</plugin> -->
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin> -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<executions>
<execution>
<id>cobertura-instrument</id>
<phase>pre-integration-test</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.mybatis.generator.api.ShellRunner</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>cobertura-jar</id>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>cobertura</classifier>
<classesDirectory>${basedir}/target/generated-classes/cobertura</classesDirectory>
</configuration>
</execution>
</executions>
</plugin> -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach-jar</id>
<phase>integration-test</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix></classpathPrefix>
<mainClass>org.mybatis.generator.api.ShellRunner</mainClass>
</manifest>
</archive>
<includes>
<include>**/org/**</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>cobertura-install</id>
<phase>integration-test</phase>
<goals>
<goal>install</goal>
</goals>
<configuration>
<classifier>cobertura</classifier>
</configuration>
</execution>
</executions>
</plugin>
<!-- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>${basedir}/src/main/assembly/src.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>bundle</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin> -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>${basedir}/src/main/assembly/src.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.googlecode.maven-gcu-plugin</groupId>
<artifactId>maven-gcu-plugin</artifactId>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>upload</goal>
</goals>
<configuration>
<uploads>
<upload>
<file>${project.build.directory}/${project.artifactId}-${project.version}-bundle.zip</file>
<summary>MyBatis Generator ${project.version}</summary>
<labels>
<label>Featured</label>
<label>Type-Archive</label>
<label>Product-Generator</label>
<label>Version-${project.version}</label>
</labels>
</upload>
</uploads>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<arguments>-Prelease,gupload</arguments>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jdepend-maven-plugin</artifactId>
<version>2.0-beta-2</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
</plugin>
</plugins>
</reporting>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<scm>
<url>https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core</url>
<connection>scm:svn:https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core</connection>
<developerConnection>scm:svn:https://mybatis.googlecode.com/svn/sub-projects/generator/tags/mybatis-generator-1.3.2/mybatis-generator-core</developerConnection>
</scm>
</project>
然后是修改src/main/assembly/src.xml代码
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>bundle</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>generatorConfig.xml</include>
</includes>
<excludes>
<exclude>log4j.properties</exclude>
<exclude>src.xml</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>run.bat</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.artifactId}-${project.version}-sources.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
接下来,在src/main/ 下面新建scripts文件夹,在scripts文件夹新建txt文本文档,输入以下代码
java -jar mybatis-generator-1.3.2.jar -configfile generatorConfig.xml –overwrite
pause
改文件名为run.bat
至此,打包配置完毕。
大家可以在项目下右键Run as->maven build 在goal里输入package。或者命令行cmd中 进入项目的目录,运行mvn package,这里第一次运行会等待很久,因为maven会下载依赖的jar包,请耐心等待。
打包完毕,就会在项目根目录下的target目录生成如下结构
从上图中我们可以看到mybatis-generator-core-1.3.2.jar包已经生成。接下来我们可以用它加上generatorConfig.xml来生成自己想要的代码。
如果修改代码过程中有什么不懂的,请多看源代码。
OK,晒下成果图
本文就讲到这里!
以上所述是小编给大家介绍的Mybatis逆工程jar包的修改和打包的相关知识,希望对大家有所帮助!


猜你喜欢
- 声明:本文中资源全部收集整理于网络并无偿提供,仅可用于个人学习交流;请勿转载、售卖或商用;侵权联删!免责声明:本教程所有资源均来源于网络;仅
- Struts2Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点
- 一.HashMap 和Hashtable 的区别我们先看2个类的定义 public class Hashtable exten
- 刚接触了一个微服务架构的项目,了解到了启动方式,记录一下1、找到workspace.xml2.打开workspace.xml,找到其中的配置
- C# Path类—文件路径给定如下字符串类型filePath,表示一个文件路径:string filePath = &q
- 通常在 java 中对文本、网络资源等操作起来是很繁杂的,要声明,读取,关闭三个阶段,还得考虑异常情况。假设我们要读取一段文本显示到控制台,
- 本文实例为大家分享了unity实现虚拟摇杆控的具体代码,供大家参考,具体内容如下using UnityEngine;using UnityE
- 前言首先,synchronized 是什么?我们需要明确的给个定义——同步锁,没错,它就是把锁。可以
- 程序的结构分类:顺序结构:按照写代码的顺序 一次执行选择结构:根据条件的不同有选择的执行不同的代码循环结构:在一定条件下 反复执行某一片代码
- 从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘
- android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触
- spring:1)开源框架2)IoC(控制反转),将类的创建和依赖关系写在配置文件里,由配置文件注入,实现了松耦合3)AOP 将安全,事务等
- 定义栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作。它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个
- 界面效果图如下:报表界面说下关键代码 需要开启 Windows Management Instrumentation服务(默认已经
- 一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail
- 函数式接口函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接
- 1、cs代码public void DownFile(string filePath ,string fileName ){ // file
- 之前使用OnSharedPreferenceChangeListener,遇到了点小问题,就是有些时候OnSharedPreferenceC
- 本文实例讲述了C#操作PowerPoint的方法。分享给大家供大家参考。具体如下:这里C#操作PowerPoint的基本代码,包括打开ppt
- 1.什么是mybatis动态sql看到动态,我们就应该想到,这是一个可以变化的sql语句MyBatis的动态SQL是基于OGNL表达式的,它