备忘:mybatis 3的使用记录
这是一篇记录。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的使用记录的更多相关文章
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- 解决“用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示”的问题记录(备忘)
解决"用PicGo-2.3.0-beta5 + GitHub做博客图床,github仓库图片文件不显示"的问题记录(备忘) 历时几个小时百度,终于靠自己理解解决了GitHub仓库图 ...
- java开发微信公众平台备忘
简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrl+shift+o 自动添加必要import空间及移除无用import 项目备忘+说明 1. ...
- Nmap备忘单:从探索到漏洞利用(Part 4)
这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...
- [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象
<script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...
- JavaScript 教程学习进度备忘(二)
备忘:之前,只将“JS 教程”学习完毕,这篇记录:“JS HTML DOM ”.“JS 对象”.“JS Window”.“JS 库” 书签:跳过:另外跳过的内容有待跟进 _______________ ...
- Zookeeper + Hadoop + Hbase部署备忘
网上类似的文章很多,本文只是记录下来备忘.本文分四大步骤: 准备工作.安装zookeeper.安装hadoop.安装hbase,下面分别详细介绍: 一 准备工作 1. 下载 zookeeper.had ...
- git使用备忘
简单的记录下现在使用git的时候,暂时或者常用到的命令,纯粹自己备忘,没用到过的命令就不写了,日后有用到了在补充. 1.把远程仓库克隆到本地:git clone 远程地址 2.分支操作 新建分支:gi ...
- Unity3D Object.DontDestroyOnLoad 备忘
初学Untiy3D,记录备忘. public static void DontDestroyOnLoad(Object target); Makes the object target not be ...
- 实用Shell命令备忘
开场白:这里简单记录一些常用的bash命令,一则备忘,二来希望可以帮助别人解决一些问题. 1.检测文件是否存在 if [ -f ./foo.txt ] then echo the file exist ...
随机推荐
- iOS 多线程GCD简介
一.简介 1.1 GCD (Grand Central Dispatch )是Apple开发的一个多核编程的解决方法. Grand 含义是“伟大的.宏大的”,Central含义“中央的”,Dispat ...
- CRM基于.NET的增删改查
一.准备工作: 1.添加 microsoft.crm.sdk.proxy.dll和microsoft.xrm.sdk.dll 引用到项目中!并引用以下using! using Microsoft.Xr ...
- UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置
一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果 ...
- html5快速入门(一)—— html简介
前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...
- 深入理解RunLoop
网上看的一篇文章,写的真好,我得多看几次好好理解理解 膜拜大神,转载至此便于学习查看. 此处标明原文链接:http://blog.ibireme.com/2015/05/18/runloop/ ...
- 初识java之变量、数据类型和运算符(一)
博友目标: 1.掌握变量的概念 2.引子----会使用常用数据类型 众所周知,每台电脑都有一个内存这么个必不可少的元素,那么到底内存到底是用来干什么的呢?其实啊,计算机内存相当于人类的大脑,计算机在处 ...
- MongoDB-常见问题
前言 MongoDB数据库的版本为3.0.7.记录在使用MongoDB数据库时遇到的各种问题,目前是遇到一个整理一个,没有进行分类,等整理较多的时候,进行分类整理一下. 1.使用可视化工 ...
- django ORM
http://www.cnblogs.com/alex3714/articles/5512568.html 常用ORM操作 一.示例Models from django.db import model ...
- .NET笔记(二)
null合并运算符 ?? 运算符称作null 合并运算符.如果此运算符的左操作数不为null,则此运算符将返回左操作数:否则返回右操作数. 使用Average而产生的一个错误 因为数据中有DBNull ...
- HTML入门篇
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...