spring-boot 從零開始-04

Spring-boot配置Mybatis

這一章僅僅是為了接入Mybatis匕荸,無需深究代碼是否能跑起來车摄,跑不起來的原因有很多,可能是版本問題奏寨,依賴包直接的版本差異性蚤告,此外這里僅僅作為演示,在常規(guī)的開發(fā)中一般寫在XML文件中服爷,而不用注解的方式杜恰,這里僅需理解。

1.新建一個(gè)數(shù)據(jù)庫仍源,創(chuàng)建一張數(shù)據(jù)表
2.新建一個(gè)項(xiàng)目
3.添加依賴包到工程里面
4.添加application.properties
5.編寫實(shí)體類
6.編寫Mapper接口
7.編寫service層
8.配置PageHelper
9.編寫返回?cái)?shù)據(jù)格式
10.編寫Controller層
11.運(yùn)行代碼

1.新建一個(gè)數(shù)據(jù)庫心褐,創(chuàng)建一張數(shù)據(jù)表

1.Mac平臺下直接下載MySQL,直接安裝即可笼踩;
2.安裝Navicat for MySQL逗爹,連接數(shù)據(jù)庫,然后創(chuàng)建表格,可視化界面

image.png

image.png

注意:自己做測試可以只創(chuàng)建兩個(gè)字段掘而,id和name挟冠,一切從簡到繁

2.新建一個(gè)項(xiàng)目

1.新建一個(gè)Maven Project,與之前的項(xiàng)目無異

3.添加依賴包到工程里面

打開pom.xml文件袍睡,配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.avalanching</groupId>
    <artifactId>com.avalanching.spring.Mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>com.avalanching.spring.Mybatis</name>
    <url>http://maven.apache.org</url>

    <!-- 配置parent maven 自動(dòng)選擇最合適的版本 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 指定一下jdk的版本 知染,這里我們使用jdk 1.8 ,默認(rèn)是1.6 -->
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!-- spring-boot-starter-web: MVC,AOP的依賴包.... -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- <version></version> 由于我們在上面指定了 parent(spring boot) -->
        </dependency>

        <!-- 數(shù)據(jù)庫mysql依賴包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

        <!-- mybatis依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- mybatis分頁攔截 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.8</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>


4.添加application.properties

創(chuàng)建src/main/resource文件

image.png

創(chuàng)建File,并命名為application.properties斑胜,文件內(nèi)如下

########################################################
###datasource - mySql配置數(shù)據(jù)庫連接
########################################################
spring.datasource.url=jdbc:mysql://localhost:3306/avalanching_crm?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

5.編寫實(shí)體類

創(chuàng)建一個(gè)User實(shí)體類控淡,這里依照創(chuàng)建的表的名稱命名,為了避免太多因?yàn)槊麊栴}出現(xiàn)的問題止潘,請用小寫掺炭,或者駝峰的方式去創(chuàng)建,切勿含有下劃線等字符凭戴。

// User.java:
package com.avalanching.com.avalanching.spring.Mybatis.bean;

public class User {
    
    private Integer id;
    
    private String username;
    
    private String password;
    
    private String moblie;
    
    private String nickname;
    
    private String address;
    
    private String avatar;
    
    private double assets;
    
    private int contactsid;
    
    private String car;
    
    private String wechat;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getMoblie() {
        return moblie;
    }

    public void setMoblie(String moblie) {
        this.moblie = moblie;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public double getAssets() {
        return assets;
    }

    public void setAssets(double assets) {
        this.assets = assets;
    }

    public int getContactsid() {
        return contactsid;
    }

    public void setContactsid(int contactsid) {
        this.contactsid = contactsid;
    }

    public String getCar() {
        return car;
    }

    public void setCar(String car) {
        this.car = car;
    }

    public String getWechat() {
        return wechat;
    }

    public void setWechat(String wechat) {
        this.wechat = wechat;
    }
}


6.編寫Mapper接口

// Mapper.java這是一個(gè)接口涧狮,應(yīng)該創(chuàng)建Interface
package com.avalanching.com.avalanching.spring.Mybatis.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import com.avalanching.com.avalanching.spring.Mybatis.bean.User;

public interface UserMapper  {
    
    /**
     * @Select標(biāo)識為一個(gè)查詢方法,后面寫入sql語句
     * #{username}是一個(gè)占位符號
     **/
    @Select("select * from user where username = #{username}")
    public User queryByUsername(String username);
    
    @Select("select * from user")
    public List<User> queryAllUser();
    
    @Select("select * from User where id = #{id}") 
    public User queryUserById(Integer id);
    
    @Select("select username from User where id = #{id}") 
    public String queryUsernameById(Integer id);
    
    @Select("select * from User where username = #{username} AND password = #{password}")
    public User queryUserByNamePassword(String name, String password);
    
    /**
     * @Insert標(biāo)識為一個(gè)插入方法么夫,后面寫入sql語句
     * @Options是選項(xiàng)配置者冤,這里配置主鍵,并規(guī)定id的是否自增
     **/
    @Insert("Insert into User(username) values(#{username})")
    @Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")
    public void save(User user);
    
}

7.編寫service層

// UserService.java 
package com.avalanching.com.avalanching.spring.Mybatis.sevice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.avalanching.com.avalanching.spring.Mybatis.bean.User;
import com.avalanching.com.avalanching.spring.Mybatis.mapper.UserMapper;

@Service
public class UserService {
    
    @Autowired
    private UserMapper mapper;
    
    public List<User> queryAllUsers() {
        return mapper.queryAllUser();
    }
    
    public User queryUserByName(String username) {
        return mapper.queryByUsername(username);
    }
    
    public User queryUserById(Integer id) {
        
        return mapper.queryUserById(id);
    }
    
    @Transactional
    public void insertUser(User user) {
        mapper.save(user);
    }
}

8.配置PageHelper

// MybatisPageHelperConfig.java
package com.avalanching.com.avalanching.spring.Mybatis.config;

import java.util.Properties;

import org.springframework.context.annotation.Bean;

import com.github.pagehelper.PageHelper;

public class MybatisPageHelperConfig {
    
    @Bean
    public PageHelper pageHelper() {
        
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        
        p.setProperty("offsetAsPageNum", "turn");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

9.編寫返回?cái)?shù)據(jù)格式

// BasicsModel.java 
package com.avalanching.com.avalanching.spring.Mybatis.json;
/**
 * 這里<T>是范型定義魏割,如果不想定義T譬嚣,可以使用Object類型
 */
public class BasicsModel<T> {

    private Integer ret;
    private T data;
    private String message;
    public Integer getRet() {
        return ret;
    }
    public void setRet(Integer ret) {
        this.ret = ret;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
}

10.編寫Controller層

// UserController.java
package com.avalanching.com.avalanching.spring.Mybatis.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.avalanching.com.avalanching.spring.Mybatis.bean.User;
import com.avalanching.com.avalanching.spring.Mybatis.json.BasicsModel;
import com.avalanching.com.avalanching.spring.Mybatis.sevice.UserService;
import com.github.pagehelper.PageHelper;

@RestController
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @RequestMapping("/queryUserByName")
    public BasicsModel<User> getUserByUsername(String name) {
        
        User user = userService.queryUserByName(name);
        
        BasicsModel<User> model = new BasicsModel<User>();
        model.setData(user);
        model.setRet(0);
        model.setMessage("success");
        
        return model;
    }
    
    @RequestMapping("/queryUserById")
    public BasicsModel<User> queryUserById(Integer id) {
        
        User user = userService.queryUserById(id);
        BasicsModel<User> model = new BasicsModel<User>();
        model.setData(user);
        
        if (user == null) {
            model.setRet(101);
            model.setMessage("not found object");
        } else {
            model.setRet(0);
            model.setMessage("success");
        }
    
        return model;
    }
    
    @RequestMapping("/allUsers")
    public BasicsModel<List<User>> getUserList(Integer pagenum, Integer pagesize) {
        
        // 設(shè)置分頁
        System.out.println("pagenum: " + pagenum + "pagesize: " + pagesize);
        PageHelper.startPage(pagenum, pagesize);
        
        List<User> list = userService.queryAllUsers();
        BasicsModel<List<User>> model = new BasicsModel<List<User>>();
        model.setData(list);
        model.setRet(0);
        model.setMessage("success");
        
        return model;
    }

    @RequestMapping("/save") 
    public BasicsModel<User> save(String username, String password, String moblie) {
        User user = new User();
        user.setPassword(password);
        user.setUsername(username);
        user.setMoblie(moblie);
        userService.insertUser(user);
        BasicsModel<User> model = new BasicsModel<User>();
        model.setData(user);
        model.setRet(0);
        model.setMessage("success");
        return model;
    }
}

11.運(yùn)行代碼

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钢颂,一起剝皮案震驚了整個(gè)濱河市钞它,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殊鞭,老刑警劉巖遭垛,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異操灿,居然都是意外死亡锯仪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門趾盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庶喜,“玉大人,你說我怎么就攤上這事救鲤【每撸” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵本缠,是天一觀的道長斥扛。 經(jīng)常有香客問我,道長丹锹,這世上最難降的妖魔是什么稀颁? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任芬失,我火速辦了婚禮,結(jié)果婚禮上匾灶,老公的妹妹穿的比我還像新娘棱烂。我一直安慰自己,他們只是感情好粘昨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布垢啼。 她就那樣靜靜地躺著,像睡著了一般张肾。 火紅的嫁衣襯著肌膚如雪芭析。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天吞瞪,我揣著相機(jī)與錄音馁启,去河邊找鬼。 笑死芍秆,一個(gè)胖子當(dāng)著我的面吹牛惯疙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妖啥,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼霉颠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荆虱?” 一聲冷哼從身側(cè)響起蒿偎,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怀读,沒想到半個(gè)月后诉位,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菜枷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年苍糠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啤誊。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岳瞭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚊锹,到底是詐尸還是另有隱情瞳筏,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布枫耳,位于F島的核電站乏矾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钻心,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一凄硼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捷沸,春花似錦摊沉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苍柏,卻和暖如春尼斧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背试吁。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工棺棵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熄捍。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓烛恤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親余耽。 傳聞我的和親對象是個(gè)殘疾皇子缚柏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

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