Mybatis-Generator開發教程

轉載:http://www.javashuo.com/article/p-crxonmyx-b.htmljava

MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎全部的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄,MyBatis的一個主要的特色就是須要程序員本身編寫sql,那麼若是表太多的話,不免會很麻煩,因此mybatis官方提供了一個逆向工程,能夠針對單表自動生成mybatis執行所須要的代碼(包括mapper.xml、mapper.java、po)。在開發中,經常使用的逆向工程方式是經過數據庫的表生成代碼,以提升開發效率。mysql

使用逆向工程git

使用MyBatis的逆向工程,須要導入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面開始總結一下MyBatis逆向工程的使用步驟。程序員

新建一個工程(重要)github

咱們要新建一個java工程,這個工程專門用來使用逆向工程生成代碼的。有些人可能會問,爲何要新建一個工程呢?直接在原來工程中你想生成不就能夠了麼?確實是這樣,能夠在原來的工程中生成,可是有風險,由於MyBatis是根據配置文件來生成的(下面會說到),若是生成的路徑中有相同的文件,那麼就會覆蓋原來的文件,這樣會有風險。因此開發中通常都會新建一個java工程來生成,而後將生成的文件拷貝到本身的工程中,這也不麻煩,並且很安全。以下: 
 
從上圖中看,①就是要執行的java代碼,執行它便可生成咱們須要的dao接口;②是生成的vo③生成的mybatis的映射文件;④mybatis生成器的配置文件。 
如下是mavan工程的配置文件spring

   <dependencies>sql

      <dependency>數據庫

         <groupId>org.mybatis</groupId>apache

         <artifactId>mybatis</artifactId>安全

         <version>3.4.5</version>

      </dependency>

      <dependency>

         <groupId>mysql</groupId>

         <artifactId>mysql-connector-java</artifactId>

         <version>5.1.42</version>

      </dependency>

 

      <dependency>

         <groupId>org.mybatis.generator</groupId>

         <artifactId>mybatis-generator-core</artifactId>

         <version>1.3.6</version>

      </dependency>

      <dependency>

         <groupId>log4j</groupId>

         <artifactId>log4j</artifactId>

         <version>1.2.14</version>

      </dependency>

   </dependencies>

  

   <build>

      <finalName>${project.artifactId}</finalName>

      <plugins>

         <!-- java編譯插件 -->

         <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-compiler-plugin</artifactId>

            <version>3.2</version>

            <configuration>

                <source>1.7</source>

                <target>1.7</target>

                <encoding>UTF-8</encoding>

            </configuration>

         </plugin>

      </plugins>

   </build>

 

配置逆向工程的配置文件

MyBatis逆向工程生成代碼須要一個配置文件,名字隨便起。而後MyBatis會根據這個配置文件中的配置,生成相應的代碼。mybatis-generator-core-1.3.6.jar這個jar包裏面有幫助文檔,打開后里面有配置文件的模板,這裏就再也不贅述了,下面先把配置文件寫好:

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration

  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration1.0//EN"

  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

 

<generatorConfiguration>

    <context id="testTables"targetRuntime="MyBatis3">

        <commentGenerator>

            <!-- 是否去除自動生成的註釋 true:是: false:否 -->

            <property name="suppressAllComments"value="true" />

        </commentGenerator>

       

        <!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 -->

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"

            connectionURL="jdbc:mysql://localhost:3306/books"userId="root"

            password="tiger">

        </jdbcConnection>

 

        <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析爲 Integer,爲 true時把JDBC DECIMAL 和

            NUMERIC 類型解析爲java.math.BigDecimal -->

        <javaTypeResolver>

            <property name="forceBigDecimals"value="false" />

        </javaTypeResolver>

 

        <!-- targetProject:生成PO類的位置 -->

        <javaModelGenerator targetPackage="com.oracle.mybatis.vo"

            targetProject=".\src\main\java">

            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->

            <property name="enableSubPackages"value="false" />

            <!-- 從數據庫返回的值被清理先後的空格 -->

            <property name="trimStrings"value="true" />

        </javaModelGenerator>

       

       

        <!-- targetProject:mapper映射文件生成的位置 -->

        <sqlMapGenerator targetPackage="com.oracle.mybatis.mapper"

            targetProject=".\src\main\resources">

            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->

            <property name="enableSubPackages"value="false" />

        </sqlMapGenerator>

        <!-- targetPackage:mapper接口生成的位置 -->

        <javaClientGenerator type="XMLMAPPER"

            targetPackage="com.oracle.dao"

            targetProject=".\src\main\java">

            <!-- enableSubPackages:是否讓schema做爲包的後綴 -->

            <property name="enableSubPackages"value="false" />

        </javaClientGenerator>

        <!-- 指定數據庫表 -->

        <table schema=""tableName="book"></table>

        <table schema=""tableName="account"></table>

       

        <!-- 有些表的字段須要指定java類型

         <table schema=""tableName="">

            <columnOverridecolumn="" javaType="" />

        </table> -->

    </context>

</generatorConfiguration>

 

 

從上面的配置文件中能夠看出,配置文件主要作的幾件事是:

1.   鏈接數據庫,這是必須的,要否則怎麼根據數據庫的表生成代碼呢?

2.   指定要生成代碼的位置,要生成的代碼包括po類,mapper.xml和mapper.java

3.   指定數據庫中想要生成哪些表

執行逆向工程生成代碼

配置文件搞好了,而後就執行如下程序便可生成代碼了,生成的java程序,下載的逆向工程文檔中都有示例,以下:

publicclass Generator {

 

    publicvoid generator() throws Exception{

 

        List<String> warnings = new ArrayList<String>();

        booleanoverwrite = true;

        //指定逆向工程配置文件

        File configFile = new File("src/main/resources/Configuration.xml");

        System.out.println(configFile.getAbsolutePath());

        ConfigurationParser cp = new ConfigurationParser(warnings);

        Configuration config = cp.parseConfiguration(configFile);

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);

        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,

                callback, warnings);

        myBatisGenerator.generate(null);

 

    }

    /**主函數*/

    publicstaticvoid main(String[] args) throws Exception {

        try {

            GeneratorgeneratorSqlmap = new Generator();

            generatorSqlmap.generator();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

 

運行一下便可,運行完了後刷新一下工程,就能夠看到最新生成的代碼了。 
 
這裏能夠看出有個細節,每一個vo類多了一個東西,就是xxxExample.java,這個類是給用戶自定義sql使用的,後面我會提到。到這裏就生成好了,下面咱們就把生成的代碼拷貝到本身的工程使用了。

逆向工程測試

在這裏我把生成的代碼拷貝到上文的工程案例中,: 
 
接着在Spring核心配置文件——application-context.xml添加以下配置:

<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">

      <property name="dataSource"ref="dataSource"></property>

      <!-- 映射文件所在的位置 -->

      <property name="mapperLocations"value="classpath*:com/oracle/mapper/*.xml"></property>

      <property name="typeAliasesPackage"value="com.oracle.vo"></property>

      <property name="configurationProperties">

         <props>

            <prop key="logImpl">LOG4J</prop>

         </props>

      </property>

      <!-- 配置分頁插件 -->

      <property name="plugins">

         <array>

            <bean class="com.github.pagehelper.PageHelper">

                <property name="properties">

                   <value>

                      dialect=mysql

                      reasonable=true

                   </value>

                </property>

            </bean>

         </array>

      </property>

   </bean>

   <!-- dao接口的位置 -->

   <mybatis-spring:scan base-package="com.oracle.dao"/>

 

最後編寫UserMapper接口的單元測試類——UserMapperTest.java,內容以下:

publicclassUserMapperTest {

    privateApplicationContext applicationContext;

    @Before

    publicvoidinit() {

       // 初始化Spring容器

       applicationContext = newClassPathXmlApplicationContext("capplication-context.xml");

   }

    @Test

    publicvoidtestDeleteByPrimaryKey() {

       // 請讀者自行測試...

   }

    @Test

    publicvoidtestInsert() {

       BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

       Book book = new Book();

       book.setName("數學之美");

       book.setIsbn(4578963);

       book.setPrice(39);

       bookMapper.insert(book);

   }

    @Test

    publicvoidtestSelectByExample() {

       BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

       BookExample example = new bookExample();

       // Criteria類是UserExample類裏面的內部類,Criteria類是幹什麼用的呢?它專門用於封裝自定義查詢條件的

       // Criteria criteria = example.createCriteria();

       // criteria.andNameLike("%數學%");

       // 執行查詢

       List<BookMapper> list = bookMapper.selectByExample(example);

       for (BookMapper book : list) {

           System.out.println(user);

       }

   }

    @Test

    publicvoidtestSelectByPrimaryKey() {

      BookMapper bookMapper = applicationContext.getBean(BookMapper.class);

       BookMapper book = bookMapper.selectByPrimaryKey(10);

       System.out.println(book);

   }

 

    @Test

    publicvoidtestUpdateByPrimaryKey() {

       // 請讀者自行測試...

   }

}

相關文章
相關標籤/搜索