10挖函、mybatis逆向工程(mybatis筆記)

一、概述

Mybatis官方提供逆向工廠浊竟,可以針對單表自動生成mybatis執(zhí)行所需要的代碼(如mapper.java怨喘、mapper.xml、pojo)振定。這里有很多方法可選:

1

這里我們建議使用第四種方式或者MyEclipse插件方式必怜,最好是前者,因為不受開發(fā)工具影響后频。使用前者時需要下載一個工具包mybatis-generator-core-1.3.2.jar梳庆。

二、使用工具逆向生成相關(guān)代碼

首先我們建立一個java工程(mybatis-generator)卑惜,然后導(dǎo)入mybatis的相關(guān)jar包和上面提到的工具包膏执。然后編寫用于生成相關(guān)類的配置文件:
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>
            <!-- 是否去除自動生成的注釋  ture:是   false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 數(shù)據(jù)庫連接的信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" 
                        connectionURL="jdbc:mysql://localhost:3305/mybatis"
                        userId="root"
                        password="walp1314">
        </jdbcConnection>
        <!-- oracle -->
        <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" 
                        connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:mybatis"
                        userId="root"
                        password="walp1314">
        </jdbcConnection> -->
        <!-- 默認(rèn)false,把JDBC DECIMAL和NUMERIC類型解析為Integer残揉,為true時解析為java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        
        <!-- targetProject:生成pojo類的位置 -->
        <javaModelGenerator targetPackage="cn.itcast.ssm.pojo" 
                            targetProject=".\src">
            <!-- enableSubPackages:是否讓schame作為包的后綴 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 從數(shù)據(jù)庫返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        
        <!-- targetProject:mapper映射成文件的位置 -->
        <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper" 
                         targetProject=".\src">
            <!-- enableSubPackages:是否讓schame作為包的后綴 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator targetPackage="cn.itcast.ssm.mapper" 
                             type="XMLMAPPER" targetProject=".\src">
            <!-- enableSubPackages: 是否讓schame作為包的后綴-->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        
        <!-- 指定數(shù)據(jù)庫表 -->
        <table tableName="items"></table>
        <table tableName="orders"></table>
        <table tableName="orderdetail"></table>
        <table tableName="user"></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>

編寫一個工具類生成相關(guān)代碼:
GeneratorSqlmap.java

package cn.itcast.ssm.util;
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 GeneratorSqlmap {
    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) {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

說明:這個類的是直接從官網(wǎng)上找到的胧后,這里不比關(guān)心其實現(xiàn)原理。運行此類我們就可以發(fā)現(xiàn)在工程中生成了相關(guān)的類抱环。

2

注意:一般我們都是單獨建一個工程壳快,專門用來逆向生成相關(guān)代碼,然后將這些代碼拷貝到項目工程中镇草,這樣比較安全眶痰,避免出現(xiàn)同名文件的覆蓋問題。這里將代碼拷貝到了工程spring-mybatis02梯啤。

三竖伯、使用生成的代碼

測試ItemsMapper.java中的方法:

package cn.itcast.ssm.mapper;
import cn.itcast.ssm.pojo.Items;
import cn.itcast.ssm.pojo.ItemsExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface ItemsMapper {
    int countByExample(ItemsExample example);
    int deleteByExample(ItemsExample example);
    int deleteByPrimaryKey(Integer id);
    int insert(Items record);
    int insertSelective(Items record);
    List<Items> selectByExampleWithBLOBs(ItemsExample example);
    List<Items> selectByExample(ItemsExample example);
    Items selectByPrimaryKey(Integer id);
    int updateByExampleSelective(@Param("record") Items record, @Param("example") ItemsExample example);
    int updateByExampleWithBLOBs(@Param("record") Items record, @Param("example") ItemsExample example);
    int updateByExample(@Param("record") Items record, @Param("example") ItemsExample example);
    int updateByPrimaryKeySelective(Items record);
    int updateByPrimaryKeyWithBLOBs(Items record);
    int updateByPrimaryKey(Items record);
}

測試方法ItemsMapperTest.java

package cn.itcast.ssm.mapper;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.ssm.pojo.Items;
import cn.itcast.ssm.pojo.ItemsExample;

public class ItemsMapperTest {
    private ApplicationContext applicationContext;
    private ItemsMapper itemsMapper;//這里我們使用的是spring的自動掃描后注入的
    
    @Before
    public void setUp()throws Exception{
        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
        itemsMapper = (ItemsMapper) applicationContext.getBean("itemsMapper");
    }
    //根據(jù)主鍵刪除
    @Test
    public void testDeleteByPrimaryKey() {
        
    }

    @Test
    public void testInsert() {
        //構(gòu)造Items對象
        Items items = new Items();
        items.setName("手機");
        items.setPrice(1999f);
        itemsMapper.insert(items);
    }
    
    //自定義條件查詢
    @Test
    public void testSelectByExample() {
        ItemsExample itemsExample = new ItemsExample();
        //通過criteria構(gòu)造查詢條件
        ItemsExample.Criteria criteria = itemsExample.createCriteria();
        criteria.andNameEqualTo("臺式機");//這就是我們添加的查詢條件
        //可能返回多天記錄
        List<Items> list = itemsMapper.selectByExample(itemsExample);
        for(Items tmp : list){
            System.out.println(tmp.getName());
        }
    }
    
    //根據(jù)主鍵查詢
    @Test
    public void testSelectByPrimaryKey() {
        Items items = itemsMapper.selectByPrimaryKey(1);
        System.out.println(items.getName());
    }
    
    //更新
    @Test
    public void testUpdateByPrimaryKey() {
        //對所有字段進(jìn)行更新,需要先查詢出來再更新
        Items items = itemsMapper.selectByPrimaryKey(1);
        items.setName("水杯");
        itemsMapper.updateByPrimaryKey(items);
        //如果傳入字段不為空才更新,一般用在批量更新中七婴,不需要先查詢再更新
        //itemsMapper.updateByPrimaryKeySelective(items);
    }
}

說明:這里我們是對相關(guān)方法的一個簡要測試祟偷。其他內(nèi)容還需要再研究。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末打厘,一起剝皮案震驚了整個濱河市修肠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌户盯,老刑警劉巖嵌施,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莽鸭,居然都是意外死亡吗伤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門硫眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來足淆,“玉大人,你說我怎么就攤上這事捺球「灼郑” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵氮兵,是天一觀的道長裂逐。 經(jīng)常有香客問我,道長泣栈,這世上最難降的妖魔是什么卜高? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮南片,結(jié)果婚禮上掺涛,老公的妹妹穿的比我還像新娘。我一直安慰自己疼进,他們只是感情好薪缆,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伞广,像睡著了一般拣帽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚼锄,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天减拭,我揣著相機與錄音,去河邊找鬼区丑。 笑死拧粪,一個胖子當(dāng)著我的面吹牛修陡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播可霎,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魄鸦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了癣朗?” 一聲冷哼從身側(cè)響起号杏,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斯棒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體主经,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡荣暮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罩驻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穗酥。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惠遏,靈堂內(nèi)的尸體忽然破棺而出砾跃,到底是詐尸還是另有隱情,我是刑警寧澤节吮,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布抽高,位于F島的核電站,受9級特大地震影響透绩,放射性物質(zhì)發(fā)生泄漏翘骂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一帚豪、第九天 我趴在偏房一處隱蔽的房頂上張望碳竟。 院中可真熱鬧,春花似錦狸臣、人聲如沸莹桅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诈泼。三九已至,卻和暖如春此洲,著一層夾襖步出監(jiān)牢的瞬間厂汗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工呜师, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娶桦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像衷畦,于是被迫代替她去往敵國和親栗涂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis 祈争? MyBatis 是支持定制化 SQL斤程、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,517評論 0 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評論 25 707
  • 日夜穿梭何太急 寒窗共對九張機 一生織得相思句 遍看紅塵無處題 一張機 春蠶吐盡萬絳絲 只因情有千千結(jié) 柔腸...
    丫頭317閱讀 334評論 0 0
  • 準(zhǔn)備一點一點將自己曾經(jīng)閱讀的書目整理為電子版本,方便以后查閱和搜索菩混。 1 英文小說原版系列 1.1 Animal ...
    LoveLJM閱讀 1,367評論 0 3
  • [PHP] - Laravel - CSRF token禁用方法方法一 打開文件:app\Http\Kernel....
    金星show閱讀 537評論 0 0