这是一篇记录。mybatis是一个部分模仿ORM的framework。是一个介于ORM和原始JDBC的框架。既可以提供ORM的操作对象的特性,又能从详细地控制最终的SQL。达到一个平衡。我们还是得写sql,同时mybatis负责类到数据库记录的映射。mybatis 3之前叫做ibatis, 2.x时代在apache上。后来移到了别的地方。现在似乎在http://mybatis.github.io/。 文档在:http://mybatis.github.io/mybatis-3/,源代码现在似乎移到了github:https://github.com/mybatis/。名字也改成了mybatis。有人开发了一个.net版的mybatis。这个给.net世界带来了一个很好的思维。只可惜目前多数人在关注ORM。

.net 版mybatis: http://code.google.com/p/mybatisnet/

mybatis 3有很多改进。在mybatis 3,为eclipse准备了集成工具。叫做:mybatis generator。这个工具可以帮我们省很多事情。

用下面这个URL来获得mybatis generator。

http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/

  在Eclipse Juno中,Help->Install new software, 在弹出的对话框,Work with对话框中输入以上URL, 点击Add,然后输入这个site的名字。比如输入mybatis generator。然后等对话框从服务器取到信息,就成了这样:

我得说一句,这个工具依赖于maven,所以m2e一定得先装好。到Eclipse marketplace里去先装上maven integration for eclipse Juno or newer。

装好了m2e才能顺利装好mybatis generator。

好了,勾上那些框,next, next, 同意,同意就行了。这样就把mybatis generator装好了。

在项目里用:

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>mymaven</groupId>
<artifactId>mymaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.5.4-Final</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.4-Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.5.4-Final</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

除此之外还需要一个generatorConfig.xml用来配置mybatis generator:

<?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 >
<!-- 设置mysql驱动路径 -->
<classPathEntry location="C:\Program Files (x86)\MySQL\Connector J 5.1.29\mysql-connector-java-5.1.29-bin.jar" />
<!-- 此处指定生成针对MyBatis3的DAO -->
<context id="context1" targetRuntime="MyBatis3">
<!-- jdbc连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/dbname"
userId="root" password="xxxxxxxxxxxxxxx" />
<!-- 生成vo对象 -->
<javaModelGenerator targetPackage="org.nf.vo" targetProject="src\main\java" />
<!-- 生成用于查询的Example对象 -->
<sqlMapGenerator targetPackage="org.nf.vo" targetProject="src\main\java" />
<!-- 生成DAO的类文件以及配置文件 -->
<javaClientGenerator targetPackage="org.nf.dao" targetProject="src\main\java" type="XMLMAPPER" />
<!-- 想要生成的数据库表,自动化工具会根据该表的结构生成相应的vo对象 -->
<table schema="" tableName="Category" >
</table>
<table schema="" tableName="Comment" >
</table>
<table schema="" tableName="Group" >
</table>
<table schema="" tableName="Message" >
</table>
<table schema="" tableName="Post" >
</table>
<table schema="" tableName="Sensitivekeyword" >
</table>
<table schema="" tableName="User" >
</table>
</context>
</generatorConfiguration>

这个generatorConfig.xml可以放到src\main\resources目录中。这样,这个资源文件会被mybatis generator找到并解析。这个配置一看就明白。有那么几个表,需要用mybatis generator产生代码。

然后就用maven来产生代码。右键点你的项目,选择Run as->Run configurations,出来对话框如图:

如果没有这个Maven build 配置的化,就新建一个。取个名叫run mybatis generator的配置。然后里面Goals写上: mybatis-generator:generate,如图:

输入对了以后就点Run了。后面就是一些maven的log了,可以看到产生了很多代码。

[INFO] Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.pom (5 KB at 5.0 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom (20 KB at 24.7 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.pom (8 KB at 20.6 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.jar (104 KB at 60.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.pom (8 KB at 20.7 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.0/maven-release-2.0.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.0/maven-release-2.0.pom (7 KB at 12.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.jar (38 KB at 48.3 KB/sec)
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mymaven 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- mybatis-generator-maven-plugin:1.3.1:generate (default-cli) @ mymaven ---
[INFO] Connecting to the Database
[INFO] Introspecting table Category
[INFO] Introspecting table Comment
[INFO] Introspecting table Group
[INFO] Introspecting table Message
[INFO] Introspecting table Post
[INFO] Introspecting table Sensitivekeyword
[INFO] Introspecting table User
[INFO] Generating Example class for table category
[INFO] Generating Record class for table category
[INFO] Generating Mapper Interface for table category
[INFO] Generating SQL Map for table category
[INFO] Generating Example class for table comment
[INFO] Generating Record class for table comment
[INFO] Generating Mapper Interface for table comment
[INFO] Generating SQL Map for table comment
[INFO] Generating Example class for table group
[INFO] Generating Record class for table group
[INFO] Generating Mapper Interface for table group
[INFO] Generating SQL Map for table group
[INFO] Generating Example class for table message
[INFO] Generating Record class for table message
[INFO] Generating Mapper Interface for table message
[INFO] Generating SQL Map for table message
[INFO] Generating Example class for table post
[INFO] Generating Record class for table post
[INFO] Generating Mapper Interface for table post
[INFO] Generating SQL Map for table post
[INFO] Generating Example class for table sensitivekeyword
[INFO] Generating Record class for table sensitivekeyword
[INFO] Generating Mapper Interface for table sensitivekeyword
[INFO] Generating SQL Map for table sensitivekeyword
[INFO] Generating Example class for table user
[INFO] Generating Record class for table user
[INFO] Generating Mapper Interface for table user
[INFO] Generating SQL Map for table user
[INFO] Saving file CategoryMapper.xml
[INFO] Saving file CommentMapper.xml
[INFO] Saving file GroupMapper.xml
[INFO] Saving file MessageMapper.xml
[INFO] Saving file PostMapper.xml
[INFO] Saving file SensitivekeywordMapper.xml
[INFO] Saving file UserMapper.xml
[INFO] Saving file CategoryExample.java
[INFO] Saving file Category.java
[INFO] Saving file CategoryMapper.java
[INFO] Saving file CommentExample.java
[INFO] Saving file Comment.java
[INFO] Saving file CommentMapper.java
[INFO] Saving file GroupExample.java
[INFO] Saving file Group.java
[INFO] Saving file GroupMapper.java
[INFO] Saving file MessageExample.java
[INFO] Saving file Message.java
[INFO] Saving file MessageMapper.java
[INFO] Saving file PostExample.java
[INFO] Saving file Post.java
[INFO] Saving file PostMapper.java
[INFO] Saving file SensitivekeywordExample.java
[INFO] Saving file Sensitivekeyword.java
[INFO] Saving file SensitivekeywordMapper.java
[INFO] Saving file UserExample.java
[INFO] Saving file User.java
[INFO] Saving file UserMapper.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.614s
[INFO] Finished at: Sun Jul 13 22:47:25 CST 2014
[INFO] Final Memory: 9M/123M
[INFO] ------------------------------------------------------------------------

按照之前generatorConfig.xml的配置,dao类都会在org.nf.dao目录中。virtual object就都在org.nf.vo目录中。
查看一下generator为我们产生的代码。发现它产生的代码还挺全面的。

例如我们的model类

package org.nf.vo;

public class Category {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column category.CategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
private Integer categoryid; /**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column category.CategoryName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
private String categoryname; /**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column category.ParentCategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
private Integer parentcategoryid; /**
* This field was generated by MyBatis Generator.
* This field corresponds to the database column category.ShortName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
private String shortname; /**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column category.CategoryId
*
* @return the value of category.CategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public Integer getCategoryid() {
return categoryid;
} /**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column category.CategoryId
*
* @param categoryid the value for category.CategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setCategoryid(Integer categoryid) {
this.categoryid = categoryid;
} /**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column category.CategoryName
*
* @return the value of category.CategoryName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public String getCategoryname() {
return categoryname;
} /**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column category.CategoryName
*
* @param categoryname the value for category.CategoryName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setCategoryname(String categoryname) {
this.categoryname = categoryname;
} /**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column category.ParentCategoryId
*
* @return the value of category.ParentCategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public Integer getParentcategoryid() {
return parentcategoryid;
} /**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column category.ParentCategoryId
*
* @param parentcategoryid the value for category.ParentCategoryId
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setParentcategoryid(Integer parentcategoryid) {
this.parentcategoryid = parentcategoryid;
} /**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column category.ShortName
*
* @return the value of category.ShortName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public String getShortname() {
return shortname;
} /**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column category.ShortName
*
* @param shortname the value for category.ShortName
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setShortname(String shortname) {
this.shortname = shortname;
}
}

这个类映射数据库里的Category表。

这没有多少。无非就是一些fields加get和set方法。还是CategoryExample类的内容多一些。

package org.nf.vo;

import java.util.ArrayList;
import java.util.List; public class CategoryExample {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
protected String orderByClause; /**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
protected boolean distinct; /**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
protected List<Criteria> oredCriteria; /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public CategoryExample() {
oredCriteria = new ArrayList<Criteria>();
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public String getOrderByClause() {
return orderByClause;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void setDistinct(boolean distinct) {
this.distinct = distinct;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public boolean isDistinct() {
return distinct;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public List<Criteria> getOredCriteria() {
return oredCriteria;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void or(Criteria criteria) {
oredCriteria.add(criteria);
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
} /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
} /**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria; protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
} public boolean isValid() {
return criteria.size() > 0;
} public List<Criterion> getAllCriteria() {
return criteria;
} public List<Criterion> getCriteria() {
return criteria;
} protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
} protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
} protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
} public Criteria andCategoryidIsNull() {
addCriterion("CategoryId is null");
return (Criteria) this;
} public Criteria andCategoryidIsNotNull() {
addCriterion("CategoryId is not null");
return (Criteria) this;
} public Criteria andCategoryidEqualTo(Integer value) {
addCriterion("CategoryId =", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidNotEqualTo(Integer value) {
addCriterion("CategoryId <>", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidGreaterThan(Integer value) {
addCriterion("CategoryId >", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidGreaterThanOrEqualTo(Integer value) {
addCriterion("CategoryId >=", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidLessThan(Integer value) {
addCriterion("CategoryId <", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidLessThanOrEqualTo(Integer value) {
addCriterion("CategoryId <=", value, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidIn(List<Integer> values) {
addCriterion("CategoryId in", values, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidNotIn(List<Integer> values) {
addCriterion("CategoryId not in", values, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidBetween(Integer value1, Integer value2) {
addCriterion("CategoryId between", value1, value2, "categoryid");
return (Criteria) this;
} public Criteria andCategoryidNotBetween(Integer value1, Integer value2) {
addCriterion("CategoryId not between", value1, value2, "categoryid");
return (Criteria) this;
} public Criteria andCategorynameIsNull() {
addCriterion("CategoryName is null");
return (Criteria) this;
} public Criteria andCategorynameIsNotNull() {
addCriterion("CategoryName is not null");
return (Criteria) this;
} public Criteria andCategorynameEqualTo(String value) {
addCriterion("CategoryName =", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameNotEqualTo(String value) {
addCriterion("CategoryName <>", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameGreaterThan(String value) {
addCriterion("CategoryName >", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameGreaterThanOrEqualTo(String value) {
addCriterion("CategoryName >=", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameLessThan(String value) {
addCriterion("CategoryName <", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameLessThanOrEqualTo(String value) {
addCriterion("CategoryName <=", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameLike(String value) {
addCriterion("CategoryName like", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameNotLike(String value) {
addCriterion("CategoryName not like", value, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameIn(List<String> values) {
addCriterion("CategoryName in", values, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameNotIn(List<String> values) {
addCriterion("CategoryName not in", values, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameBetween(String value1, String value2) {
addCriterion("CategoryName between", value1, value2, "categoryname");
return (Criteria) this;
} public Criteria andCategorynameNotBetween(String value1, String value2) {
addCriterion("CategoryName not between", value1, value2, "categoryname");
return (Criteria) this;
} public Criteria andParentcategoryidIsNull() {
addCriterion("ParentCategoryId is null");
return (Criteria) this;
} public Criteria andParentcategoryidIsNotNull() {
addCriterion("ParentCategoryId is not null");
return (Criteria) this;
} public Criteria andParentcategoryidEqualTo(Integer value) {
addCriterion("ParentCategoryId =", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidNotEqualTo(Integer value) {
addCriterion("ParentCategoryId <>", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidGreaterThan(Integer value) {
addCriterion("ParentCategoryId >", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidGreaterThanOrEqualTo(Integer value) {
addCriterion("ParentCategoryId >=", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidLessThan(Integer value) {
addCriterion("ParentCategoryId <", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidLessThanOrEqualTo(Integer value) {
addCriterion("ParentCategoryId <=", value, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidIn(List<Integer> values) {
addCriterion("ParentCategoryId in", values, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidNotIn(List<Integer> values) {
addCriterion("ParentCategoryId not in", values, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidBetween(Integer value1, Integer value2) {
addCriterion("ParentCategoryId between", value1, value2, "parentcategoryid");
return (Criteria) this;
} public Criteria andParentcategoryidNotBetween(Integer value1, Integer value2) {
addCriterion("ParentCategoryId not between", value1, value2, "parentcategoryid");
return (Criteria) this;
} public Criteria andShortnameIsNull() {
addCriterion("ShortName is null");
return (Criteria) this;
} public Criteria andShortnameIsNotNull() {
addCriterion("ShortName is not null");
return (Criteria) this;
} public Criteria andShortnameEqualTo(String value) {
addCriterion("ShortName =", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameNotEqualTo(String value) {
addCriterion("ShortName <>", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameGreaterThan(String value) {
addCriterion("ShortName >", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameGreaterThanOrEqualTo(String value) {
addCriterion("ShortName >=", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameLessThan(String value) {
addCriterion("ShortName <", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameLessThanOrEqualTo(String value) {
addCriterion("ShortName <=", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameLike(String value) {
addCriterion("ShortName like", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameNotLike(String value) {
addCriterion("ShortName not like", value, "shortname");
return (Criteria) this;
} public Criteria andShortnameIn(List<String> values) {
addCriterion("ShortName in", values, "shortname");
return (Criteria) this;
} public Criteria andShortnameNotIn(List<String> values) {
addCriterion("ShortName not in", values, "shortname");
return (Criteria) this;
} public Criteria andShortnameBetween(String value1, String value2) {
addCriterion("ShortName between", value1, value2, "shortname");
return (Criteria) this;
} public Criteria andShortnameNotBetween(String value1, String value2) {
addCriterion("ShortName not between", value1, value2, "shortname");
return (Criteria) this;
}
} /**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table category
*
* @mbggenerated do_not_delete_during_merge Sun Jul 13 22:47:25 CST 2014
*/
public static class Criteria extends GeneratedCriteria { protected Criteria() {
super();
}
} /**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
public static class Criterion {
private String condition; private Object value; private Object secondValue; private boolean noValue; private boolean singleValue; private boolean betweenValue; private boolean listValue; private String typeHandler; public String getCondition() {
return condition;
} public Object getValue() {
return value;
} public Object getSecondValue() {
return secondValue;
} public boolean isNoValue() {
return noValue;
} public boolean isSingleValue() {
return singleValue;
} public boolean isBetweenValue() {
return betweenValue;
} public boolean isListValue() {
return listValue;
} public String getTypeHandler() {
return typeHandler;
} protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
} protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
} protected Criterion(String condition, Object value) {
this(condition, value, null);
} protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
} protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

这个CategoryExample给我们一个很好的写条件表达式的例子。对于integer类型的字段,有诸如greaterthan, lessthan之类的方法。而串类型的字段,就有like 这样的方法。然后不同的条件之间可以用and和or关系。这个给我们查询某些特殊条件的数据是带来的方便。

之后两个可以说是关键部分,一个是Mapper接口和Mapper的xml定义。一个定义了这个model类有什么方法可以调用,另一个定义了这些方法的实现方式。

这是Mapper接口:

package org.nf.dao;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.nf.vo.Category;
import org.nf.vo.CategoryExample; public interface CategoryMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int countByExample(CategoryExample example); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int deleteByExample(CategoryExample example); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int deleteByPrimaryKey(Integer categoryid); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int insert(Category record); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int insertSelective(Category record); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
List<Category> selectByExample(CategoryExample example); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
Category selectByPrimaryKey(Integer categoryid); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int updateByExampleSelective(@Param("record") Category record, @Param("example") CategoryExample example); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int updateByExample(@Param("record") Category record, @Param("example") CategoryExample example); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int updateByPrimaryKeySelective(Category record); /**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table category
*
* @mbggenerated Sun Jul 13 22:47:25 CST 2014
*/
int updateByPrimaryKey(Category record);
}

这是CategoryMapper.xml:

<?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="org.nf.dao.CategoryMapper" >
<resultMap id="BaseResultMap" type="org.nf.vo.Category" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
<id column="CategoryId" property="categoryid" jdbcType="INTEGER" />
<result column="CategoryName" property="categoryname" jdbcType="VARCHAR" />
<result column="ParentCategoryId" property="parentcategoryid" jdbcType="INTEGER" />
<result column="ShortName" property="shortname" jdbcType="VARCHAR" />
</resultMap>
<sql id="Example_Where_Clause" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
<where >
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
CategoryId, CategoryName, ParentCategoryId, ShortName
</sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="org.nf.vo.CategoryExample" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
select
<if test="distinct" >
distinct
</if>
<include refid="Base_Column_List" />
from category
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
select
<include refid="Base_Column_List" />
from category
where CategoryId = #{categoryid,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
delete from category
where CategoryId = #{categoryid,jdbcType=INTEGER}
</delete>
<delete id="deleteByExample" parameterType="org.nf.vo.CategoryExample" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
delete from category
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="org.nf.vo.Category" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
insert into category (CategoryId, CategoryName, ParentCategoryId,
ShortName)
values (#{categoryid,jdbcType=INTEGER}, #{categoryname,jdbcType=VARCHAR}, #{parentcategoryid,jdbcType=INTEGER},
#{shortname,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="org.nf.vo.Category" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
insert into category
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="categoryid != null" >
CategoryId,
</if>
<if test="categoryname != null" >
CategoryName,
</if>
<if test="parentcategoryid != null" >
ParentCategoryId,
</if>
<if test="shortname != null" >
ShortName,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="categoryid != null" >
#{categoryid,jdbcType=INTEGER},
</if>
<if test="categoryname != null" >
#{categoryname,jdbcType=VARCHAR},
</if>
<if test="parentcategoryid != null" >
#{parentcategoryid,jdbcType=INTEGER},
</if>
<if test="shortname != null" >
#{shortname,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="org.nf.vo.CategoryExample" resultType="java.lang.Integer" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
select count(*) from category
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
update category
<set >
<if test="record.categoryid != null" >
CategoryId = #{record.categoryid,jdbcType=INTEGER},
</if>
<if test="record.categoryname != null" >
CategoryName = #{record.categoryname,jdbcType=VARCHAR},
</if>
<if test="record.parentcategoryid != null" >
ParentCategoryId = #{record.parentcategoryid,jdbcType=INTEGER},
</if>
<if test="record.shortname != null" >
ShortName = #{record.shortname,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
update category
set CategoryId = #{record.categoryid,jdbcType=INTEGER},
CategoryName = #{record.categoryname,jdbcType=VARCHAR},
ParentCategoryId = #{record.parentcategoryid,jdbcType=INTEGER},
ShortName = #{record.shortname,jdbcType=VARCHAR}
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="org.nf.vo.Category" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
update category
<set >
<if test="categoryname != null" >
CategoryName = #{categoryname,jdbcType=VARCHAR},
</if>
<if test="parentcategoryid != null" >
ParentCategoryId = #{parentcategoryid,jdbcType=INTEGER},
</if>
<if test="shortname != null" >
ShortName = #{shortname,jdbcType=VARCHAR},
</if>
</set>
where CategoryId = #{categoryid,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="org.nf.vo.Category" >
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Jul 13 22:47:25 CST 2014.
-->
update category
set CategoryName = #{categoryname,jdbcType=VARCHAR},
ParentCategoryId = #{parentcategoryid,jdbcType=INTEGER},
ShortName = #{shortname,jdbcType=VARCHAR}
where CategoryId = #{categoryid,jdbcType=INTEGER}
</update>
</mapper>

这个CategoryMapper定义了一些CRUD方法的实现方式。比如updateByPrimaryKeySelective就能根据输入的参数来决定更新哪些字段。同时我们还可以在其参数CategoryExample中传入若干个条件。比如id大于一个数值,name中包含某某字符等等条件。那么更新哪些记录就可以自己定义条件了。这是一个很大的进步。很方便。

把Mapper xml放到src/main/resources目录下,这样这些xml就会打包到发布的jar包里。

试着调用这些产生的代码:

package org.nf;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.hibernate.*;
import org.hibernate.cfg.*;
import org.nf.model.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class myfirst {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader; /**
* @param args
*/
public static void main(String[] args) { //mybatis
try{
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
SqlSession sessionmybatis = sqlSessionFactory.openSession();
try {
org.nf.vo.Category categorymybatis = (org.nf.vo.Category) sessionmybatis.selectOne("org.nf.dao.CategoryMapper.selectByPrimaryKey", 5);
System.out.println(categorymybatis.getCategoryname());
} finally {
sessionmybatis.close();
}
logger.info("End");
} }

备忘:mybatis 3的使用记录的更多相关文章

  1. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  2. 解决“用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示”的问题记录(备忘)

    解决"用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示"的问题记录(备忘) 历时几个小时百度,终于靠自己理解解决了GitHub仓库图 ...

  3. java开发微信公众平台备忘

    简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrl+shift+o 自动添加必要import空间及移除无用import 项目备忘+说明 1. ...

  4. Nmap备忘单:从探索到漏洞利用(Part 4)

    这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...

  5. [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象

    <script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...

  6. JavaScript 教程学习进度备忘(二)

    备忘:之前,只将“JS 教程”学习完毕,这篇记录:“JS HTML DOM ”.“JS 对象”.“JS Window”.“JS 库” 书签:跳过:另外跳过的内容有待跟进 _______________ ...

  7. Zookeeper + Hadoop + Hbase部署备忘

    网上类似的文章很多,本文只是记录下来备忘.本文分四大步骤: 准备工作.安装zookeeper.安装hadoop.安装hbase,下面分别详细介绍: 一 准备工作 1. 下载 zookeeper.had ...

  8. git使用备忘

    简单的记录下现在使用git的时候,暂时或者常用到的命令,纯粹自己备忘,没用到过的命令就不写了,日后有用到了在补充. 1.把远程仓库克隆到本地:git clone 远程地址 2.分支操作 新建分支:gi ...

  9. Unity3D Object.DontDestroyOnLoad 备忘

    初学Untiy3D,记录备忘. public static void DontDestroyOnLoad(Object target); Makes the object target not be ...

  10. 实用Shell命令备忘

    开场白:这里简单记录一些常用的bash命令,一则备忘,二来希望可以帮助别人解决一些问题. 1.检测文件是否存在 if [ -f ./foo.txt ] then echo the file exist ...

随机推荐

  1. js => ES6一个新的函数写法

    今天在网上参观到一个写法,返回字符串个个字母的个数 var arr='aaabbccaa'; var info = arr.split('').reduce((p, k) => (p[k]++ ...

  2. iOS 事件传递响应链

    iOS中加载的时候会先执行main函数 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain( ...

  3. 路径分析之NetworkX实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- import networkx as nx import numpy as np import json i ...

  4. 元首的愤怒 SharePoint Apps

    柏林数据中心的服务器机架已经插满.CPU 100%.电力基础设施处在崩溃的边缘,但当元首决定迁移到 Office 365 的时候,将军们却告诉他那里没有 Farm Solution,5 年多的投资将付 ...

  5. IOS 绘制圆饼图 简单实现的代码有注释

    今天为大家带来IOS 绘图中圆饼的实现 .h文件 #import <UIKit/UIKit.h> @interface ZXCircle : UIView @end .m文件 #impor ...

  6. 如何在 ASP.NET 4.6 与 IIS10 中运用 HTTP/2 ?

    在过去十年中,Web 技术已经取得了种种进展.从基本的 HTML 开始,网页发展出更丰富的外观和感觉,变得更加直观,对用户更加友好并且越来越大放异彩.这些变化的关键贡献来自于一些新的和翻新技术,且借力 ...

  7. SQL Server Column Store Indeses

    SQL Server Column Store Indeses SQL Server Column Store Indeses 1. 概述 2. 索引存储 2.1 列式索引存储 2.2 数据编码和压缩 ...

  8. truncate 、delete与drop区别

    原博文地址:http://www.cnblogs.com/8765h/archive/2011/11/25/2374167.html 相同点: 1.truncate和不带where子句的delete. ...

  9. 《CLR via C#》---枚举标志和标志位

    枚举类型 枚举类型定义了一组符号名称/值配对. 如 private enum Color /* : byte */ { White, // Assigned a value of 0 Red, // ...

  10. Elasticsearch配置文件说明

    一.Cluster  setting Cluster indices.ttl.interval  允许设置多久过期的文件会被自动删除.默认值是60秒. indices.cache.filter.siz ...