SpringBoot2.0學(xué)習(xí)(四)-MyBatis

MyBatis是一款優(yōu)秀的持久層構(gòu)架亮蒋,它支持定制化SQL語句绪氛、存儲過程以及高級映射揍鸟,可以通過簡單的XML或注解配置和映射原生信息楞黄,將POJOs映射成數(shù)據(jù)庫中的記錄池凄,從而方便進(jìn)行增刪改查的操作(官網(wǎng))。本文會分別介紹通過XML鬼廓、自動生成肿仑、注解三種傳統(tǒng)使用MyBatis的方式以及在SpringBoot中使用MyBatis。

GitHub源碼地址

1. XML配置方式使用MyBatis

1.1 引入依賴(jdbc,mysql,mybatis)
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
1.2 配置數(shù)據(jù)庫連接信息

resources:mybatis/mybatis.properties

jdbc.driver-class=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/test
1.3 配置Mybatis

resources:mybatis/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>
    <properties resource="mybatis/mybatis.properties" />

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver-class}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mybatis/mappers/UserMapper.xml"/>
    </mappers>
</configuration>
1.4 配置映射信息

resources:mybatis/mappers/UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hebaohua.springbootmybatis.mappers.UserMapper">
    <select id="selectUser" resultType="com.hebaohua.springbootmybatis.entity.User">
    select * from user where id = #{id}
  </select>
</mapper>
1.5運(yùn)行測試
public class XmlConfigDemo {
    public static void main(String[] args) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        Resource resource = resourceLoader.getResource("classpath:/mybatis/mybatis-config.xml");
        InputStream inputStream = resource.getInputStream();
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {
            User user = session.selectOne("com.hebaohua.springbootmybatis.mappers.UserMapper.selectUser", 4);
            System.out.println(user);
        } finally {
            session.close();
        }
    }
}

運(yùn)行效果:

2. 使用MyBatis配置生成器

此處只講解在idea中使用maven連接Mysql的配置方式, 其它可以查看網(wǎng)址.

2.1 首先添加Maven插件
           <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.46</version>
                    </dependency>
                </dependencies>
            </plugin>

注意: 不要忘了下面的mysql驅(qū)動依賴

2.2 編寫生成配置文件
<?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">
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- Java 模型對象生成器 -->
        <javaModelGenerator targetPackage="com.hebaohua.springbootmybatisgenerator.entity"
                            targetProject="${user.dir}/src/main/java"/>

        <!-- SQL Mapper XML 生成器 -->
        <sqlMapGenerator  targetPackage="mybatis.mappers" targetProject="${user.dir}/src/main/resources"/>

        <!-- SQL Mapper Java 接口 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.hebaohua.springbootmybatisgenerator.mappers"
                             targetProject="${user.dir}/src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <table tableName="user" domainObjectName="User" >
            <property name="useActualColumnNames" value="true"/>
            <generatedKey column="id" sqlStatement="MySQL" identity="true" />
            <columnOverride column="name"/>
            <columnOverride column="age"/>
        </table>

    </context>
</generatorConfiguration>

注意命名為generatorConfig.xml碎税,并且直接放在resources下面

2.3 執(zhí)行生成命令

在項(xiàng)目根目錄打開命令窗口并執(zhí)行mvn mybatis-generator:generate下圖中的四個文件尤慰,然后其添加如XML方式中的配置信息。

2.4 運(yùn)行測試

上一步中產(chǎn)生的文件提供了關(guān)于數(shù)據(jù)庫user表中豐富的增刪改查接口雷蹂,使我們在使用起來非常的方便伟端。

public class Demo {
    public static void main(String[] args) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        Resource resource = resourceLoader.getResource("classpath:/mybatis/mybatis-config.xml");
        InputStream inputStream = resource.getInputStream();
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            List<User> users = userMapper.selectByExample(null);

            System.out.println(users);
        } finally {
            session.close();
        }
    }
}

運(yùn)行效果:

3. 使用注解

注解的方式總是能減少繁瑣的配置文件。

3.1 編寫注解Mapper
@Mapper
public interface UserMapper {

    @Results(value = {
            @Result(property = "id", column = "id", id = true),
            @Result(property = "name", column = "name"),
            @Result(property = "age", column = "age")
    })
    @Select("SELECT id,name,age FROM user WHERE id = #{id}")
    User selectUser(int id);
}
3.2 運(yùn)行測試

同樣需要引入全局配置文件匪煌,并注意要增加以下內(nèi)容:

    <mappers>
        <mapper class="com.hebaohua.springbootmybatisannotation.mappers.UserMapper"/>
    </mappers>

測試代碼:

public class Demo {
    public static void main(String[] args) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        Resource resource = resourceLoader.getResource("classpath:/mybatis/mybatis-config.xml");
        InputStream inputStream = resource.getInputStream();
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user= userMapper.selectUser(4);

            System.out.println(user);
        } finally {
            session.close();
        }
    }
}

運(yùn)行效果:

4.SpringBoot中使用MyBatis

通過查看 MybatisAutoConfiguration以及MybatisProperties源碼可知责蝠,在SpringBoot的配置文件中配置好datasource以及以“mybatis”開頭的相關(guān)配置就會自動裝配SqlSessionFactorySqlSessionTemplate對象萎庭,因此在Contorller中就可以直接使用霜医。

@org.springframework.context.annotation.Configuration
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnBean(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration 
@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {

  public static final String MYBATIS_PREFIX = "mybatis";

  /**
   * Location of MyBatis xml config file.
   */
  private String configLocation;

SpringBoot配置文件:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/test

mybatis.config-location=classpath:/mybatis/mybatis-config.xml

Controller類:

@RestController
public class MyBatisController {
    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable int id){
        User user = sqlSessionTemplate.selectOne("com.hebaohua.springbootmybatisannotation.mappers.UserMapper.selectUser",id);
        return user;
    }
}

運(yùn)行效果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驳规,隨后出現(xiàn)的幾起案子肴敛,更是在濱河造成了極大的恐慌,老刑警劉巖达舒,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件值朋,死亡現(xiàn)場離奇詭異叹侄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昨登,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門趾代,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丰辣,你說我怎么就攤上這事撒强。” “怎么了笙什?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵飘哨,是天一觀的道長。 經(jīng)常有香客問我琐凭,道長芽隆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任统屈,我火速辦了婚禮胚吁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愁憔。我一直安慰自己腕扶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布吨掌。 她就那樣靜靜地躺著半抱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膜宋。 梳的紋絲不亂的頭發(fā)上窿侈,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音秋茫,去河邊找鬼棉磨。 笑死,一個胖子當(dāng)著我的面吹牛学辱,可吹牛的內(nèi)容都是我干的乘瓤。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼策泣,長吁一口氣:“原來是場噩夢啊……” “哼衙傀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萨咕,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤统抬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聪建,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钙畔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了金麸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擎析。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挥下,靈堂內(nèi)的尸體忽然破棺而出揍魂,到底是詐尸還是另有隱情,我是刑警寧澤棚瘟,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布现斋,位于F島的核電站,受9級特大地震影響偎蘸,放射性物質(zhì)發(fā)生泄漏庄蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一迷雪、第九天 我趴在偏房一處隱蔽的房頂上張望蔓肯。 院中可真熱鬧,春花似錦振乏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舟陆,卻和暖如春误澳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秦躯。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工忆谓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踱承。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓倡缠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茎活。 傳聞我的和親對象是個殘疾皇子昙沦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL载荔、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,464評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理盾饮,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,638評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • 一丘损、我聽到的主要內(nèi)容 1.讀書的五個大坑 1)讀書是一種投資普办,但很多人往往在“本金”(讀書習(xí)慣)不夠的情況下開始投...
    老李寫做閱讀 483評論 0 2
  • 寂寞身影獨(dú)徘徊, 長廊深處誰獨(dú)坐徘钥。 抬眼漫天蝶飛舞衔蹲, 原是冬雪漫天飄。
    蝶舞心閱讀 93評論 0 0