• 备忘: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)MySQLConnector J 5.1.29mysql-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="srcmainjava" />
        <!-- 生成用于查询的Example对象 -->
        <sqlMapGenerator targetPackage="org.nf.vo" targetProject="srcmainjava" />
        <!-- 生成DAO的类文件以及配置文件 -->
        <javaClientGenerator targetPackage="org.nf.dao" targetProject="srcmainjava" 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可以放到srcmain esources目录中。这样,这个资源文件会被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");
        }
    
    }
  • 相关阅读:
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    预习非数值数据的编码方式
    计算机组成与系统结构作业01
    C语言||作业01
  • 原文地址:https://www.cnblogs.com/mikelij/p/3841716.html
Copyright © 2020-2023  润新知