Mybatis逆向工程

1. 介紹

Mybatis是目前非常流行的持久層框架笆焰,其逆向工程更是大大縮減了我們的開(kāi)發(fā)時(shí)間。

所謂mybatis逆向工程见坑,就是Mybatis會(huì)根據(jù)我們?cè)O(shè)計(jì)好的數(shù)據(jù)表嚷掠,自動(dòng)生成pojo(實(shí)體)mapper(接口)以及mapper.xml(映射)

而且會(huì)在文件中給我們生成單表增刪改查的方法和sql

image-20201211164421070

2. 插件使用

2.1 引入依賴(lài) mybatis-generator

    <dependencies>
          <!--必要-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!--非必要-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
              <!--mybatis-generator的Maven插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.2 加入配置文件

將資料包下的generatorConfig.xml 拷貝到 項(xiàng)目的resouces下

2.2.1 文件名稱(chēng):generratorConfig.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>
    <!-- classPathEntry:數(shù)據(jù)庫(kù)的 JDBC驅(qū)動(dòng)的jar 包地址 -->
    <classPathEntry location="lib/mysql-connector-java-5.1.47.jar"/>

    <!--生成java代碼-->
    <context id="context" targetRuntime="MyBatis3">

        <!-- 配置生成pojo的序列化的插件-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>

        <!-- 配置生成toString的序列化的插件  -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>

        <commentGenerator>
            <!-- 是否去除自動(dòng)生成的(english)注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--數(shù)據(jù)庫(kù)連接的信息:驅(qū)動(dòng)類(lèi)荞驴、連接地址不皆、用戶(hù)名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/spring_141"
                        userId="root"
                        password="root"/>

        <!-- 指定生成的實(shí)體類(lèi)的存放位置 -->
        <javaModelGenerator targetPackage="com.itheima.domain" targetProject="./src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 指定生成的Dao映射文件的存放位置 -->
        <sqlMapGenerator targetPackage="com.itheima.dao" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!--指定生成的Dao接口的存放位置-->
        <javaClientGenerator targetPackage="com.itheima.dao" targetProject="./src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 指定數(shù)據(jù)庫(kù)表 -->
        <table tableName="account" domainObjectName="Account" mapperName="AccountDao"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="true" enableUpdateByExample="false"/>

    </context>
</generatorConfiguration>

拷貝測(cè)試用配置文件

2.2.2 文件名稱(chēng):mybatis-config.xml

<?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>
    <!--數(shù)據(jù)庫(kù)環(huán)境信息-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///spring"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--mapper映射文件-->
    <mappers>
        <package name="com.itheima.dao"/>
    </mappers>
</configuration>
image-20210609092556130

2.2.3 手動(dòng)加入mysql-connector的jar包

image-20210816161734200

2.3 運(yùn)行插件熊楼,生成文件

image-20201220115506038

3. 生成的文件的使用

3.1 基礎(chǔ)操作

public interface AccountDao {
    //保存
    int insert(Account record);

    //動(dòng)態(tài)sql的保存
    int insertSelective(Account record);

    //主鍵修改
    int updateByPrimaryKey(Account record);

    //動(dòng)態(tài)sql的主鍵修改
    int updateByPrimaryKeySelective(Account record);

    //根據(jù)主鍵刪除
    int deleteByPrimaryKey(Integer aid);

    //主鍵查詢(xún)
    Account selectByPrimaryKey(Integer aid);

    //條件查詢(xún)
    List<Account> selectByExample(AccountExample example);
}

3.2 條件查詢(xún)

模板代碼,直接復(fù)制使用即可

public class MyBatisTest {
    private SqlSession sqlSession;

    @Before
    public void getSqlSession() {
        InputStream stream = null;
        try {
            stream = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
        sqlSession = factory.openSession(true);
    }

    @After
    public void closeSqlSession() {
        sqlSession.close();
    }

    @Test
    public void test1() {
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
        AccountExample example = new AccountExample();

    }
}

引入配置文件,修改數(shù)據(jù)庫(kù)配置信息

[圖片上傳失敗...(image-3d2362-1629158952976)]

測(cè)試代碼

package com.itheima.test;

import com.itheima.dao.AccountDao;
import com.itheima.domain.AccountExample;
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.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/*
    AccountExample 這哥們有三個(gè)功能
    1 條件查詢(xún)
        example.createCriteria().條件
    2 排序
       example.setOrderByClause(排序條件) 
    3 去重
        example.setDistinct(true);
*/
public class MybatisTest {
    private SqlSession sqlSession;

    @Before
    public void getSqlSession() {
        InputStream stream = null;
        try {
            stream = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
        sqlSession = factory.openSession(true);
    }

    @After
    public void closeSqlSession() {
        sqlSession.close();
    }

    @Test
    public void test1() {
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
        AccountExample example = new AccountExample();

        //這是example的一個(gè)小弟,作用是用于條件的拼接
        AccountExample.Criteria criteria = example.createCriteria();
//        criteria.andAidGreaterThan(2);//where aid > 2
//        criteria.andBalanceBetween(10f,100f);//WHERE ( aid > 2 and balance between 1 and 100 )
//        criteria.andNameLike("B%");//WHERE ( aid > ? and balance between ? and ? and name like B% )

        criteria.andAidGreaterThan(2).andBalanceBetween(10f, 100f).andNameLike("B%");

        accountDao.selectByExample(example);
    }


    @Test
    public void test2() {
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
        AccountExample example = new AccountExample();

        //這是example的一個(gè)小弟,作用是用于排序
        example.setOrderByClause("aid desc");//from account order by aid desc
        accountDao.selectByExample(example);
    }

    @Test
    public void test3() {
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
        AccountExample example = new AccountExample();

        //這是example的一個(gè)小弟,作用是用于去重
        example.setDistinct(true);
        accountDao.selectByExample(example);
    }
} 

3.3 模板說(shuō)明

* 條件說(shuō)明
* criteria.andXxxIsNull    添加字段xxx為null的條件
* criteria.andXxxIsNotNull    添加字段xxx不為null的條件
* criteria.andXxxEqualTo(value)    添加xxx字段等于value條件
* criteria.andXxxNotEqualTo(value)    添加xxx字段不等于value條件
* criteria.andXxxGreaterThan(value)    添加xxx字段大于value條件
* criteria.andXxxGreaterThanOrEqualTo(value)    添加xxx字段大于等于value條件
* criteria.andXxxLessThan(value)    添加xxx字段小于value條件
* criteria.andXxxLessThanOrEqualTo(value)    添加xxx字段小于等于value條件
* criteria.andXxxIn(List<霹娄?>)    添加xxx字段值在List<?>條件
* criteria.andXxxNotIn(List<孙蒙?>)    添加xxx字段值不在List<项棠?>條件
* criteria.andXxxLike(“%”+value+”%”)    添加xxx字段值為value的模糊查詢(xún)條件
* criteria.andXxxNotLike(“%”+value+”%”)    添加xxx字段值不為value的模糊查詢(xún)條件
* criteria.andXxxBetween(value1,value2)    添加xxx字段值在value1和value2之間條件
* criteria.andXxxNotBetween(value1,value2)    添加xxx字段值不在value1和value2之間條件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挎峦,隨后出現(xiàn)的幾起案子香追,更是在濱河造成了極大的恐慌,老刑警劉巖坦胶,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件透典,死亡現(xiàn)場(chǎng)離奇詭異晴楔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)峭咒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)税弃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凑队,你說(shuō)我怎么就攤上這事则果。” “怎么了漩氨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵叫惊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抡草,道長(zhǎng)康震,這世上最難降的妖魔是什么步悠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任鼎兽,我火速辦了婚禮,結(jié)果婚禮上鹦付,老公的妹妹穿的比我還像新娘敲长。我一直安慰自己秉继,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辑鲤。 她就那樣靜靜地躺著月褥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舀透。 梳的紋絲不亂的頭發(fā)上决左,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天哆窿,我揣著相機(jī)與錄音,去河邊找鬼。 笑死码荔,一個(gè)胖子當(dāng)著我的面吹牛感挥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硼瓣,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼堂鲤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘟栖!你這毒婦竟也來(lái)了谅阿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寓涨,失蹤者是張志新(化名)和其女友劉穎戒良,沒(méi)想到半個(gè)月后男摧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奏司,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年韵洋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黄锤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡副编,死狀恐怖痹届,靈堂內(nèi)的尸體忽然破棺而出打月,到底是詐尸還是另有隱情,我是刑警寧澤柴淘,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布为严,位于F島的核電站梗脾,受9級(jí)特大地震影響盹靴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梭冠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一控漠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偶翅,春花似錦碉渡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淋叶。三九已至,卻和暖如春芬膝,著一層夾襖步出監(jiān)牢的瞬間形娇,已是汗流浹背桐早。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工哄酝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祷膳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓搀军,卻偏偏與公主長(zhǎng)得像罩句,于是被迫代替她去往敵國(guó)和親敛摘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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