mapper介面中常見的增刪改查
阿新 • • 發佈:2022-12-05
前言
相信大家在使用mybatis寫mapper介面的時候,最常用且簡單的方法就是增刪改查了。我也是剛開始做專案,在本篇文章中,我將根據自己在vhr微人力專案中的mapper介面方法為例項,記錄一下介面中常用的增刪改查方法
1.insert
1.1 insert的使用
1.1.1 介面方法
int insert(Nation record);
1.1.2 SQL實現
<insert id="insert" parameterType="com.ku.vhr.model.Nation"> insert into vhr_project.nation (id, name)values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}) </insert>
- SQL語句中的插入操作,我們使用<insert></insert>,id的名稱必須於mapper中的插入方法名保持一致,不然會報錯;
- parameterType是指你傳入的引數的引數型別,在mapper介面中的insert方法中我傳入的是Nation實體類物件,因此我的插入引數型別為我定義的Nation類
- 在資料庫中插入資料語句格式:insert into `資料庫名.表名` (`欄位名1`, `欄位名2`, ...) values (#{屬性名1,jdbcType="", #{屬性名2,jdbcType=""}, ...})
- 其中jdbcType的作用是防止在插入過程中因屬性名為空而報錯,在編寫SQL語句的時候最好加上
- jdbcType的常用型別
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN booleanjdbcType常用型別TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array DISTINCT mapping of underlying type STRUCT Struct REF Ref DATALINK java.net.URL[color=red][/color]
1.2 insert測試
1.2.1 測試程式碼
@Test public void insert(){ // System.out.println(nationMapper); Nation nation = new Nation(); nation.setId(55); nation.setName("珞巴族"); int rows = nationMapper.insert(nation); System.out.println(rows); }insertTest
1.2.2 測試結果
2.insertSelective
2.1 insertSelective的使用
2.1.1 介面方法
int insertSelective(Nation record);
2.1.2 SQL實現
<insert id="insertSelective" parameterType="com.ku.vhr.model.Nation"> <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null"> id, </if> <if test="name != null"> name </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> #{id,jdbcType=INTEGER}, </if> <if test="name != null"> #{name,jdbcType=VARCHAR} </if> </trim> </insert>insertSelective
- 在insertSelective方法中,是不允許插入的內容為空的,這是insertSelective方法與insert方法的本質區別
- 在insertSelective方法中,標籤<trim></trim>可以用於增刪改以及條件判斷,在該方法中的作用就是判斷資料庫欄位以及屬性是否為空,如果為空,插入報錯
- prefix 是指在欄位前面新增什麼,suffix是指在欄位插入之後加上什麼,suffixOverrides是指最後去掉什麼
- SQL插入語句格式為insert into `資料庫名.表名` (`欄位名1`, `欄位名2`, ...) values (#{屬性名1,jdbcType="", #{屬性名2,jdbcType=""}, ...}),
- 從into開始就是用<trim></trim>標籤來執行,所以第一個<trim></trim>標籤prefix指"(",suffix指最後一個欄位之後的")",suffixOverrides指去掉最後的","
- 第二個<trim></trim>標籤prefix指"values (",suffix指最後一個欄位之後的")",suffixOverrides指去掉最後的","
- <if test= "t條件判斷"></if>標籤,主要是用於條件判斷;主要注意的是,條件中的變數必須是實體類的屬性
2.2 insertSelective測試
2.2.1 測試程式碼
@Test public void insertSelective(){ Nation nation = new Nation(); nation.setId(56); nation.setName("基諾族"); int rows = nationMapper.insertSelective(nation); System.out.println(rows); }insertSelectiveTest
2.2.2 測試結果
3.deleteById
3.1 deleteById的使用
3.1.1 介面方法
int deleteById(Integer id);
3.1.2 SQL實現
<delete id="deleteById" paramentType="java.lang.Integer"> delete from vhr_project.nation where id = #{id,jdbcType=Integer} </delete>
- 根據id刪除的SQL語句格式為:delete from `資料名.表名` where id = #{id,jdbcType=Integer}
3.2 deleteById測試
3.2.1 測試方法
@Test public void deleteById(){ int rows = nationMapper.deleteById(57); System.out.println(rows); }deleteByIdTest
4.updateById
4.1 updateById的使用
4.1.1 介面方法
int updateById(Nation record);
4.1.2 SQL實現
<update id="updateById" parameterType="com.ku.vhr.model.Nation"> update vhr_project.nation set name = #{name,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} </update>updateById
- 修改的SQL語句格式:update `資料庫名.表名` set `欄位1` = #{屬性1,jdbcType=""}, `欄位2` = #{屬性2,jdbcType=""},...
4.2 updateById測試
4.2.1 測試方法
@Test public void updateById(){ Nation nation = new Nation(); nation.setId(55); nation.setName("什麼族"); int rows = nationMapper.updateById(nation); System.out.println(rows); }updateByIdTest
4.2.2 測試結果
5.updateByIdSelective
5.1 updateByIdSelective的使用
5.1.1 介面方法
int updateByIdSelective(Nation record);
5.1.2 SQL實現
<update id="updateByIdSelective" parameterType="com.ku.vhr.model.Nation"> update vhr_project.nation <set> <if test="name != null"> name = #{name,jdbcType=VARCHAR} </if> </set> where id = #{id,jdbcType=INTEGER} </update>updateByIdSelective
- 在updateByIdSelective的SQL中使用<set></set>類似於<trim></trim>用於寫條件判斷,但是<set></set>只能用於修改SQL
5.2 updateByIdSelective測試
5.2.1 測試方法
@Test public void updateByIdSelective(){ Nation nation = new Nation(); nation.setId(55); nation.setName("珞巴族"); int rows = nationMapper.updateById(nation); System.out.println(rows); }updateByIdSelectiveTest
5.2.2 測試結果
6.selectById
6.1 selectById的使用
6.1.1 介面方法
Nation selectById();
6.1.2 SQL實現
<select> select <include ref = "Base_Column_List"/> from `vhr_project.nation` where id = #{id,jdbcType=INTEGER} </select>selectById
- 根據id查詢資料的SQL語句格式:select * from `資料庫名.表名` where `欄位主鍵` = #{屬性id,jdbcType=INTEGER}
- <include=ref="別名"/>是與<sql id = "別名">欄位1, 欄位2, 欄位3, 欄位4, 欄位5</sql>一起聯用的,
- <sql></sql>是用來提取重用的SQL片段,以此定義,多次使用,非常方便
- sql id = "別名"></sql>中的id是<include ref=""/>中的ref的值
6.2 selectById測試
6.2.1 測試方法
@Test public void selectById(){ Nation nation = nationMapper.selectById(2); System.out.println(nation); }selectByIdTest
6.2.2 測試結果
7.getAll
7.1 getAll的使用
7.1.1 介面方法
List<Nation> getAllNations();
7.1.2 SQL實現
<select id="getAllNations" resultMap="BaseResultMap"> select * from vhr_project.nation </select>getAll
- 獲取各類的全部資訊SQL格式:select * from `資料庫名.表名`
7.2 getAll測試
7.2.1 測試方法
@Test public void getAllNations(){ List<Nation> allNations = nationMapper.getAllNations(); for (Nation nation : allNations) { System.out.println(nation); } }getAllTest
7.2.2 測試結果
8.參考連結
https://blog.csdn.net/jiankunking/article/details/52403300?ops_request_misc=&request_id=&biz_id=102&utm_term=SQL%E6%A0%87%E7%AD%BE%E6%98%AF%E7%94%A8%E6%9D%A5%E6%8A%BD%E5%8F%96%E5%8F%AF%E9%87%8D%E7%94%A8%E7%9A%84SQL%E7%89%87%E6%AE%B5%EF%BC%8C%E5%8D%95%E7%8B%AC%E5%AE%9A%E4%B9%89%EF%BC%8C%E6%96%B9%E4%BE%BF%E5%A4%9A%E6%AC%A1%E5%BA%94&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-52403300.142^v67^js_top,201^v4^add_ask,213^v2^t3_esquery_v2&spm=1018.2226.3001.4187 https://blog.csdn.net/good_good_xiu/article/details/122690774?ops_request_misc=&request_id=&biz_id=102&utm_term=prefix%EF%BC%9A%E6%8B%BC%E6%8E%A5%E5%90%8E%E7%BB%ADsql%E6%97%B6%E9%9C%80%E8%A6%81%E5%8A%A0%E4%B8%8A%E7%9A%84%E5%89%8D%E7%BC%80%20suffix%EF%BC%9A&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-122690774.142^v67^js_top,201^v4^add_ask,213^v2^t3_esquery_v2&spm=1018.2226.3001.4187