SpringBoot筆記(八)MyBatis

插件和配置

  • mybatis
  • redis
  • mysql
  • druid

依賴

    <dependencies>
        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

配置文件

spring:
    thymeleaf:
        cache: false
    freemarker:
        cache: false
    groovy:
        template.cache: false
    # 數(shù)據(jù)源
    datasource:
        # 數(shù)據(jù)庫的URL腋腮、帳號(hào)雀彼、密碼壤蚜、驅(qū)動(dòng)
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
        # 使用druid連接池
        type: com.alibaba.druid.pool.DruidDataSource
        # druid連接池的配置信息
        initialSize: 5
        # 最小連接數(shù)量
        minIdle: 5
        # 最大連接數(shù)量
        maxActive: 20
        # 獲取連接等待超時(shí)的時(shí)間
        maxWait: 60000
        # 間隔多久進(jìn)行一次檢測(cè)(需要關(guān)閉的空閑連接)
        timeBetweenEvictionRunsMillis: 30000
        # 連接在池中最小生存的時(shí)間
        minEvictableIdleTimeMillis: 30000
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false

# MyBatis 配置
mybatis:
    # mybatis的mapper.xml文件的路徑
    mapper-locations: classpath:mapper/*.xml
    # mybatis的model所在的包
    type-aliases-package: com.jiataoyuan.demo.springboot.model
    # mybatis的model所在的包

編寫程序

結(jié)構(gòu)

db_mybatis_1.png

model

數(shù)據(jù)庫字段對(duì)應(yīng),id自增即可徊哑,自己定義uuid也可以

package com.jiataoyuan.demo.springboot.model;

/**
 * @author TaoYuan
 * @version V1.0.0
 * @date 2018/4/17 0017
 * @description description
 */
public class User {
    private long id;
    private String name;
    private int age;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

DAO

package com.jiataoyuan.demo.springboot.dao;

import com.jiataoyuan.demo.springboot.model.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author TaoYuan
 * @version V1.0.0
 * @date 2018/4/17 0017
 * @description description
 *
 */

/*
 * @Repository 也可以不用添加袜刷,但是不添加之后使用@Autowired注入接口是IDEA會(huì)提示紅線,但是不影響編譯運(yùn)行
 * @Mapper 配置自動(dòng)掃描
 */
@Mapper
public interface UserDao {
    // xml方式
    User findByName(String name);

    // 注解方式
    @Select("select * from user")
    List<User> findAll();

    // 添加用戶
    int insertUser(@Param("name")String name, @Param("age")Integer age);


}

Service

package com.jiataoyuan.demo.springboot.service;

import com.jiataoyuan.demo.springboot.dao.UserDao;
import com.jiataoyuan.demo.springboot.model.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author TaoYuan
 * @version V1.0.0
 * @date 2018/4/17 0017
 * @description description
 */
@Service
public class UserService {

    @Resource
    private UserDao userDao;

    public User findByName(String name){
        return userDao.findByName(name);
    }

    public List<User> findAll(){
        return userDao.findAll();
    }

    public int insertUser(@Param("name")String name, @Param("age")Integer age){
        return userDao.insertUser(name, age);
    }

}

Mapper

<?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">
<!--命名空間莺丑,指定對(duì)應(yīng)的Dao-->
<mapper namespace="com.jiataoyuan.demo.springboot.dao.UserDao">

    <!--使用resultType指定輸出類型-->
    <select id="findByName" resultType="User">
        SELECT * FROM user WHERE name = #{NAME }
    </select>

    <!-- insert user -->
    <insert id="insertUser" parameterType="com.jiataoyuan.demo.springboot.model.User">
        insert into user ( name, age) values (#{name,jdbcType=VARCHAR}, #{age, jdbcType=INTEGER})
    </insert>
</mapper>

業(yè)務(wù)邏輯主要就是這3個(gè)著蟹,接下來需要寫接口調(diào)用即可

Controller

package com.jiataoyuan.demo.springboot.controller;

import com.jiataoyuan.demo.springboot.model.User;
import com.jiataoyuan.demo.springboot.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author TaoYuan
 * @version V1.0.0
 * @date 2018/4/16 0016
 * @description description
 */
@RestController
@RequestMapping("/db")
public class DBController {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private UserService userService;

    @GetMapping()
    public String Main(){
        return "Welcome to DB Page!";
    }

    @GetMapping("/find/{name}")
    public User findByName(@PathVariable String name){
        return userService.findByName(name);
    }

    @GetMapping("/findall")
    public List<User> findAll(){
        return userService.findAll();
    }

    @GetMapping("/insert/{name}/{age}")
    public int insert(@PathVariable String name, @PathVariable Integer age){
        logger.warn("name =="+ name);
        logger.warn("age =="+ age);

        return userService.insertUser(name, age);
    }





}

測(cè)試

db_mybatis_3.png
db_mybatis_2.png

接下來準(zhǔn)備redis

MyBatis生成插件

<!-- mybatis 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.34</version>
        </dependency>
        <dependency>
            <groupId>com.xxg</groupId>
            <artifactId>mbg-limit-plugin</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <configuration>
        <overwrite>true</overwrite>
    </configuration>
</plugin>

build上面加上這個(gè),不然找不到mbg-limit-plugin

<pluginRepositories>
    <pluginRepository>
        <id>xxg-repository</id>
        <url>http://repo.maven.xxgblog.com/</url>
    </pluginRepository>
</pluginRepositories>

這個(gè)文件放在resources下并進(jì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">
<!-- mybatis生成配置 -->
<!-- 最后一行table元素中修改自己的要生成的表名及實(shí)體名稱 -->
<!--用法: 選擇pom.xml文件,擊右鍵先擇Run AS——Maven Build… ——在Goals框中輸入:mybatis-generator:generate——Run就好了,在工程上刷新-->

<generatorConfiguration>
  <context id="call" targetRuntime="MyBatis3" defaultModelType="hierarchical">

    <plugin type="com.xxg.mybatis.plugins.MySQLLimitPlugin"></plugin>
    <!-- 數(shù)據(jù)庫連接信息 -->
    <!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://172.16.127.201:3306/kaikeba?useUnicode=true&amp;characterEncoding=utf-8"
        userId="test"
        password="Meihao100@bfbd">
    </jdbcConnection> -->

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

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/test"
        userId="root"
        password="123456">
    </jdbcConnection>

    <!-- model實(shí)體類 -->
     <javaModelGenerator targetPackage="com.jiataoyuan.demo.springboot.model" targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <!-- sql xml -->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <!-- dao -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.jiataoyuan.demo.springboot.dao" targetProject="src/main/java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- 表名, 生成的實(shí)體名 -->

    <table tableName="user" domainObjectName="User"
           enableDeleteByExample="false" enableDeleteByPrimaryKey="false">
      <!--<columnOverride column="operate_next_flag" javaType="int"/>-->
      <!--<columnOverride column="is_delete" javaType="int"/>-->
    </table>

</context>
</generatorConfiguration>


  • 注釋部分幾乎不用管
  • 數(shù)據(jù)庫地址改成自己的
  • model實(shí)體類改成自己的model包名
  • sql xml 指定生成的Mapper.xml
  • dao改成自己的dao包名
  • 表名改成需要生成的model bean梢莽,可以設(shè)置字段類型等萧豆,多個(gè)表則建立多個(gè)table標(biāo)簽
  • 如果已經(jīng)有mapper.xml了,把之前的名字改了昏名,否則會(huì)覆寫

然后打開maven project進(jìn)行生成操作

db_mybatis_4.png

自己寫雖然麻煩涮雷,但是定制化程度高,自動(dòng)生成簡(jiǎn)單轻局,也可以改洪鸭,其實(shí)也并不存在太多的定制化,生成后也可以自己改仑扑,總之還是看自己的習(xí)慣吧览爵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镇饮,隨后出現(xiàn)的幾起案子蜓竹,更是在濱河造成了極大的恐慌,老刑警劉巖储藐,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俱济,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钙勃,警方通過查閱死者的電腦和手機(jī)姨蝴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肺缕,“玉大人,你說我怎么就攤上這事授帕⊥荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵跛十,是天一觀的道長(zhǎng)彤路。 經(jīng)常有香客問我,道長(zhǎng)芥映,這世上最難降的妖魔是什么洲尊? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任远豺,我火速辦了婚禮,結(jié)果婚禮上坞嘀,老公的妹妹穿的比我還像新娘躯护。我一直安慰自己,他們只是感情好丽涩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布棺滞。 她就那樣靜靜地躺著,像睡著了一般矢渊。 火紅的嫁衣襯著肌膚如雪继准。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天矮男,我揣著相機(jī)與錄音移必,去河邊找鬼。 笑死毡鉴,一個(gè)胖子當(dāng)著我的面吹牛崔泵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眨补,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼管削,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了撑螺?” 一聲冷哼從身側(cè)響起含思,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甘晤,沒想到半個(gè)月后含潘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡线婚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年遏弱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塞弊。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漱逸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出游沿,到底是詐尸還是另有隱情饰抒,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布诀黍,位于F島的核電站袋坑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏眯勾。R本人自食惡果不足惜枣宫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一婆誓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧也颤,春花似錦洋幻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至故觅,卻和暖如春厂庇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背输吏。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工权旷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贯溅。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓拄氯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親它浅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子译柏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • MyBatis通用Mapper3介紹 通用Mapper都可以極大的方便開發(fā)人員〗慊簦可以隨意的按照自己的需要選擇通用方...
    郭少華閱讀 2,240評(píng)論 0 3
  • 原文:君子宜凈試?yán)溲勰髡郏魑疠p動(dòng)剛腸胯府。 譯文:一個(gè)有才學(xué)品徳的君子,不論對(duì)于任何事物恨胚,都要保持冷靜態(tài)度去細(xì)觀察骂因,絕對(duì)...
    取個(gè)名字真難啊007閱讀 460評(píng)論 0 0
  • 健身第四天 再加做了平板支撐 40秒*6 弓步拉升肌肉 15*2*4 然后到DP那里練了深蹲,比較輕松的那種 30...
    里由米恩閱讀 224評(píng)論 0 1
  • 很多人在自己經(jīng)做出錯(cuò)誤的行為選擇后覺得自己進(jìn)步了赃泡,但在還沒有遇到第二次艱難考驗(yàn)和度量并形成客觀標(biāo)準(zhǔn)的結(jié)果時(shí)寒波,自詡成...
    陳俊洋r閱讀 172評(píng)論 0 0