什么是MyBatis Generator
MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model代码,及mapper配置文件;
如何配置MyBatis Generator
代码生成器(MBG)是由一个XML配置文件驱动,主要告诉MBG以下三件事
- 如何连接到数据库
- 生成什么对象,以及如何生成它们
- 那些表生成对象
具体如何配置,可以参考如下链接,已经有很详细的说明了:
http://generator.sturgeon.mopaas.com/configreference/xmlconfig.html
这里给出本Demo的配置,以及相应的注释,如下:
<?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>
<!--
MyBatis3Simple 这是默认值 不会有"by example"一类的方法,只有少量的动态SQL。
flat 该模型为每一张表只生成一个实体类。这个实体类包含表中的所有字段
-->
<context id="default" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 该插件给实体类添加toString()方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 这个插件给由MBG生成的Java模型对象增加了equals和hashCode方法 -->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/> <!-- 不希望生成的注释中包含时间戳 -->
<commentGenerator>
<property name="suppressDate" value="true" />
</commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"
userId="root" password="root">
</jdbcConnection> <!--
true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
false:默认,
scale>0;length>18:使用BigDecimal;
scale=0;length[10,18]:使用Long;
scale=0;length[5,9]:使用Integer;
scale=0;length<5:使用Short;
-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver> <javaModelGenerator targetPackage="cn.edu.hdu.mbgdemo.model.generator" targetProject="src/main/java">
<!-- 是否 自动为每一个生成的类创建一个构造方法-->
<property name="constructorBased" value="false"/>
<property name="useActualColumnNames" value="true" />
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package-->
<property name="enableSubPackages" value="false"/>
<!-- 是否创建一个不可变的类 -->
<property name="immutable" value="false"/>
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true"/>
<property name="rootClass" value="cn.edu.hdu.mbgdemo.base.BaseModel"/>
</javaModelGenerator> <!-- 生成SQL map的XML文件生成器-->
<sqlMapGenerator targetPackage="mappers.generator" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator> <javaClientGenerator targetPackage="cn.edu.hdu.mbgdemo.dao.generator" targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="false"/>
<property name="rootInterface" value="cn.edu.hdu.mbgdemo.base.BaseDao"/>
</javaClientGenerator> <!--这里包含SQL通配符,表示匹配所有demo开头的表-->
<table tableName="demo_%"> </table>
</context>
</generatorConfiguration>
其实官网有很全的注释,想要了解更多配置,最好参考官网。
如何运行MyBatis Generator
有以下四种运行方式:
- 从 命令提示符 使用 XML 配置文件
- 作为 Ant 任务 使用 XML 配置文件
- 作为 Maven Plugin
- 从另一个 Java 程序 使用 XML 配置文件
个人比较推荐作为maven插件运行,方便集成,部署。
MyBatis Generator例子
新建一个maven工程,编写pom.xml文件,如下,主要是添加mybatis-generator-maven-plugin插件:
<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>cn.edu.hdu.mbgdemo</groupId>
<artifactId>mbgdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>mbgdemo</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>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies> <build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
</resources>
<pluginManagement>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> <!--帮助开发者让他们的代码兼容下一版本的Java,,Java 9开始,内部API将变为不可访问-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jdeps-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>jdkinternals</goal><!--检查主代码中是否包含对内部API的引用-->
<goal>test-jdkinternals</goal><!--检查测试代码中是否包含对内部API的引用-->
</goals>
</execution>
</executions>
</plugin> <plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<configurationFile>src/main/resources/generatorConfig-demo.xml</configurationFile>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
然后编写BaseDao和BaseModel,添加一些共性部分的代码用于被子类继承,如下:
public interface BaseDao<T extends BaseModel> { List<T> selectAll(); int delete(String id); T select(String id); int insert(T record); int update(T record);
}
public class BaseModel implements Serializable {
/**
* ID
*/
private String id;
/**
* 是否有效
*/
private Boolean valid;
/**
* 由谁创建
*/
private String createBy;
/**
* 创建时间
*/
private Date createTime;
/**
* 最后修改者
*/
private String updateBy;
/**
* 最后修改时间
*/
private Date updateTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Boolean getValid() {
return valid;
}
public void setValid(Boolean valid) {
this.valid = valid;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
} }
编写配置文件generatorConfig-demo.xml,前面部分已经给出了,这里就不贴了,按官网来配置即可。
最后执行mybatis-generator:generate命令即可;
执行前与执行后,可以发现自动生成了Dao代码,model代码,mapper配置文件:
aaarticlea/png;base64,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" alt="" /> aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVMAAAGmCAIAAABOdvCJAAAgAElEQVR4nO2da3QUVaLv68t898NZaw4fzvLMjMPJyB0dUWLocXK8s+4VueeswetZWSvMHRADp5VRl4A6wAhDiATC61BHHjIHxaAmhqcRtSGjnIAYHo4P3smk5ZEESNJJh86zq9OJ+36o7qpdVXtXV3f6UV31/629WN2V/eomv65d1VX/CETLrdPVpyrvo8ut09UEAOAgJEkScj0HAEC2gfkAuJG0md/f39/e3t7qMtrb2/v7+9PyBgKQTdJjfjAY7OjoGB4ejkbHXFWGh4c7OjqCweDE30MAskl6zL929WpEijB/tOvdQ313QhEKQkhB2Q5CSMQJjEakyLWrVyf+HgKQTdJjfmtrazQaJYQUlO14YtVeQsgTq/bKerdcPvf6znekSEQpJG4+vTF/SzQabW1tnfh7CEA2Sb/5BWU7ntt6RH5ACAmcXPnn9ctfWbHhlRUbKtZtbe/oJHHzw2EpyXJ5Y5Ewvz7ZVvFSP18o2nQptbb8AvNBPpI280dHRwkhBWU7Zv1pr7znl/Um/Z/HCoX8o5FwOMlyaUORUFafbKt4qZ8vFG28mFpbfhkdHYX5IO9Im/mRSMz8vcevFJTtOPRFc8z8vk9jhZBZf9or15d/NDw8kmS5uKFIKPsg2Vbx8kGZULThQmpt+SUSgfkg/0ja/MbGxqqqKt3G1tbWSIR9ho8EPoyVuPDKg6GkubC+UCg7lHw7mUNlQuH6C6m25hGJRGA+yDuSM//YsWNTpkyZPHmybntra6skRQYGBp97eQ+5VSuX8Y6aTz94r3xN3YsvvfviS+8SQvZ/3iwf/7/9l/OEkIGBQW059LRQWHVgfaEgCILw9IHBgQNPC4IgCEJh1fmBgcGBgfNVhcLTBw7Ftsp11LbxulVPC4Xrv9Vvl3/I2B7vPOHout6ePjAwODAwKEkwH+QfSZgva19aWso0PxwO9/f3z/FWk7Y3Sdub4da3VlbUba2//GHbuFLoJt7FB/r1HJgnCELhum/jD4V5B/r7+/u/XVdIPYpvlevIj9VHsTpyJ5rt/Qfm0dtjj6jeE45OdUD1HQ6HYT7IO6yar2g/e/ZsnvmhUIgQEjj7dltNSeDs24SQfc0RY9l1snf+ko+vtNwM6dk/Tyhc943J42/WFQrz9iv140/punR1k+1aCtd9k3h0XW/x0WE+yEcsmU9rzzN/eHgkGOwjhLTVlJCxi201JYSQd74a0pWtR7tLXzh64fLNYLDPUPY9JUyr/Mrk8deV04Sn9ir140/3PiVMW/uV0o/y1OJ2i6PrW31dOW1a5Vd9w8MjMB/kHZbMr6qqmkyxdu1aXYXW1tahoSFCSOD4Jqml/IkCQWopDxzfTAj5r+Mhpazb2/4/f/vRtxfbe9nUzRWmrfnS5PGXa6YJwtw6eSv1pG6ubnOsqZXtvXVzlU7MR6+bK6hblc1DQ0MwH+QdaftWTza/raZEMV/e7U994uiDTxx58P8efWT2X37j9bV+d6uHS91cYdqasyaPz66ZJsydOze+SJ9bpzQ9u2ZabOO0NWu0TZnb1fpKLwlH13SntIP5IB9Jm/mDg4NtHy0LHp8ntZRfeKtYaikPNs5r/2hZd/Z5f47w0GtnsjXa4OAgzAd5R9rMHxgYaKspGb9WEfz85ScKhODnL49frWirKenKBmcqHppTG3tcO0cQHqo4k5Vxu7q6ugYGBmA+yDvSaf6pyvu+79gRahE/2fZkqEUk7TtOVd53+3ZnNkrT6ofiq/CHVp/K0qC3O2/f7oT5IB9J0126166FQiFmgN9tRxMIBEKh0LVr1yb+HgKQTdKXzNHeHgqFDBfnOJxQKNTR3o5kDpB3pC2NKxgMXrt6NRsJWHbi2tWr0B7kI0jgBMCNwHwA3AjMB8CNwHwA3Eh+mO8tnprrKbDwix7BI/ozUBmADGMv809uLFQKIaRixiRjSfOQftEjeH2pt7UgszwEzAd2wkbmH3z+Hvppx7cNFTMmjY78pevUtk1zHpMfpN18v+jJtI5ZGAKAZMme+cwAP4WTlYVS106pa2eoRew6V3Xj+LI7109VzJjUdWrbhf3l3uKp8oN0m+/zZnw/nIUhAEiaLJnPC/BT+KxyqhQ6Q5flsx6tmDFp05zHvMVT5bJpzmMVMyYxj/n9oid+2b68dJdX2D6vIMS983njNVQRVSt9XsEj+mK9eH1qdbWyYQzqSMHnFTyiaGhCD0EfVui70hwJqE+MIwKQJrJhvkmAn8Jnq6ZKXfV0GRu5rqz2vcVTzVb7jGN1WRplo88rMPa8Pq9Sg/qMkJ2nP0DkR954e5+XElYxn26i+WwxfEywulI/g5R6rGoApImMm28e4EdDB/gdXHK/STE0lWWl1dZ+GDBX3JoqdA3eY+aumtrnq/vs+GP9fl6dkWF3Hu8hQTUA0kNmzU8Y4EdDB/hJN3YyS9e5Kpb5MrImxrU123x+DdZjv+gRGHtlc/M1Q2haGbqKd6FtzKgGQFrIrPkJA/wUjAF+UkuVrnC194uifseqc4VeLvtE4741ofnUNr/osbbPN+6+dQt7qqtYO69XWS/wqgGQDuzyrZ4xwE86V04X0709dfrOcFQdQ103x6Vln4jjPVbbe7xeS/t83RD0cb6xK2U7a6WvrQZAGrCF+cwAP+mcWsy1T4EcfJuHFTuwE/YwnxXgt9v7T3RJ64A5Eh/f6wPbYAvzmQF+uZ5U+ogdimCHD2yELcxnBvjlelIAOBlbmA8AyDIwHwA3AvMBcCMwHwA3AvMBcCMwHwA34kzzFz/yw5yNbfUqIQv10nbB0cSuH0S2iBNxiPmNFQ+c+OPPlbK15G76aWPFA9mbCswH+YBDzD+xdIq/cfets3tund3zzf6NuxeV0k9PLJ2SvanAfJAP5IH55gF+sTqv3Hvr7J5I/6fB87XNR9/YvaiUftr4yr3ZmSohMB/kB3Y3P2GAn8yni++9dXZP8Hxt8Hxtc8NO2Xzl6aeLTczX5fPxE/XY9fUb1R/wA3niTdSBtBkhKXVlFiJIpRLqbyFQNnpEkTacNQ32y7cQYajpDfcv2AJbm28lwE/myAsF3+zf2Hz0jeaGnaerK5bPepR+euSFAk47Yz4fN1Ev/lNNUmY8aoOV+JdYV+NAE+jKPESQTiVUB6GHozOAONPgv3zT0bVvMjIF7YF9zU8twG/3otLlsx6Vy+5FpXLZWnI3+2w/Yx3LSdRTfqjFI/r1nXDDdlk7at1AaeiKGytCtYk/5Q1nst348pOJM+K9AJB9bGp+ygF+8im95bMepc/wHZr/U3bLFMxnJvi6x3zG8U8K5uO0Qe6xqfkTCfAznuHbO+8nnNbGfD5OrhZ7NW66ZqYOFrTRfUaNFBkm3hU/SkzTr/XVvslRgDGJjPnYsNqH+DbApuZbxxjgZzzDV/O7H3Pb6/L5EpjPycGmT3tR58mUutroPhPzJ94Vf5/vZZ3go8L+NGf4ONNgvfyEo2u6w0G+Tchv85kBfqerK3YvKqXP8L0zm28+UMDe2E3kufmsAL/q2T/aWnJ39ewfKaXpNVv+Ee7c4xc9Cf4MEXAq+W0+L8Avl9ft5xfU6h3au4r8Nh8BfgCkRn6bDwBIDZgPgBuB+QC4EZgPgBuB+QC4EZgPgBuB+RosXwiAG85AfuN281MN8IP5IL9xu/mpBvjBfJDfONn8TAb4wXyQ3zjW/AwH+PGT7Vi38bK2MfP8AMgSzjQ/8wF+vGQ7v+il70lXbqQ3D+TB8gFkGweabz3Ab/EjP9xacrcS15dEgB8v30p5ok/7EEyierHbB9nHaeYnFeBHCDk0/6f0KT2rAX488+noKv2+XP5AYEbTAZBtnGa+9QA/mb3zfmJyho8f4MdJtvPp8rNiq31Rn57JDLQDIHs4zfxkqfndj03O8PED/HjJdlSunRKYR6/uTU/6AZA13G7+O7N/TJ/SQ4AfcAluN7/ptal0Yh8C/IBLcLv5OhDgB1wCzAfAjcB8ANwIzAfAjcB8ANwIzAfAjcB8ANwIzE+Rwxt+wSy5nhcAloD5KfJB1QOR0TFduXR4oRPkp/9qOHAoMD9FDqybajS/9diKy4nk19yhmx6/qHsA0nIfAMx3ATBfpampaWhoyGLlurUPhiNjcjndFiwo2/Gc+NmNM1taj624dPjZvZUP8hrSd+hqbtlLHe39wD4v7gICCYH5KrW1tXV1db29vVYqv/faQ8Ph6HA4OiJFFfOHpeiIFB2WojVrHuI1zEAcj6EbxPyARMB8ldra2kAgsGvXrps3byas/HbFtMGR6OBIdGBENX9wODo4HB0ciVZXTOM11N3Cn44AP6Po1Bb27cD0MYfhM4LuT99ccySgPsFNx/kGzFepra0lhPT29oqi2Nraal75zVXTQoPR0OBoaEg1PzQ0GhqM3hmKvrmqkNeQc5w/kQA/E/NZ3RKflx7ZeMih9sdqrk7BfBRga2C+imw+IaSzs3P16tV9fX0mld9Y+XDvwGiwf7R3IKKY39s/GhyIBAdGd6x4mNdQk8Sl9STVAD+m+fSHirZbfRZYgoMF1qwYw2Kvn1/AfBXZ/GAwaGWf//qrRd13It13It0h1fzuUCQQinSHIltfnc5rqPWOtijlAD+Duko1ZrcM87WdahYTjFnJHajNzCYPbArMV6mtre3p6bF4nP8fS6ff7pNOtwV/X930++om2fzbwcjtPqkzKG1eas18xhI6hQA/47n9eF/Mbo2rffVjQrszZzeXPyu8Xo/5KMDWwHyVpM7tV/3hlx090um2YPGS92Xtb/ZIHT1SR6/U0RNZ/4df8hpqF+xpCfDTfp9vWMkbu2Wf4TOaz22uE5xXDdgXmK+S1Pf5lS890tYttQWkIxduHrlwsy0gtQWkGwGprVtqC4TXvPxIRqeaWbBidwEwP0VWL37kelf4Wpd0vSt8PfZv+HpX+FpX+FpXuGJxHpuPS/jcAMxPkVWLfvXqi8UrFhWvWFT8KvXviheLV7xYvGrRr3I9wZSIHQRgh+98YD4AbgTmA+BGYD4AbgTmW2X8e/K37vHPvxtraEZJW/n8u7G/dY+Pf5/r/133AfOtcun2eHPX+FDk+/HvCUq6ylDk++au8Uu3x3P93+s6YL5VPvvb2OgYGRtHSXMZHSOf/W0s1/+9rgPmW6WheWz8exIdjxVeDp9SAcViGf+eNDTD/GwD863S0Dw2Rv2+muTw5dyl1MsnXmG62Myt4FsgeD+it7SK0wXP5tYJDTo2DvNzAMy3SkPzWHScRMZixTyHT6lmLB/+O3WN/XTxCr+m5eLfNF0QBM+mFt1234Jkh/jIa1rft0DwfkhvaRGLGOMmV6IwPxfAfBXz6/Zj5kdjJWEOn1JTVz5cIBRt9iuPhQU+Xk3Lxb9pulA03aN0K5crmz2xDxfrXcnmcyv4FgjeDyc6W32B+TkB5quY36vX0Dw2Ok7C0VhJmMOn1NSV+gVC0Wa//PjSZo+wwMerabn4N04X5m8WiwRvvWajZ+NmrzBdvGS9q4/M6/vma4ZITxmF+bkA5quY5/A1NI9FxsjIaKwkzOFTauqKbP7IKBkZ9W+YLpQdjv/oilgUPwhQNl7crN6SWx/rwVcW36Trh+qZjBz2CtPFi/K/hoZUb7rtArN+vFtfmaahPOf4Fv38/Rumq/O5uNkT69nwMiNjMD8HwHwV8xy+huYxKUqGI7GSMIdPqakrHyygNCsSL8S2+zcsiD/+0CsI3g8iZPiKWCQ/UIuvTPBsuBJvUiSUfUg9UBrSW2JD+MoEoWiTf1g3RMRXJsidxOem1jcO5CvTzUedIWv+6ujUVA3VpCjMzwEwX8U8h082fygSKwlz+JSaunJogVC4yR97+qFXELyH4j+6sEndwx+KkKGIvNf1rL9CqPoaCjf5hyL+9UVC2YdEflC4yT8UV47xIFbiTXTb6fqMgXxl1GyHImToiliYYP6e9VcSVIP5OQHmq5jn8DU0j4WjZFCKlYQ5fEpNXTk0Xyjc5I8/9T0teNZfJoOXxUIhvv2yWCh4D6lN/OuLBEGu9qFXKBLP6/v0ry8Snv6QDEqxCuuVIZT6+ob+9UWsDrn1ldnSE6Omypm//GLPb/JQP9JXC8P8XADzVcxz+Bqax0ZGSX84VhLm8Ck1deXAfKFwoz/2tN4rCN4D8oMi8dsw6Q+Tbzd6Yhsvievq5Vb+dUXCvHrSH/bNE+QHclfeA5qfxirEmmu69c0TtONS2+dRo7C2KwP55sUnVih41l2SH/DnL9cs8s4r8qy7pBtXrTYyCvNzAMxXSXhuf3iUhMKxkjCHT6mpK/vn04to7/7Ydv+6+Imvwvnewvh2tfJ8X6yHS2JhfNu8erVt/DH5ZqNHrVzvFYrEb2JDyB8KunFJqF79yx3rNlL1GQP55skN4+aHLonxqbLnH9uuzIdVbRjm5wKYr5Lw+/zhCLkzEisJc/iUmk4uF8VpgnffxDoZjsD8HADzrdLQPDYUIX0jsZIwh0+p6eDy9QaPUCR+PbFOhmB+LoD5VmloHhuMkOBwrCTM4VNqOrN8EEvs2zvhrgZhfi6A+VZpbB27M0L6RnKtnLOKvOBvbIX52QbmW+VK5/jlzvF+znd1KKmVfolc7hy/3IlkjmwD860yNk4u3h7/7G+5T7ByUvnsb2MXb4+PQfysA/MBcCMwHwA3AvMBcCMwHwA3AvM1LH7kh6k0o/6APAB5gdvNb6x44MQff66UrSV3008bKx6w1AvMB/mG280/sXSKv3H3rbN7bp3d883+jbsXldJPTyydYqmXPDbfL3rwp3PdiJPNb2xsrKqqSlDnlXtvnd0T6f80eL62+egbuxeV0k8bX7nX0kgwH+QbjjX/2LFjU6ZMmTx5snm1Txffe+vsnuD52uD52uaGnbL5ytNPF5uY79PE1ijm+0U1ccbHrMwUTangEUX6c0RtGN/m88p1tMOyaspW+7zKJv3cqFnF2jDnaegH5D/ONF/WvrS0NKH5R14o+Gb/xuajbzQ37DxdXbF81qP00yMvFHDa+byUGT6vooRf9MbdUKtQP9c3NW7yix7aQ80niqqrXNsvemIVmDVl0SmBGXOj9/m8eer6AU7AgeYr2s+ePdvc/MDZt9tqSgJn3yaE7F5UunzWo3LZvahULltL7maf7dct77VPGXtWza7SsMDm9ebTh+F5RL9B8vg2Rk3GSt6wIqHqcOeJIwIH4jTzae0Tmt9WU0LGLrbVlBBC5FN6y2c9Sp/hOzT/p+yWPFfpHTa9k9YbpV00m5jPWF1zzGfU1BrLnFsC89VXBfMdhtPMr6qqmkyxdu1aXs3A8U1SS/kTBYLUUh44vpkQYjzDt3feTzitOetzSh6/6OGu9lWh1J07Z7VPH1MovRnMZ9fUGsuem+lq3/A5ARyD08y3TltNiWK+vNs3nuGr+d2Pue3pE2qiRpLYVq/XQ8toPHOmmq9ppznDxzhfyDSfWVNnLHtusa2Jz/Cl+kYDW+JS89s+WhY8Pk9qKb/wVrHUUh5snNf+0bLT1RW7F5XSZ/jemc03P3Pk8XeEIG9wq/k1JePXKoKfv/xEgRD8/OXxqxVtNSXVs3+0teTu6tk/UkrTa1OzMh2/6GF9UQBAxnCp+acq7/u+Y0eoRfxk25OhFpG07zhVeR9J+br9iUOt1aE9yAIuNf/W6epTlffR5dbp6lxPCoDs4VLzAXA5MB8ANwLzAXAjMB8ANwLzAXAjMD9FDm/4BbPkel4AWALmp8gHVQ9ERsd05dLhhZA/q9BXQINkgPkpcmDdVKP5rcdWXE4gP3XJjuba+LRjuAbYcItgksgzN3aR08QOmJ8qMF+lqalpaGjIYuW6tQ+GI2NyOd0WLCjb8Zz42Y0zW1qPrbh0+Nm9lQ9y2hnun8uU/Rkx3+PR96G94QfkDTBfpba2tq6urre310rl9157aDgcHQ5HR6SoYv6wFB2RosNStGbNQ5x2hvveMnUjXEbM94q62fpFjy4+DOQHMF+ltrY2EAjs2rXr5s2bCSu/XTFtcCQ6OBIdGFHNHxyODg5HB0ei1RXTOO2MouvvkNdeve/zCh7RFztE8PrUKswEPm1EGNd8VlZgwhi/2Dw1/cpP9FFgzJuF1f4TbbcyGdabpx9acySgPmEHJboOmK9SW1tLCOnt7RVFsbW11bzym6umhQajocHR0JBqfmhoNDQYvTMUfXNVIaedifn81D06nEsfqMELz+Obz1hlWIvx8ygfPdpJ0BkenKg/TbxAgu1WJmN8O1lDM8JFmDN0IzBfRTafENLZ2bl69eq+vj5eTTrAr3cgopjf2z8aHIgEB0Z3rHiY05RpvkmWHq0B6zE3PM9kny+PxFk0qEMzgj00+1JOaphZ1J+hH8Z2y5mCxr4NQ8dnlqCaG4H5KrL5wWAw4T6fDvDrDqnmd4cigVCkOxTZ+up0TlN+/Gbi1D2L5nP27KzPCMbHC3eq+sQ+9ejePIYwBfMTT4bZGSM9TO5M/dDjVHMhMF+ltra2p6cn4XG+McDv99VNsvm3g5HbfVJnUNq81Jr5mqV6wtQ95mNeeB4dtqet5hdFfVyXhRg/xvkIQz4YP+pPezBuvt3CZJSjdtYSR9+vx+tVznBw3x/XAfNVLJ7bNwb4ydrf7JE6eqSOXqmjJ7L+D7/ktNZ+n8/+ioxplfljgbl8pX+gS/fVV7cW48eO5tMeTseGU6P+/KJH8HrZQ7K2W5iM0XxuAqJOcF411wHzVax8n88M8Dty4WZbQGoLSDcCUlu31BYIr3n5kezMOR/grarTsdp294p9IsD85GAG+F3vkq53heVyrSt8rStcsRjmK2TQfFzClzIwPzmYAX6vLipesahY/nfFi8UrXixetehXuZ6pfciM+bEjFuzwUwTmJwcC/IAzgPkAuBGYD4AbgfkAuBGYD4AbgfkAuBGYD4Abgfkasv139RL82VyfF99Xg8zgdvMbKx448cefK2Vryd3008aKBzI7PMwHOcLt5p9YOsXfuPvW2T23zu75Zv/G3YtK6acnlk7J7PD5ZD4ukXcUTja/sbGxqqoqQZ1X7r11dk+k/9Pg+drmo2/sXlRKP2185d7MThHmgxzhWPOPHTs2ZcqUyZMnm1f7dPG9t87uCZ6vDZ6vbW7YKZuvPP10Mc/8lOPxdNv1SVrabUzzlWq66EtOhp9oNjFuyp3+PllqzppgH9aNt8a0PGA/nGm+rH1paWlC84+8UPDN/o3NR99obth5urpi+axH6adHXijgtJtIPB4zLoMXwmcMzNOGWSRoTk/MGP3Dj9zjxOnRyRysV8dJywP2w4HmK9rPnj3b3Hw6Tm/3otLlsx6Vy+5FpXLZWnI352x/qvF4uu2aZB0N8V60FiXdnJbcJO2PsZI3i9Pjhv/hiCBvcJr5tPYJzafj9ORTestnPUqf4Ts0/6ecpqnG45moyw7hs2x+ggw/zgTU6elza8zi9KyH/wG74jTzq6qqJlOsXbuWV9MYp2c8w7d33k84rVOOxzNZrjND+DRpt8k3N5hvJeWOH6fHXe0j1DLfcJr51jHG6RnP8NX87sec1hOIx6PPr4laN/W1jeZrguQsNDeabzVyLzYGFVYX25r4DJ/l/wOQO1xqPjNO73R1xe5FpfQZvndm88y3Bwm+FASAi1vNZ8XpVc/+0daSu6tn/0gpTa9NzfVMdfhFD+ubAQCSxKXmM+P0SPav208Baq0O7UHKuNR8xOkBl+NS8wFwOTAfADcC8wFwIzAfADcC8wFwIzA/RQ5v+AWz5HpeAFgC5qfIB1UPREbHdOXS4YXOlx9/xdIRwPwUObBuqtH81mMrLieQn7oQR3c9f5oxXNlLXbk/IWC+I4D5Kk1NTUNDQxYr1619MBwZk8vptmBB2Y7nxM9unNnSemzFpcPP7q18kNPOcFdcpuzPmPnAEcB8ldra2rq6ut7eXiuV33vtoeFwdDgcHZGiivnDUnREig5L0Zo1D3HaGe5my9TtbTAfmAHzVWprawOBwK5du27evJmw8tsV0wZHooMj0YER1fzB4ejgcHRwJFpdMY3Tzii6/r537TX5KQf+mZnPuE/XSjifcb76jjRHAuoT1nggt8B8ldraWkJIb2+vKIqtra3mld9cNS00GA0NjoaGVPNDQ6Ohweidoeibqwo57UzM52fppRj4xzGfscqwEs5nfAWsuD5GSgcz1Q/kGJivIptPCOns7Fy9enVfXx+vJh3g1zsQUczv7R8NDkSCA6M7VjzMaco03yQhL9XAP7N9vjwSZ9GgDs05DmEkd9G78/i4CaqBHAPzVWTzg8Fgwn0+HeDXHVLN7w5FAqFIdyiy9dXpnKYGnZLI0ksm8M9kIGomjI8Xk6nqNrPj+mKdqZ8znGogt8B8ldra2p6enoTH+cYAv99XN8nm3w5GbvdJnUFp81Jr5muW6gmz9JIK/KMj9LTV/KKoD+GyEM6nHLWzVhWasfyix+P1KicVuFMCuQTmq1g8t28M8JO1v9kjdfRIHb1SR09k/R9+yWmt/T5ft6dNkKWXZOCf9ge6zF599YThfEbzOXF9BsF51UAugfkqVr7PZwb4Hblwsy0gtQWkGwGprVtqC4TXvPxIduacA7BidwQwPzmYAX7Xu6TrXWG5XOsKX+sKVyx2rPm4hM8ZwPzkYAb4vbqoeMWiYvnfFS8Wr3ixeNWiX+V6phkgdpCAHb4TgPnJgQA/4AxgPgBuBOYD4EZgPgBuBOYD4EZgPgBuxO3mI04PuBO3m2+XOD1cHwOyi9vNTzVOTyZ9d6DAfJBdHGh+VuL0CCHyTWkeXMQO8hEHmp+VOD1C4rfC+7xQH+QfzjQ/83F6RJOlo67Tqew6xh2vjLtjNe3Uxwi3A5nFmeaTjMfp0cLrQ+w0N9drbmU3bo+DcDuQXRxrPrEQp0cIeWPlw70Do8H+0STj9HgpGbqb1zXJVazt7A0ItwOZxrHmW4nTI4S8/mpR951I951IknF6hsxKQyYu0Ty1bD7C7UBWcKb5VhojI/UAABmKSURBVOL0ZP5j6fTbfdLptuDvq5uSiNPTL7CV5/pAOs1q37gd4XYgRzjTfOvn9qv+8MuOHul0W7B4yfvW4/SMR9bxLX7RI3i97Jg7xnaE24Ec4UDzk/o+v/KlR9q6pbaAdOTCzXTE6fFW3olW5Fixg+ziQPOTYvXiR653ha/FgvQmHqeXovm4hA9kGbebv2rRr159sXgFFaQ3sTi95M1HuB3IBW43HwB3AvMBcCMwHwA3AvMBcCMwHwA3AvMBcCMwHwA3kh/me4un5noKLHD9Dchb7GX+yY2FSiGEVMyYZCxpHnIil81aNB9X5gL7YSPzDz5/D/2049uGihmTRkf+0nVq26Y5j8kP0m6+et9rxsjCEAAkS/bMb2xsrKqq4v30ZGWh1LVT6toZahG7zlXdOL7szvVTFTMmdZ3admF/ubd4qvwg3eZrkrQyQxaGACBpsmT+sWPHpkyZMnnyZF6FzyqnSqEzdFk+69GKGZM2zXnMWzxVLpvmPFYxYxLzmN+QTkPl3qmZWfHbWhURdYlavlgvXp9aXRuxp73JVl3G+7yCRxQNTYgxSCvBlFgxO3QKiDbXT//YyhAWBwUOJxvmy9qXlpaamb9qqtRVT5exkevKat9bPNVstc84kNbm3hGfV2DseanYXMoWWQ19xA4r905jPt1E89miDdakp6RRT7m7X/tCtDNnDG28t9/kVVscFDifjJuvaD979mwT8z9eNVW6Ua2Ug0vuNymG1rKs9C+59teZueLWVOHE6hmDdel9o26frxrFTOUzTElLPMdX+0L0M2fpqt/n81+1xUGBC8is+bT25uYfXDJFahHlcnDJ/dKNnczSda6KZb6MLKYaSW1uPr8G6zEz9y6R+ca8zAQfRsYXwjDfEMWZlPlWBgUuILPmV1VVTaZYu3Ytr2bN8/dILVVSS9XBJffLD4yFq71fFPUS6JawdHyWTzSm2CY0n5l7l8B889RNTaKXzxvr0PBCDKt9tW86jJOZ/2l81RYHBc7HLt/q7X7qH6Rzyw4uuV86V84spnt7ahlrOPkWQ12px6XlnIjjPGbl3pmbrx/CZEqss3nsAwNGEB+Vw5foVScxKHA4djF/y5OTDi65Xzq3jFnMtU8BfJsHXI5dzCeE7Pb+k0lJ61AQH7gdG5kPAMgaMB8ANwLzAXAjMB8ANwLzAXAjMB8ANwLzAXAjMB8AN+JA82fOnJnrKQBgd5xg/po1axbyWbNmTa4nCIDtcIL5Cxcu7OiRlGJ8musJ5i+4e8+x5IH55gF+hJBnnnmmo0eSH3f0SM8+q3n6zDPPZHyKjgXmOxa7m58wwI8QsmDBAlr1jz/+WBr9Xnm6detWftOU4vfouDtL2wkr/U6fmWcahqc094iiV3u/vq5bXiJg4gkYZkDdHWxI9aMmaQz/A3mArc23EuBHCCkrK1PW9qNj38+cOVM+wh+Wxoel8cOHD/ObphS/p4u7S7ydlX6nq2y2c6XjNOhsIGa3zERACxPgv1L69TASAfX9gPzAvuZbDPCbOXPm3LlPzZ371JYtW86ePTtz5szS0lL5U6C0tFQ5z8dpnVL8Hjdsh7OdnX7HyM9h7zR19/sqT7mheoaMEEsTSPRKeYmAOCLIT2xqvvUAP0LI7/7f72TVpdHv5dN7ugr883wpxe+lYD7DaKYwrDA8E/MZ3XLMTziBhK+UlwgI8/MTm5pvPcCPEDJ7dqli+9NPz5Mf06f3UzefGb9HP7S0nZV+ZxBPH4anWavzVvvGbpmJgBYmwH+l3NU+M2cU5Ak2NT8pSkpKFPPnzJkje87E0DSl+D35d91rPJHH225ymlAzFcNCW+NibJ0u6o7Zdd2a5H+bT4D5SuNbE5/hs/D/BOyEE8x/8t/+Td6xD0vjv/3tbxcsWGCsw9yYKrzf9aw4gJgvkA6cYP5LL70064lZs56YtaZyzckvTta+//68p+c98+yzdEnrgFk23y96NDG5EB9MHCeYr6O8vDzDI2R9n0+t1aE9SAsONB8AkBCYD4AbgfkAuBGYD4AbgfkAuBGYD4Abcbv5jb4qZsn1vADILG43/7NPNkRGx3Tl0uGFkN/2+Ly4aHgCuN38hsObjOa3HltxOYH81LU1ukv004zhYl3qYvyUYN0OGBsov64TgvkTwu3mf1K/RYqMySUciUqRsXBk7MaZLa3HVlw6/Kyv/j847Qw3umXK/oyY7/Ho+9DemZMXwPwJ4Xbz6w++PixFh6Xozx5/7rnVfx4Ojz23+s8/e/y5YWlsRBo7fOh1TjvDhbqZunI3I+Z7Rd1s/aJHl/Nlf2D+hHC7+fv37hgciQ6OjK7duf9njz83MBL92ePPrd25f3AkOjgSPbh/O6edUXT9rezay+wtBP6x74E1M58V3Zcwby82T02/8hN9Zhfzrt40pw9So6kJIGqeidk7BvMnhNvNr3n/z6GhaGgoGhoalZ3/2ePPhYZG5S11dTs57UzM58fjmQX+8VLu+OYzVhnW8vbUjDDtJOiwjeykDxqnrjay8o7B/NRxu/lvv/tmcGBULrL2a3fuDw5E5C3vvLeL045pvknoXRLhP9r+Tfb5hug+S3l7Ggk1smmHykr6II3u5SQMTYH5E8Lt5v9XdXUgFJGLss8PhEblLbvfeZvTzvAbnEQ8nkXzOXt21mcE4+OFO1V9tJ5I72WpIKIspg8qLwzmZw+3m7/9rfc6+yKdfRHZ+c4+SfZf3rhz9zucdsZz+/Svpnk8Hu/3mJlypw33o6sZo/us5O0xzkcYgryymD7o0X7sGDaYv2MwP3Xcbr74X+/f7JVu9Ubkc/s3eyPyuf2bQelmr7TtzRpOO+33+eyvyJhWmT8W9O0MP9DF8OqrW8vbY2foaUM1Y8NlNH2QOuDQDK1fM8D89ON28ze/sa89ILUHpLaA1N4jtQfC7T3htoDU1hNuC0hb/lyX6wnah5ymD4J043bzq3YcuN4dlsuN7vCN7vD1bkl5umnHvlxP0D7AfEfhdvPXbju0duuhyq2H1m47VLlN/vcDeeParYfWbzuQ6wnaB5jvKNxuPgDuBOYD4EZgPgBuBOYD4EZgPgBuBOYD4EYcYj7i9ABICoeYjzi9ZIhdVesVqT/UnQJ2/Ku+uKTXKg4xP9U4vXyEuoo/pV9y7d13MN+lOMT8VOP0ckhKl77pAv983hTUS5uwMD+fcYj5qcbp5ZAUzNfc95oyMB8Qx5ifapweoRbPughKTpaeaJafx02b09+vSq3YNQE7rBtglX7MTONn+GknrDlU0N+jy3wfTAbS54cx3q5UogepF49wvozhEPNTjdOj96J0Eg0/S09/hGwt+o4Ta0cnZLBC+AwRd2whTTL8jBPW3YZvTNGg3weTt4self92pRI9qBkP4XwZwiHmpxinp3NJE5CjwRB2ZZ66x1jJm8XacUP4DMk/TCEtZfhp4vv05vPeB3ohYEz7SuLtshhAZrQWEV2ZwiHmpxinZ/KrnCBLjzI/Ydpcwlg7hgPMED6O+tzmEzc/XW+XRfONvcD8TOEQ81ON0zNZ7Ztn6dF2JUqbo9rp4uu4q33D54RxinJNZeHBam7Z/FRW+0m9XTxLWdNGOF9WcIj5qcbpaSLnNGe2EmTp+U3/3gUj+i42hhprF9+a+AyfdsLsk2L8M3yWzOe/DzroE3lJvF0mjw3TRjhfVnCI+emJ0zM7ee4m8D64AIeYn2qcnl/0sM5Vuw68D67DIeanHqdHLVNd/euO98FlOMR8AEBSwHwA3AjMB8CNwHwA3AjMB8CNwHwA3AjMB8CN5If53uKpuZ5CMkww5QqAzGMv809uLFQKIaRixiRjSfOQ6f17kHJvMB/Ynoyb39TUNDQ0ZKXmwefvoZ92fNtQMWPS6Mhfuk5t2zTnMflB2s2P38iSwgcA+yZ8GA/ygoybX1tbW1dX19vba17tZGWh1LVT6toZahG7zlXdOL7szvVTFTMmdZ3admF/ubd4qvwg3eZrbg2dsPm40wXkDdkwPxAI7Nq16+bNmybVPqucKoXO0GX5rEcrZkzaNOcxb/FUuWya81jFjEnMY35O4g0V3qS5v1R3Tzh1ryi/snYIYxPOx4h+ZpojAfUJ4y5XADJINswnhPT29oqi2Nrayqv22aqpUlc9XcZGriurfW/xVLPVPjf8KsH9Z9TN3LqcDEOqHGcIepPaGx28Y0zgY9wfzwzqAyCDZMl8QkhnZ+fq1av7+vqY1T5eNVW6Ua2Ug0vuNymG1rrMJmIpwU5TRZuNpYUK3OMPod/P68K46N15fDYJqgGQQbJkfjAYNN/nH1wyRWoR5XJwyf3SjZ3M0nWuimW+jOwO67idZT5XXLOjde4Q7CfsBD41ZIqOnOEEcAGQEbJhfk9PT8Lj/Jrn75FaqqSWqoNL7pcfGAtXe78o6ve2xuxKdTEvMk7m61Px9KlyCYbgfIywE/jk7wC8XuV7AF41ADKGXc7t737qH6Rzyw4uuV86V84spnt7aoVuONSOoS6m49pqd+yaVDzWytswBNVE15s2YDd2yEAl8BkE51UDIFPY5fv8LU9OOrjkfuncMmYx1z4F0vv9m6XkeADshI2u4dvt/SeTktahMi8+vtcH9sZG5juB2CEBdvjA7sB8ANwIzAfAjcB8ANwIzAfAjcB8ANwIzAfAjcB8ANxIHpgfajl6o/quUMvRXE/ExqTl0iRcgeQm8sD8G9V3hc4U3Ki+i1+FvoWOhk7myCjUhf45uZIH5oMksct1+yacK7/rRvVdprt9v+gRPB59Bp7mJpzMYrgpOMv2IwcMJIld7tUT/v1o4YpD95d/VPBaw99vbLpry5c/2H5R+PejRFntHy+4sZO32/eLHsEr6u6T8YsejyhmRwnmrYFZdB/mgySxSw7fD2esYBb5p+fK7wod/8cW0dR8n/b3X36iT9ayEInHCOHzeQWPKHp1uXvGCXC2GDukYgL1hwfWR9eGB2leedI9eES/9kUkTCIE+Y1dcvgIIfdtn8cr8oK/ReQt+OO/s2qmBrVFCbuxFInHCuGjl+/sg2ET85kdamMC1WlbH10XH0JnhybRA+fmYotJhCCPsUsOHyHkB+WPLzu6wlh+UP54qOXouaq7uo7+Y0sVc7evMSqWpqv8elO/3Ykj8bghfLQJFs2n8vv0HXISgayPrlve0683tR6IlTdByM5ZE5AF7JLDRwj5QfnjvEIIOVd+V9fRfzxXbm6+urDV7wItRuKxD5iTN5/z0cOpb1yhJBrdxPzUeiCcZQpr5vDfAdglh+/Ekn82L/KC/9wy5oLfeFBtSNC2GInHDOFL1nzNOprZoX4K1BrE4uh0TfpTLbUefKLmON9iEiHIY+xybv/Ysw+17lnMK8eefSjUcvTMsru66v/+zDLjbp8fg6s9ko+tXc0i8ZgnsiyZzzrZxuvQL3oEr5d1gs/66PQ5OFFbxWIPxmxC7h8I0Q4I7/Mfu3yf7yu959KGf5HLRe2Dixv+xVd6DyGEb37egd0myDF2uYavfubfyeXDmX9X/3i8zPy7+sdjWwghZ5bdJZdcT3biwHyQY+xivsuA+SDHwHwA3AjMB8CNwHwA3AjMB8CNwHwA3AjMB8CNwHwA3EgemI8cPurWWlwIANJDHphvIYePEMK+RF97Fb2VtDw7XJzOTPjJtvlX983YvnLG9n2nYs8vb9i+rY57i3USnGpYOWP7yhnbV85ouCxv6fhqW2zL9pUztq/ccJXX9PIGqpVK34mFVPMZ21fOqDvREZt/eubsQOxy3b4JFnL4CCHMmI3Y5viThNroboCzrlh6hTTpLavmaxxLj/mnGjTCy5J3fLWN4bOWjq+2zdi+bUNDwpqBujrlsyNtn1YOxC736k0sh48QwjWf+LxWzWfehmcJmG+NQF0doxMr5lut2XdiYQbWKQ7EGTl8hBCe+XR6VlL7fGNzbYSPekxARdiYJ/n5Ys3o+B1LqX7qBl6AH7WdSiLh1/F6Wa+Lxsz8QF2dZsXe8dW2GXUnOuQf9p1YGKupr0a0+3yFNJp/qmHlwq8CrDkDLc7I4SOE8I7z6d9o7XG+2WG+NhGT0peTSKeLBuEk4dGBWdq4QMLtTbeBF+Cn3c4MHTS21b0uLXzzO77aF9fp8obYYTn9023xjwNjtdhj3cG89jhf2WMzSGS+TnWYz8cZOXyEEPY+X7sTt7pUjn1CaAK7CCWIMZFOm++lxZB9xXvM6k2/gRPjxfs00nzI6eoYX5cG89U+dVJNdji+s6UPsxnVtNtjkjN9Vk4EUvvwBOYbfgrz+Tgjh48Qze+1PpxLu9y1OHHNvlLO6jPqKBhPuSdOwsu8+ezQQX23nNcVQ2e+evwcqKtbGV/bU55f3Tej7kRH34mF1I8Y1SiUlX+aVvvGUWA+H2fk8BGT43nqBxbO8GlODFL90Vl9jEQ63mcNMwlvouazAvwMJzUZoYOsbjUZhBq05lNH8pROfScWqjvzQF3dtg0N2+K7aGa1QF2duphXjslTNT9QV0etCOSPHk11mM/HLuf2J5LDZzg2Z+wYlQN05hf92qqM8wC6bHr2GTazs2tJm6+Zpm6/zQjwY71kubUaOsj44DNk7qso5uu/2KcOy+v2baB2sx1fbUtcjf7unfN9Pr28J8be1La0+dpPgRgwn49dvs+3eQ6fWQ51PmPyuvTH+fkIzOdjl2v4bJ3D59RLZk1fl2FXn2fgGj5z7GK+bdHG9zsHp74uYBGYD4AbgfkAuBGYD4AbgfkAuBGYD4AbgfkAuBGYD4AbgfkAuBEbmT8S7Phy+9wvNvzmiw2/+XL73JFgR+I2AICUsMt1+4SQExtmhXv94+Ge8XBPf/vXp7fNzejEAHAzdrlXb6T3+snKh283vXrnwtrBC2tCX626/dkr53eV/HXrv/5167+ee/upyFCCHgAA1rFLDt+pzY91ndsVurpv4PqBgesHBq7tD/n33fHv7b9e33+9vvfKu19uf9KkOSd/hsrAYmTjAeBe7JLD9+mfHpS6fSbl0z89yB2DG0Wlid6G8AAo2CiHL3D27baaksDZtwkh/iOLv3zziZP/+euT//nrk+KvT4q//u+q6V+8PvOL12d+8fr/MTQ1DcYjzr29HoBUsVEOX1tNCRm72FZTQgjp/uY/pc4Ppc7DUudhqesjqetjqesTqdvX1/LOsfWPcjrgBOMRmA+AHrvk8AWOb5Jayp8oEKSW8sDxzYQQqe0dqe1dqf09qb1Gaq+VOt4PXtj2lw3/u/f6N/rGCYLxiDYbzyfiQwC4Hruc22+rKVHMl3f7kn+b9N126bsd0ndvSFd39n61zlf5655rXzObG4LxOEm5SKMAgBBik+/z2z5aFjw+T2opv/BWsdRSHmyc1/7RMunKWunKOulKldS8PtD0x4/X/K/AVbb2AIBkscU1fG01JePXKoKfv/xEgRD8/OXxqxVtNSWHlhcdWl50cHnRJ2tmnK19dfhOZ66nCYBzsIX5pyrv+75jR6hF/GTbk6EWkbTvOFV5X64nBYCTsYX5t05Xn6q8jy63TlfnelIAOBlbmA8AyDIwHwA3AvMBcCMwHwA3AvMBcCMwHwA3AvMBcCM2Mh85fABkDRuZP4Ecvoz+mWun/g1t4GrsYv7EcvhgPgDJYRfzJ5LDp9yhS6Vy6O7INYnl84ginduhi+vz6TsHwBHYxfwJ5fBpdst+0RtXVM3jYMTy0R8K1MeB4jcv5AMAJ2AX84+8+oB0c79chq/XJJnDp5eTE8Ub/7EunEt5Su3gqd08zAcOxC7mH156v3SjWrpR3Xd+S9OOmUnm8FFy0rtwdbNl8xlLepgPHIhdzD/00s+l77YHv6ps3Pzr4LktUts7SeTw0XJS9vpFD3ufb7bapw8JmG0BcAJ2MX/vov/Re/rVT6v+uffLCsm/VfJvTSqHL7a894h+aqXv8XrZ+3xCHw9oz/Axzg7SnQPgEOxifs3z936y6uGepleky69Jl9dIlyuzl8OHTG7gPuxi/tcfbH73+Sn7Xn5g/x8eOrCs8ODyokzm8PlFD/78DnA1djE/21CremgPXIhbzQfA3cB8ANwIzAfAjcB8ANwIzAfAjcB8ANyIvcw/vOEXzJLreQHgNOxl/gdVD0RGx3Tl0uGFeSW/z4vL/IHtsZf5+9Y+aDT/uxMVeSU/zAd5gO3MD0fGdOW7ExWy/PvWmoRz2AeYD/IAe5n/zmvThsPR4XB0RFJLODI2IkWHw9F3XpuW6wlaAeaDPMB25vcPR499e+PYtzea2/v6h6PN7X3y0/5hE/OpmD3tDbbanB36Lh2P6Itduu/1qbV01/BTd/gr9+4nbAvzQR5gL/PfWPlw/3C0oGxHQdmOpW/+d/9wdOmb/y0/7R+OvrHyYU47bcyemq+hvQ9Pu12TwMXP4IjdwqveyZuwLcwHeYDtzO8dGC0o2zHt+bemPf9W78Co/KCgbEfvwKi5+ZRt8af6G++VavQPeI8VZL8T1qczvWA+sDu2M7+zT5J3+AVlO7Yc/KvyuDsUSYf5xsA9mA/ciL3M37jUI5u/5eBff/OnfQVlO37zp32y/5190salHk47+nicfmJY7TPStVmP/aJHW9Wwgd8W5oN8wHbmtwdi5svCKw/aAwnM93pZJ/hMzvBZMJ/65FA+T2A+cAL2Mv+1JY+0B6T6pmtnWnout/XXN1273NZ/pqWnvulae0B6bckjnHaIxwUgOWxn/vWu8PUuifpXLTAfgHRhL/NXLCo2L5x2MB+A5LCX+QCA7ADzAXAjkiT9f73opKsDJ12uAAAAAElFTkSuQmCC" alt="" />
这里可以看下自动生成的mapper配置文件,如下,可见mbg可以帮助我们大大提高开发效率,而且还可以尽量减少人为错误:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.edu.hdu.mbgdemo.dao.generator.DemoUserMapper" >
<resultMap id="BaseResultMap" type="cn.edu.hdu.mbgdemo.model.generator.DemoUser" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
</resultMap>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
delete from demo_user
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="cn.edu.hdu.mbgdemo.model.generator.DemoUser" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
insert into demo_user (id, name, address
)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}
)
</insert>
<update id="updateByPrimaryKey" parameterType="cn.edu.hdu.mbgdemo.model.generator.DemoUser" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
update demo_user
set name = #{name,jdbcType=VARCHAR},
address = #{address,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select id, name, address
from demo_user
where id = #{id,jdbcType=VARCHAR}
</select>
<select id="selectAll" resultMap="BaseResultMap" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select id, name, address
from demo_user
</select>
</mapper>
当然,我们也可以自己往dao添加一些方法,然后在mapper配置文件里添加对应的配置信息。