亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

mybatis逆向工程

2024-07-21 02:51:22
字體:
來源:轉載
供稿:網友

1.什么是逆向工程?

mybaits需要程序員自己編寫sql語句,mybatis官方提供逆向工程 可以針對單表自動生成mybatis執行所需要的代碼:(mapper.java,mapper.xml、po..) 建議:企業實際開發中,常用的逆向工程方式,由于數據庫的表生成java代碼。

2.使用方法

根據官網介紹有一下幾種使用方法: Running MyBatis Generator

MyBatis Generator (MBG) can be run in the following ways: From the command PRompt with an XML configuration

As an Ant task with an XML configurationAs a Maven PluginFrom another Java program with an XML configurationFrom another Java program with a Java based configuration

除了上面的方法還還可以使用eclipse插件的方式. 建議:使用java程序方式,不依賴開發工具。 這里逆向工程中用的方法是上面提到的 From another Java program with an XML configuration. 這里寫圖片描述 此處只用到了generatorConfig.xml文件.

generatorConfig.xml配置詳情:

<?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> <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/mybatis" userId="root" passWord="root"> </jdbcConnection> <!-- 連接Oracle數據庫的信息 --> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO類的位置 --> <javaModelGenerator targetPackage="cn.com.yves.model" targetProject="./src"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> <!-- 從數據庫返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="cn.com.yves.mapper" targetProject="./src"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.com.yves.mapper" targetProject="./src"> <!-- enableSubPackages:是否讓schema作為包的后綴 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定數據庫表 --> <table tableName="items" domainObjectName="ItemsModel"></table> <table tableName="orders" domainObjectName="OrdersModel"></table> <table tableName="orderdetail" domainObjectName="OrderdetailModel"></table> <table tableName="user" domainObjectName="UserModel"></table> <table tableName="user_stringkey" domainObjectName="User_stringkeyModel"> </table> <!-- <table schema="" tableName="sys_user"></table> <table schema="" tableName="sys_role"></table> <table schema="" tableName="sys_permission"></table> <table schema="" tableName="sys_user_role"></table> <table schema="" tableName="sys_role_permission"></table> --> <!-- 有些表的字段需要指定java類型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --> </context></generatorConfiguration>

GeneratorSqlmap.java文件:

package cn.com.yves;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;/** * java代碼+ xml配置文件自動生成mapper.xml和mapper.java,以及po * * @author Yves He * */public class GeneratorSqlmap { public void generator() throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; // 指定 逆向工程配置文件 File configFile = new File( "D://git//mybatisgeneration//generationConfig//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 { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } }}

SqlMapconfig.xml配置內容:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><!-- 一般配置: 1.運行環境 2.數據源 3.事務 --><configuration> <!--全局屬性配置:除了加載db.properties 中的屬性,還可以自己配置一些屬性 --> <properties resource="db.properties"> </properties> <!-- 全局配置參數,影響mybatis的性能 --> <!-- <settings> --> <!-- <setting name="" value=""/> --> <!-- </settings> --> <!-- 類型別名 --> <typeAliases> <!-- 單個別名定義 --> <!-- <typeAlias alias="user" type="cn.com.yves.model.UserModel" /> --> <!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) --> <package name="cn.com.yves.model" /> </typeAliases> <!-- 類型處理器 --> <!-- <typeHandlers> --> <!-- </typeHandlers> --> <!-- 對象工程 --> <!-- <objectFactory type=""> --> <!-- </objectFactory> --> <!-- 插件 --> <!-- <plugins></plugins> --> <!-- 環境集合屬性對象 (和spring整合后 environments配置將廢除) --> <environments default="development"> <!-- 環境子屬性對象 --> <environment id="development"> <!-- 事務管理 (使用jdbc事務管理,事務控制由mybatis控制) --> <transactionManager type="JDBC" /> <!-- 數據源 (數據庫連接池 ,暫時由mybatis管理) --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <!-- 映射器(加載映射文件):我這里由于是mapper.xml和mapper.java是在同一目錄下,采用掃描包的方式注入映射文件 --> <mappers> <!-- 這里特別注意:是路徑符號,不是轉義符號 --> <package name="cn/com/yves/mapper" /> </mappers></configuration>

自動生成的Mapper接口測試

學會使用mapper自動生成的增、刪、改、查方法。

/** * Filename: ItemsMapperTest.java * Copyright: Copyright (c)2016 * Company: Yves * @version: 1.0 * Create at: 2017-3-4 上午9:49:20 * Description: * * Author Yves He */package cn.com.yves.mapper;import java.io.InputStream;import java.util.Date;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 org.junit.Before;import org.junit.Test;import cn.com.yves.model.ItemsModel;import cn.com.yves.model.ItemsModelExample;import cn.com.yves.model.ItemsModelExample.Criteria;//測試類中的測試方法都會執行public class ItemsModelMapperTest { private SqlSessionFactory sqlSessionFactory; // 測試方法之前執行 @Before public void setUp() throws Exception { String mybatisConfigPath = "SqlMapConfig.xml"; InputStream inputStream = Resources .getResourceAsStream(mybatisConfigPath); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } // 查詢數量: @Test public void testCountByExample() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); ItemsModelExample example = new ItemsModelExample(); Criteria criteria = example.createCriteria(); criteria.andNameLike("%iPhone%"); int count = mapper.countByExample(example); session.close(); } // 刪除byprimaryKey @Test public void testDeleteByPrimaryKey() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); mapper.deleteByPrimaryKey(4); session.commit(); session.close(); } // 新增,全量更新(這里要注意數據庫中不能為空的列明,否則更新時會出錯) @Test public void testInsert() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); ItemsModel iModel = new ItemsModel(); // iModel.setId(id); //如果id在數據中設置了自動增長,這里不需要設定id的值,設置了也不會生效 iModel.setName("iPhone6s"); iModel.setPrice(4800f); iModel.setCreatetime(new Date()); mapper.insert(iModel); session.commit(); session.close(); } // 查詢:自定義條件查詢(用得最多),這里類似那種自己封裝的filterBean來過濾查詢條件 @Test public void testSelectByExample() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); /* 創造過濾條件 */ ItemsModelExample example = new ItemsModelExample(); // 通過criteria來構造條件 Criteria criteria = example.createCriteria(); criteria.andNameEqualTo("筆記本"); List<ItemsModel> listResult = mapper.selectByExample(example); session.close(); System.out.println(listResult); } // 查詢: 通過primaryKey查詢單條記錄 @Test public void testSelectByPrimaryKey() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); ItemsModel iModel = mapper.selectByPrimaryKey(1); session.close(); System.out.println(iModel); } // 更新:字段不為null就更新,通常在批量更新的時候使用此方法(因為每條紀錄要更新的內容可以能不相同) @Test public void testUpdateByPrimaryKeySelective() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); ItemsModel iModel = new ItemsModel(); iModel.setId(1); iModel.setCreatetime(new Date()); mapper.updateByPrimaryKeySelective(iModel); session.commit(); session.close(); } // 更新:全量更新 @Test public void testUpdateByPrimaryKey() { SqlSession session = sqlSessionFactory.openSession(); ItemsModelMapper mapper = session.getMapper(ItemsModelMapper.class); // 全量查詢的切記要先查詢出原來的數據在做更新 ItemsModel itemsModel = mapper.selectByPrimaryKey(1); itemsModel.setName("yves"); mapper.updateByPrimaryKey(itemsModel); session.commit(); session.close(); }}

逆向工程注意事項

1.單獨生成代碼后,再拷貝到工程,而不是直接在工程中生成. XXXMapper.xml文件已經存在時,如果進行重新生成則mapper.xml文件內容不被覆蓋而是進行內容追加,結果導致mybatis解析失敗。 解決方法:刪除原來已經生成的mapper xml文件再進行生成。 Mybatis自動生成的po及mapper.java文件不是內容而是直接覆蓋沒有此問題。2.關于針對oracle數據庫表生成代碼的schema問題 Schma即數據庫模式,oracle中一個用戶對應一個schema,可以理解為用戶就是schema。 當Oralce數據庫存在多個schema可以訪問相同的表名時,使用mybatis生成該表的mapper.xml將會出現mapper.xml內容重復的問題,結果導致mybatis解析錯誤。 解決方法:在table中填寫schema,如下: <table schema="XXXX" tableName=" " > XXXX即為一個schema的名稱,生成后將mapper.xml的schema前綴批量去掉,如果不去掉當oracle用戶變更了sql語句將查詢失敗。 快捷操作方式:mapper.xml文件中批量替換:“from XXXX.”為空 Oracle查詢對象的schema可從dba_objects中查詢,如下: select * from dba_objects

心得: 如果要做代理開發,加載mapper.xml映射文件時采用掃描包的方法,在自動生成mapper.java和mapper.xml時要配置在同一目錄下,且文件名相同.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲伊人一本大道中文字幕| 亚洲色图综合久久| 欧美乱大交xxxxx| 欧美性猛交xxxx富婆弯腰| 精品久久香蕉国产线看观看亚洲| 亚洲无亚洲人成网站77777| 欧美日韩在线视频一区| 亚洲一区二区三区视频| 91精品久久久久久久久中文字幕| 亚洲一区二区三区四区在线播放| 日韩av在线电影网| 亚洲欧美日韩天堂一区二区| 18性欧美xxxⅹ性满足| 国产69久久精品成人看| 成人欧美在线观看| 自拍偷拍亚洲区| 日韩中文字幕av| 国产极品精品在线观看| 中文字幕综合在线| 国产视频久久网| 国产精品成熟老女人| 精品久久久久久久久中文字幕| 国产成人精品久久亚洲高清不卡| 日韩亚洲第一页| 欧洲精品毛片网站| 欧美亚洲另类在线| 欧美精品在线视频观看| 精品久久中文字幕久久av| 国产69久久精品成人| 成人性生交大片免费看小说| 精品国偷自产在线视频| 亚洲欧美另类自拍| 国产日本欧美一区二区三区在线| 国产日韩在线视频| 日韩女优人人人人射在线视频| 91在线免费视频| 欧美最顶级丰满的aⅴ艳星| 欧美精品在线看| 国产精品主播视频| 久久久久久久久中文字幕| 欧美激情精品久久久久久免费印度| 久久精品一区中文字幕| 欧美一级片免费在线| 66m—66摸成人免费视频| 91国产高清在线| 精品久久久久久久大神国产| 不卡av在线播放| 国产精品久久久久久久久免费| 茄子视频成人在线| 精品国产91乱高清在线观看| 日本欧美爱爱爱| 久久久久成人精品| 亚洲国产精品久久精品怡红院| 久久精品中文字幕| 欧美激情第一页xxx| 亚洲国产精彩中文乱码av在线播放| 国产精品欧美激情在线播放| 麻豆国产精品va在线观看不卡| 欧美日韩国产中文字幕| 精品色蜜蜜精品视频在线观看| 精品亚洲国产成av人片传媒| 久久99热这里只有精品国产| 日韩欧美精品免费在线| 欧美国产日产韩国视频| 在线播放日韩欧美| 久久久日本电影| 91精品国产高清久久久久久| 精品久久久久久久久久久久| 亚洲电影免费观看高清完整版在线观看| 大胆人体色综合| 亚洲精品国产精品国产自| 欧美激情a∨在线视频播放| 欧美人与性动交a欧美精品| www.日本久久久久com.| 欧美国产一区二区三区| 亚洲天天在线日亚洲洲精| 日本高清视频一区| 久久99亚洲热视| 亚洲欧美日韩精品久久亚洲区| 国产一区私人高清影院| 国产主播在线一区| 日韩视频免费在线| 欧美性xxxxx极品娇小| 久久久久久久久久国产| 精品国产一区二区三区四区在线观看| 日韩男女性生活视频| 国产精品午夜视频| 日韩中文字幕视频在线| 精品高清一区二区三区| 久久久亚洲国产| 久久这里只有精品视频首页| 中文字幕久热精品视频在线| 欧美一区在线直播| 俺去亚洲欧洲欧美日韩| 97婷婷涩涩精品一区| 日韩精品亚洲视频| 国产一区香蕉久久| 97精品视频在线| 一本一本久久a久久精品牛牛影视| 久久久久久国产免费| 精品国产依人香蕉在线精品| 91精品国产91久久久久久久久| 亚洲性视频网址| 亚洲精品美女在线| 91av免费观看91av精品在线| 国产精品久久久久久影视| 国产精品视频播放| 日韩一区二区精品视频| 亚洲在线视频福利| 青青草成人在线| 亚洲精品一区二区三区婷婷月| 色综合久综合久久综合久鬼88| 国语对白做受69| 亚洲第一页在线| 亚洲精品视频在线播放| 欧美特黄级在线| 欧美黑人极品猛少妇色xxxxx| 欧美超级乱淫片喷水| 欧美午夜视频一区二区| 日韩男女性生活视频| 国产视频久久久久久久| 亚洲国产成人91精品| 欧美性猛交xxxxx水多| 欧美中文在线观看| 欧美专区在线视频| 81精品国产乱码久久久久久| www国产精品视频| 国产乱肥老妇国产一区二| 色樱桃影院亚洲精品影院| 日本精品久久电影| 亚洲韩国日本中文字幕| 欧美精品videofree1080p| 欧美精品激情blacked18| 91精品久久久久久久久久| 欧美电影免费观看| 亚洲理论在线a中文字幕| 国产日韩亚洲欧美| 欧美午夜精品久久久久久浪潮| 91精品国产自产在线观看永久| 九九九久久久久久| 菠萝蜜影院一区二区免费| 成人精品久久av网站| 国产精品夜色7777狼人| 日韩av在线不卡| 欧美电影免费观看网站| 亚洲永久免费观看| 国产精品白丝av嫩草影院| 国产99在线|中文| 欧美丝袜美女中出在线| 热re99久久精品国产66热| 亚洲永久免费观看| 九色91av视频| 欧美韩日一区二区| 精品久久香蕉国产线看观看gif| 亚洲福利视频在线| 萌白酱国产一区二区| 国产精品免费在线免费| 久久精品2019中文字幕| 成人欧美一区二区三区在线| 久久91亚洲精品中文字幕奶水| 欧美片一区二区三区| 色偷偷偷亚洲综合网另类| 久久久久久久久久久久久久久久久久av| 亚洲www永久成人夜色|