1. 程式人生 > 實用技巧 >mybatis——逆向工程以及案例

mybatis——逆向工程以及案例

逆向工程的作用:

可以使用它通過資料庫中的表來自動生成Mapper介面和對映檔案和Po類

注:這裡的對映檔案只包含單表增刪改查等操作

第一部分:自動生成的方法

第一步:

(1)建立一個Java工程

(2)再匯入的jar包,如下:

提醒一下:這些包還是根據自己的版本來,以上就是我包的版本。

第二步:將所匯入的包,手動新增環境,方法如下:

選中匯入的jar包——》右擊——》Build Path——》最後點選Add to Build Path即可,效果如下:

載入成功的話,會有以下效果,如下:

第三步:Mapper生成配置檔案

需要在根目錄(注:不是在src下建立)下建立generatorConfig.xml(也可以取別的,不一定也要跟我取得一樣)中配置mapper生成的詳細資訊,需要注意以下幾點:

(1)新增要生成的資料庫

(2)po檔案所在包路徑

(3)mapper檔案所在包路徑

配置檔案如下:

<?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> <!--指定資料庫驅動jar包位置--> <classPathEntry location="E:\code\mysql\mysql-connector-java-8.0.17.jar"/><!--這裡資料驅動位置修改自己的路徑 --> <!--id:自定義--> <context id="mybatisConfig" targetRuntime="MyBatis3"> <!--禁用註釋--> <
commentGenerator> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator> <!--連線資料庫,useSSL=false解決jdbd與mysql版本相容問題--> <!-- 如果出現時區問題,就在資料庫名後面加?serverTimezone=UTC --> <!-- jdbcConnection中的userId和password修改成自己的使用者名稱和密碼 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/day?serverTimezone=UTC" userId="root" password="123456"/> <!--生成entity類--> <!--這裡的targetPackage包名可以修改,最好是這裡的包名和所創的類中類名可以一致 --> <javaModelGenerator targetPackage="com.mybatis.mapper" targetProject=".\src"/><!-- 注意:targetProject在寫路徑時,不要寫死了,最好寫成為.\src這個路徑 --> <!--xml對映檔案--> <sqlMapGenerator targetPackage="com.mybatis.mapper.app" targetProject=".\src"/> <!--mapper介面--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper.app" targetProject=".\src"/> <!--table配置,指定資料庫中t_user表生成對應的User實體類--> <table tableName="book"/><!-- 這裡是我填寫的表名 --> <table tableName="publisher"/><!--這裡是我填寫的表名 --> <!-- <table tableName="t_tag" domainObjectName="Tag"/> <table tableName="t_movie" domainObjectName="Movie"/> --> </context> </generatorConfiguration>

第四步:使用Java生成mapper檔案

(1)建立類,這裡我的類名為“text.java”

//這是自己所建立的類
package com.mapper.app;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

public class text {
     public void generator() throws Exception{
         
            List<String> warnings = new ArrayList<String>();
            boolean overwrite = true;
            //指向逆向工程配置檔案
            File configFile = new File("generatorConfig.xml"); 
            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);
     
        } 
        public static void main(String[] args) throws Exception {
            try {
                text generatorSqlmap = new text();
                generatorSqlmap.generator();
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }

}

執行的效果如下:

注:執行以後,說明已經生成了,如果看不到的話,請重新整理該專案,千萬不要重複生成,重複生成看不到,也沒法用,需要注意一下。

(2)生成以後,有增加了兩個包名(這裡包可以修改,但需要在剛剛所建立的“generatorConfig.xml裡面進行修改”,以下包自己取得,也可以自取),效果如下:

第二部分:使用逆向工程對單表進行增刪改查等操作

第一步:建立一個專案,在src同級下建立主配置檔案、建立配置檔案

(1)想要對資料庫進行增刪改查等操作,就需要匯入以下的jar包(跟著自己的版本來),如下:

(2)建立主配置檔案,配置如下(只寫一種方式):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!--資料庫連線池 -->
            <dataSource type="POOLED">
            
            <!--解析:這裡是新增驅動,還需要注意:這裡我的mysql版本是8點多版本,所以在新增驅動時,還需要新增cj。
            如果版本不是那麼高的話,驅動就這樣的寫(com.mysql.cj.jdbc.Driver),反正根據自己的來  -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                
                <!--這裡屬於所訪問的地址,還是需要注意一下:下面是由於我的mysql是8點多的版本,需要新增“?serverTimezone=UTC”這個,
                因為這個是解決時區的問題,出現時區的問題,就加上,如果沒有,就不加 。介紹:day是我的資料庫,還是根據自己的來 -->
                <property name="url" value="jdbc:mysql://localhost:3306/day?serverTimezone=UTC" />
                
                <!--使用者  -->
                <property name="username" value="root" />
                
                <!--這是mysql的密碼,反正還是根據自己的mysql的密碼  -->
                <property name="password" value="123456" />
                
            </dataSource>
        </environment>
    </environments>
    <mappers> 
    <!--這裡是主配置檔案(SqlMapConfig.xml)呼叫對映檔案(BookMapper.xml),配置如下  -->
        <mapper resource="com/mybatis/mapper/app/BookMapper.xml" /> 
    </mappers> 
</configuration>

(3) 建立配置檔案,配置如下:

log4j.rootLogger=DEBUG, Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

第二步:把逆向工程裡所生成的那兩個包複製到現在這個專案目錄下,效果如下:

第三步:建立測試類

package com.mapper.app;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

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 com.mybatis.mapper.Book;
import com.mybatis.mapper.BookExample;
import com.mybatis.mapper.BookExample.Criteria;
import com.mybatis.mapper.app.BookMapper;

public class test {
    public static void main(String [] args) throws Exception {
        test te=new test();
        te.selectBook();
    }
    
    public void selectBook() throws Exception {
        //獲取主配置檔案
        String sql="SqlMapConfig.xml";
        //獲取配置檔案
        InputStream inputStream=Resources.getResourceAsStream(sql);
        //建立會話
        SqlSessionFactory sqlsession=new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlsession.openSession();
                            
        //BookMapper是生成檔案中的介面
        BookMapper mapper =session.getMapper(BookMapper.class);//getMapper方法是獲取介面的位元組碼檔案
        
        //建立BookExample物件
        BookExample bookExample=new BookExample();
        //通過BookExample物件建立查詢條件封裝物件()
        Criteria createCriteria = bookExample.createCriteria();
        
        //加入查詢條件
        //createCriteria.andIdEqualTo(1);
        //模糊查詢
        //name只含有西,則返回資訊,如果沒有,則不返回
        createCriteria.andNameLike("%西%");
        
        //獲取BookExample物件的物件名
        List<Book> selectByExample = mapper.selectByExample(bookExample);
        
        //使用迭代器
        Iterator<Book> iterator = selectByExample.iterator();
        while (iterator.hasNext()) {
            Book book = (Book) iterator.next();
            System.out.println("序號:"+book.getId()+"\t"+"書名:"+book.getName()+"\t"+"出版社:"+book.getpId());
        }
        //釋放資源
        session.close();
    }
}
程式碼

最終效果:

提醒一下:

只要以後想要對資料庫進行單表增刪改查等操作,都可以使用逆向工程來完成,比較簡單。反正還是要看自己怎麼選擇