欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis深入分析數(shù)據(jù)庫(kù)交互與關(guān)系映射

 更新時(shí)間:2024年05月04日 09:32:36   作者:從零開(kāi)始的-CodeNinja之路  
這篇文章主要介紹了MyBatis中的數(shù)據(jù)庫(kù)交互與關(guān)系映射,MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,MyBatis避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集,需要的朋友可以參考下

前言

在應(yīng)用分層學(xué)習(xí)時(shí),我們了解到web應(yīng)用程序?般分為三層,即:Controller、Service、Dao.之前的案例中,請(qǐng)求流程如下:瀏覽器發(fā)起請(qǐng)求,先請(qǐng)求Controller,Controller接收到請(qǐng)求之后,調(diào)用Service進(jìn)行業(yè)務(wù)邏輯處理,Service再調(diào)用Dao,真實(shí)的數(shù)據(jù)從數(shù)據(jù)庫(kù)中是讀取.

什么是MyBatis

MyBatis是?款優(yōu)秀的持久層框架,用于簡(jiǎn)化JDBC的開(kāi)發(fā)。

在上面我們提到?個(gè)詞:持久層

持久層:指的就是持久化操作的層,通常指數(shù)據(jù)訪問(wèn)層(dao),是用來(lái)操作數(shù)據(jù)庫(kù)的.

簡(jiǎn)單來(lái)說(shuō):MyBatis是更簡(jiǎn)單完成程序和數(shù)據(jù)庫(kù)交互的框架,也就是更簡(jiǎn)單的操作和讀取數(shù)據(jù)庫(kù)工具

Mybatis操作數(shù)據(jù)庫(kù)的步驟:

  • 準(zhǔn)備工作(創(chuàng)建springboot工程、數(shù)據(jù)庫(kù)表準(zhǔn)備、實(shí)體類(lèi)
  • 引入Mybatis的相關(guān)依賴(lài),配置Mybatis(數(shù)據(jù)庫(kù)連接信息)
  • 編寫(xiě)SQL語(yǔ)句(注解/XML)
  • 測(cè)試

MyBatis準(zhǔn)備工作

(創(chuàng)建工程、數(shù)據(jù)庫(kù)表準(zhǔn)備、實(shí)體類(lèi))

創(chuàng)建springboot工程,并導(dǎo)入mybatis的起步依賴(lài)、mysql的驅(qū)動(dòng)包

Mybatis是?個(gè)持久層框架,具體的數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)操作還是在MySQL中操作的,所以需要添加MySQL驅(qū)動(dòng)

項(xiàng)目工程創(chuàng)建完成后,項(xiàng)目管理器會(huì)自動(dòng)在pom.xml?件中,導(dǎo)入Mybatis依賴(lài)和MySQL驅(qū)動(dòng)依賴(lài)

配置數(shù)據(jù)庫(kù)

Mybatis中要連接數(shù)據(jù)庫(kù),需要數(shù)據(jù)庫(kù)相關(guān)參數(shù)配置

  • MySQL驅(qū)動(dòng)類(lèi)
  • 登錄名
  • 密碼
  • 數(shù)據(jù)庫(kù)連接字符串

如果是application.yml?件,配置內(nèi)容如下:(一定要注意空格和對(duì)齊,沒(méi)對(duì)齊就報(bào)錯(cuò),直接進(jìn)行Copy即可,手寫(xiě)極其容易出錯(cuò))

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
    username: root
    password: 232122
    driver-class-name: com.mysql.cj.jdbc.Driver
  mvc:
    favicon:
      enable: false
  profiles:  
    active: dev

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

logging:
  file:
    name: logs/springboot.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
  level:
    com:
      example:
        demo: debug

如果是application.properties?件,配置內(nèi)容如下:

#驅(qū)動(dòng)類(lèi)名稱(chēng)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#數(shù)據(jù)庫(kù)連接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false

#連接數(shù)據(jù)庫(kù)的用戶(hù)名
spring.datasource.username=root

#連接數(shù)據(jù)庫(kù)的密碼
spring.datasource.password=root

編寫(xiě)SQL語(yǔ)句(注解/XML)

數(shù)據(jù)準(zhǔn)備

在自己的數(shù)據(jù)庫(kù)中,創(chuàng)建用戶(hù)表,并創(chuàng)建對(duì)應(yīng)的實(shí)體類(lèi)User

代碼如下:(直接進(jìn)行Copy即可,手寫(xiě)太過(guò)麻煩)

-- 創(chuàng)建數(shù)據(jù)庫(kù)
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使用數(shù)據(jù)數(shù)據(jù)
USE mybatis_test;
-- 創(chuàng)建表[用戶(hù)表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`password` VARCHAR ( 127 ) NOT NULL,
`age` TINYINT ( 4 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-? 0-默認(rèn)',
`phone` VARCHAR ( 15 ) DEFAULT NULL,
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
-- 添加用戶(hù)信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

創(chuàng)建對(duì)應(yīng)的實(shí)體類(lèi)UserInfo,實(shí)體類(lèi)的屬性名與表中的字段名??對(duì)應(yīng)

例如:數(shù)據(jù)庫(kù)的字段名是user_name,在idea中我們就要?jiǎng)?chuàng)建userName的變量來(lái)接收,前面我們已經(jīng)導(dǎo)入了駝峰自動(dòng)轉(zhuǎn)換,所以不必?fù)?dān)心在數(shù)據(jù)庫(kù)交互時(shí)的連接問(wèn)題

import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
	private Integer id;
	private String username;
	private String password;
	private Integer age;
	private Integer gender;
	private String phone;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
}

寫(xiě)持久層代碼

Mybatis的持久層接?規(guī)范?般都叫XxxMapper

@Mapper注解:表示是MyBatis中的Mapper接?

  • 程序運(yùn)行時(shí),框架會(huì)自動(dòng)生成接?的實(shí)現(xiàn)類(lèi)對(duì)象(代理對(duì)象),并給交Spring的IOC容器管理
  • @Select注解:代表的就是select查詢(xún),也就是注解對(duì)應(yīng)方法的具體實(shí)現(xiàn)內(nèi)容.

在上面的測(cè)試中,我們需要?jiǎng)?chuàng)建持久層接?UserInfoMapper

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserInfoMapper {
	//查詢(xún)所有用戶(hù)
	@Select("select username, `password`, age, gender, phone from userinfo")
	public List<UserInfo> queryAllUser();
}

上述代碼中我是使用了一個(gè)xml的方式(就是加注解)來(lái)操作數(shù)據(jù)庫(kù)的

測(cè)試

使用Idea自動(dòng)生成測(cè)試類(lèi)

在需要測(cè)試的Mapper接?中,右鍵->Generate->Test

選擇要測(cè)試的方法,點(diǎn)擊OK

書(shū)寫(xiě)測(cè)試代碼

import com.example.demo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest//注意,此處的SpringBootTest必須填上,它是為了引入前面所寫(xiě)代碼引入的注解
class UserInfoMapperTest {
	@Autowired
	private UserInfoMapper userInfoMapper;
	@Test
	void queryAllUser() {
		List<UserInfo> userInfoList = userInfoMapper.queryAllUser();
		System.out.println(userInfoList);
	}
}

總結(jié)

Mybatis操作數(shù)據(jù)庫(kù)的步驟:

  • 準(zhǔn)備工作(創(chuàng)建springboot工程、數(shù)據(jù)庫(kù)表準(zhǔn)備、實(shí)體類(lèi))
  • 引入Mybatis的相關(guān)依賴(lài),配置Mybatis(數(shù)據(jù)庫(kù)連接信息)
  • 編寫(xiě)SQL語(yǔ)句(注解/XML)
  • 測(cè)試

以上就是MyBatis深入分析數(shù)據(jù)庫(kù)交互與關(guān)系映射的詳細(xì)內(nèi)容,更多關(guān)于MyBatis數(shù)據(jù)庫(kù)交互的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中實(shí)現(xiàn)四則運(yùn)算代碼

    java中實(shí)現(xiàn)四則運(yùn)算代碼

    本文給大家分享了幾個(gè)java中實(shí)現(xiàn)四則運(yùn)算的代碼,有個(gè)人的也有網(wǎng)友的,代碼寫(xiě)的不是很好,難免會(huì)有BUG,忘發(fā)現(xiàn)BUG的親們能提醒我下,好讓我改進(jìn)
    2015-08-08
  • InterlliJ IDEA2020新建java web項(xiàng)目找不到Static Web的解決

    InterlliJ IDEA2020新建java web項(xiàng)目找不到Static Web的解決

    這篇文章主要介紹了InterlliJ IDEA2020新建java web項(xiàng)目找不到Static Web的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • spring@value注入配置文件值失敗的原因分析

    spring@value注入配置文件值失敗的原因分析

    這篇文章主要介紹了spring@value注入配置文件值失敗的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringCloud Gateway的基本入門(mén)和注意點(diǎn)詳解

    SpringCloud Gateway的基本入門(mén)和注意點(diǎn)詳解

    這篇文章主要介紹了SpringCloud Gateway的基本入門(mén)和注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Dom4j解析XML_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Dom4j解析XML_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Dom4j解析XML,dom4j是一個(gè)Java的XML API,類(lèi)似于jdom,用來(lái)讀寫(xiě)XML文件的,有興趣的可以了解一下
    2017-07-07
  • Java實(shí)現(xiàn)遞歸刪除菜單和目錄及目錄下所有文件

    Java實(shí)現(xiàn)遞歸刪除菜單和目錄及目錄下所有文件

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)遞歸刪除菜單和刪除目錄及目錄下所有文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-03-03
  • 深入JAVA對(duì)象深度克隆的詳解

    深入JAVA對(duì)象深度克隆的詳解

    本篇文章是對(duì)JAVA對(duì)象深度克隆進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 有關(guān)ServletConfig與ServletContext的訪問(wèn)

    有關(guān)ServletConfig與ServletContext的訪問(wèn)

    下面小編就為大家?guī)?lái)一篇有關(guān)ServletConfig與ServletContext的訪問(wèn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • java 面試題閏年判斷詳解及實(shí)例

    java 面試題閏年判斷詳解及實(shí)例

    這篇文章主要介紹了java面試題 閏年判斷的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java中replaceAll替換圓括號(hào)實(shí)例代碼

    java中replaceAll替換圓括號(hào)實(shí)例代碼

    正則表達(dá)式的保留字符主要有:圓括號(hào)、方括號(hào)、花括號(hào)、豎線、橫線、點(diǎn)號(hào)、加號(hào)、星號(hào)、反斜桿等等,下面這篇文章主要給大家介紹了關(guān)于java中replaceAll替換圓括號(hào)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10

最新評(píng)論