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(); } }程式碼
最終效果:
提醒一下:
只要以後想要對資料庫進行單表增刪改查等操作,都可以使用逆向工程來完成,比較簡單。反正還是要看自己怎麼選擇