springboot 中使用 Mybatis 注解 配置 詳解

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

傳參方式
使用不同的傳參方式:

使用@Param
之前博文中的項目使用了這種簡單的傳參方式:

? ? @Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insert(@Param("name") String name, @Param("password") String password, @Param("phone") String phone);

理解: @Param中定義了name對應了sql中的#{name}, password 對應了sql中的#{password}, phone 對應了sql中的 #{phone}。

使用Map
通過Map對象來傳遞參數:? ?

@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(" +"#{name, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}, #{phone, jdbcType=VARCHAR})")int insertByMap(Map<String, Object> map);

對于Insert語句中需要的參數,我們只需要在map中填入同名的內容即可,具體如下面代碼所示:

Map<String, Object> map = new HashMap<>();map.put("name","王五");map.put("password","23423");map.put("phone", "13400000000");userMapper.insertByMap(map);

使用對象
如果我們使用普通的java對象作為查詢條件的參數:

@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insertByUser(User user);

只需要語句中的#{name}、#{age}就分別對應了User對象中的name和age屬性。

? ? User u = new User();u.setName("趙六");u.setPassword("12312312");u.setPhone("13888888888");userMapper.insertByUser(u);

增刪改查
MyBatis針對不同的數據庫操作分別提供了不同的注解來進行配置,在之前的示例中演示了@Insert,下面針對User表做一組最基本的增刪改查作為示例:? ?

@Select("SELECT * FROM T_USER WHERE PHONE = #{phone}")User findUserByPhone(@Param("phone") String phone);@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insertByUser(User user);@Update("UPDATE T_USER SET NAME = #{name}, PASSWORD = #{password} WHERE PHONE = #{phone}")void update(User user);@Delete("DELETE FROM T_USER WHERE ID = #{id}")void delete(Integer id);

進行測試:

package com.winterchen;import com.winterchen.domain.User;
import com.winterchen.mapper.UserMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisDemo2ApplicationTests {@Autowiredprivate UserMapper userMapper;@Test@Transactionalpublic void test3(){userMapper.insert("張三", "123456", "18600000000");User u = userMapper.findUserByPhone("18600000000");Assert.assertEquals("123456", u.getPassword());u.setName("趙六");u.setPassword("12312312");userMapper.update(u);u = userMapper.findUserByPhone("18600000000");Assert.assertEquals("12312312", u.getPassword());userMapper.delete(u.getId());u = userMapper.findUserByPhone("18600000000");Assert.assertEquals(null, u);}
}

注意:當使用@Transactional進行了事務管理,在單元測試結束之后會自動回滾,所以,測試跑完之后數據庫中沒有數據。所以只要測試通過了就沒有問題了。

返回結果綁定
對于增、刪、改操作相對變化較小。而對于“查”操作,我們往往需要進行多表關聯,匯總計算等操作,那么對于查詢的結果往往就不再是簡單的實體對象了,往往需要返回一個與數據庫實體不同的包裝類,那么對于這類情況,就可以通過@Results和@Result注解來進行綁定,具體如下:

? ? @Results({@Result(property = "name", column = "NAME"),@Result(property = "password", column = "PASSWORD"),@Result(property = "phone", column = "PHONE")})@Select("SELECT NAME, PASSWORD, PHONE FROM T_USER")List<User> findAll();

在上面代碼中,@Result中的property屬性對應User對象中的成員名,column對應SELECT出的字段名。在該配置中故意沒有查出id屬性,只對User對應中的name,password,phone對象做了映射配置,這樣可以通過下面的單元測試來驗證查出的id為null,而其他屬性不為null:

@Test@Transactionalpublic void test4(){userMapper.insert("張三", "123456", "18600000000");userMapper.insert("李四", "123456", "13500000000");List<User> list = userMapper.findAll();Assert.assertEquals(2, list.size());}


---------------------?

轉自:https://blog.csdn.net/winter_chen001/article/details/78623700?
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongodb數據庫的備份與恢復

先介紹下命令語法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服務器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;當然也可以指定端口號&#xff1a;127.0.0.1:10001 -d&#xff1a;需要備份的數據庫實例…

OpenCL 第6課:矩陣轉置

上一節我們寫了個一維向量相加的程序。這節我們來看一個44矩陣轉置程序。 4X4矩陣我們采用二維數組進行存儲&#xff0c;在程序設計上&#xff0c;我們讓轉置過程分4次轉置完成&#xff0c;就是一次轉一行。注意這里的OpenCL的工作維數是二維。&#xff08;當然用一維的方式也…

springboot 系列技術教程目錄

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、教程目錄地址&#xff1a; springboot系列技術教程目錄 二、教程內容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7課:旋轉變換(1)

旋轉是一個常用的處理功能。圖片中所有的點以某一個點為軸&#xff0c;順時或逆時方向旋轉N個角度。我們利用OpenCL就可以對圖片中所有的點進行并行轉換&#xff0c;大大提高效率。 上兩節中&#xff0c;我們編寫了CL文件來傳遞數組的地址&#xff0c;這一節中我們會多加入幾個…

WinForms多線程編程之搖獎程序

利用多線程模擬一個電腦搖獎程序&#xff0c;如圖所示。在點擊【滾動號碼】&#xff0c;啟動線程&#xff0c;對后臺的電話號碼進行循環顯示&#xff1b;點擊【開獎】按鈕&#xff0c;關閉線程&#xff0c;此時顯示在文本框中的電話號碼即為中獎號碼 using System;using System…

idea 版本控制忽略文件、文件夾設置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 setting 中&#xff1a; 或者底部的 設置 忽略某個文件 后面選擇框可以去選擇 忽略某個文件夾 后面選擇框可以去選擇 忽略某種文件 后面…

Windows Azure HandBook (1) IaaS相關技術

《Windows Azure Platform 系列文章目錄》 1.Microsoft Azure底層是否由System Center和Hyper-V構成? Microsoft Azure雖然支持Hyper-V的VHD直接上傳至Azure云端進行管理&#xff0c;但是Azure底層技術是微軟自己研發的、獨有的技術&#xff0c;且不對外提供。如果客戶想構建屬…

OpenCL 第8課:旋轉變換(2)

上兩節課都是對一個數組進行處理。這節我們來個有意思的。同樣是旋轉。但我們旋轉的對象是張&#xff08;&#xff12;&#xff15;&#xff16;*&#xff12;&#xff15;&#xff16;&#xff09;的圖片。圖片旋轉&#xff14;&#xff15;度&#xff0c;旋轉后大小還是&…

VUE: 當前頁面 引用自定義公用樣式 (:style=“樣式名“)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 在當前頁面&#xff0c;自行定義了幾個樣式&#xff0c;在不同地方引用。 2. 實現代碼。 樣式定義&#xff1a; data() {return {i…

免費的api接口

歡迎大家加群討論&#xff1a;地址&#xff1a;https://www.apiopen.top 為了方便各類開發者&#xff0c;現提供免費開放Api接口&#xff0c;所有接口均無使用限制&#xff0c;返回格式全是JSON&#xff0c;所以基本能滿足大家的開發需求&#xff0c;但請各位不要將這些Api接入…

養成這8個好習慣 開車會很安全的

第一&#xff0c;過路口時減速左右看——要養成過口子時&#xff0c;不管有沒有紅綠燈&#xff0c;也不管自己的行道是綠燈&#xff0c;都要左顧右盼&#xff08;同時要減速&#xff09;的習慣&#xff0c;觀察在橫道上的車輛情況&#xff0c;確認沒有車橫沖&#xff0c;才加速…

css background-attachment:fixed 固定背景、不隨內容一起滾動

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 兼容性&#xff1a;全兼容&#xff0c;只不過IE滾動時會有一點不流暢。 background-attachment 有 3 個選項&#xff1a;scroll / fix…

Javacript和AngularJS中的Promises

promise是Javascript異步編程很好的解決方案。對于一個異步方法&#xff0c;執行一個回調函數。比如頁面調用google地圖的api時就使用到了promise。 function success(position){var cords position.coords;console.log(coords.latitude coords.longitude); }function error(…

男人沉默的真實原因

英國社會學家馬克經過調查發現&#xff1a;男人每天的說話量&#xff0c;是女人的一半。但男人們也大多用于朋友圈中、工作中&#xff0c;而與愛人的聊天交流&#xff0c;每天可能不足15分鐘&#xff0c;用詞量不超過10%。 其實&#xff0c;男人有很多緘默的方法&#xff0c;每…

Visual Studio 使用說明文檔、VScode 使用手冊

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我只是記錄下地址&#xff0c;方便自已以后查看&#xff1a; Visual Studio 使用文檔 內容如&#xff1a;

JAVA File的創建及相對路徑絕對路徑

JAVA File的創建及相對路徑絕對路徑 轉載自 http://blog.sina.com.cn/s/blog_9386f17b0100w2vv.htmlFile f new File("D:/test/mytest.txt");//當執行這句話后在內存的棧空間存在一個f的應用&#xff0c;在堆空間里存在一個mytest.txt對象。注意 這個對象只含有文件…

腎有多好人就有多年輕 男女通用的補腎秘方

每天都堅持喝一碗&#xff0c;現在已經連續喝了三個多星期了&#xff0c;以前有好些白發的地方居然沒有復發&#xff0c;而且現在一根也沒有啊&#xff0c;我真的很開心。不僅白頭發不見了&#xff0c;而且皮膚變白皙和光滑了好多&#xff0c;氣色也比原來好了!好東西要大家分享…

Object.keys() Object.values()

Object.keys() //返回對象中各個鍵值對的鍵(key) Object.values() //返回對象中各個鍵值對的值(value) var obj { foo: "bar", baz: 42 };Object.keys(obj) // ["foo", "baz"]Object.values(obj) // ["ba…

vue 解決: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 問題描述 *!!vue-style-loader!css-loader?{“sourceMap”:true}!../../../../vue-loader/lib/style-compiler/index?{“vue”:true,…

計算機專業 程序員技術練級攻略(轉載)

程序員技術練級攻略轉載自: https://coolshell.cn/articles/4990.html 前言 你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序&#xff1f;走入職場后哪怕沒有什么經驗也可以把以下這些課外練習走一遍&#xff08;朋友的抱怨&#xff1a;學校課程總是從理論出發&#xff…