日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MyBatis常规CURD详解及拓展~

發布時間:2023/11/28 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis常规CURD详解及拓展~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. insert(增)
  • 2. delete(刪)
  • 3. update(改)
  • 4. select(查)
  • SQL優化:Map傳參
    • 示例:插入一個用戶
    • map傳參優點
    • 各種傳參對比
  • 補充:模糊查詢

本文的實驗環境基于上篇博客 第一個MyBatis程序

Mapper.xml配置文件

  • 配置文件中namespace中的名稱為對應Mapper接口的完整包名,必須一致!
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper"><!--SQL語句-->
</mapper>

注意:增刪改需要提交事務

1. insert(增)

  • insert – 映射插入語句
  • insert語句兩個常見屬性,更多屬性查看中文文檔
    • id:對應namespace中的方法名
    • parameterType:參數類型

步驟

  1. 編寫Mapper接口,在UserMapper中添加插入一個用戶的方法

    返回值為受影響的行數,所以為int類型

//insert一個用戶
int addUser(User user);
  1. 編寫Mapper.xml對應配置文件,在UserMapper.xml中添加insert語句
<insert id="addUser" parameterType="pojo.User">insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
  1. 測試類UserMapperTest中添加對應的測試方法進行測試
//需要提交事務
@Test
public void addUser() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.addUser(new User(4, "zyx", "111111"));//提交事務sqlSession.commit();//關閉sqlSessionsqlSession.close();
}

2. delete(刪)

  • delete – 映射刪除語句
  • delete語句兩個常見屬性,更多屬性查看中文文檔
    • id:對應namespace中的方法名
    • parameterType:參數類型

步驟

  1. 編寫Mapper接口,在UserMapper中添加刪除一個用戶的方法

    返回值為受影響的行數,所以為int類型

//刪除一個用戶
int deleteUser(int id);
  1. 編寫Mapper.xml對應配置文件,在UserMapper.xml中添加delete語句
<delete id="deleteUser" parameterType="int">delete from mybatis.user where id=#{id};
</delete>
  1. 測試類UserMapperTest中添加對應的測試方法進行測試
//需要提交事務
@Test
public void addUser() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.deleteUser(4);//提交事務sqlSession.commit();//關閉sqlSessionsqlSession.close();
}

3. update(改)

  • update – 映射更新語句
  • update語句兩個常見屬性,更多屬性查看中文文檔
    • id:對應namespace中的方法名
    • parameterType:參數類型

步驟

  1. 編寫Mapper接口,在UserMapper中添加刪除一個修改用戶信息的方法

    返回值為受影響的行數,所以為int類型

//修改用戶
int updateUser(User user);
  1. 編寫Mapper.xml對應配置文件,在UserMapper.xml中添加update語句
<update id="updateUser" parameterType="pojo.User">update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id} ;
</update>
  1. 測試類UserMapperTest中添加對應的測試方法進行測試
//需要提交事務
@Test
public void addUser() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.updateUser(new User(4, "zyx", "222222"));//提交事務sqlSession.commit();//關閉sqlSessionsqlSession.close();
}

4. select(查)

  • select – 映射查詢語句
  • select語句有很多屬性可以詳細配置每一條SQL語句,這里是三個常見屬性,更多屬性查看中文文檔
    • id:對應namespace中的方法名
    • parameterType:參數類型
    • resultType:SQL語句執行的返回值

步驟

  1. 編寫Mapper接口,在UserMapper中添加刪除一個根據ID查詢用戶的方法

    返回值

//根據ID查詢用戶
User getUserByID(int id);
  1. 編寫Mapper.xml對應配置文件,在UserMapper.xml中添加select語句
<select id="getUserByID" parameterType="int" resultType="pojo.User">select * from mybatis.user where id= #{id};
</select>
  1. 測試類UserMapperTest中添加對應的測試方法進行測試
@Test
public void getUserByID() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserByID(1);System.out.println(user);//關閉sqlSessionsqlSession.close();
}

SQL優化:Map傳參

假設,我們的實體類或者數據庫中的表,字段或者參數過多,應該考慮使用Map

示例:插入一個用戶

1、在接口方法中,參數直接傳遞Map;

//增加一個用戶
int addUser2(Map<String, Object> map);

2、編寫sql語句的時候,需要傳遞參數類型,參數類型為map

<insert id="addUser2" parameterType="Map">insert into mybatis.user(id,name,pwd) values (#{userid},#{username},#{userpwd});
</insert>

3、編寫測試方法:在使用方法的時候,Map的 key 為 sql中取的值即可,沒有順序要求!

@Test
public void addUser2() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("userid",5);map.put("username","hello");map.put("userpwd",333333);mapper.addUser2(map);//提交事務sqlSession.commit();//關閉sqlSessionsqlSession.close();
}

map傳參優點

對比上述方法

  • 在編寫sql語句的時候,參數名(map的key)可以任意,只要一一對應即可,不同于通過User對象傳參,參數名必須于字段名相同
id-->userid
name-->username
pwd-->userpwd

假設只需要修改一個密碼,通過一整個對象傳參必須new出一整個對象,其他屬性都必須實例化出來,而使用map傳參的時候,只需要傳一個密碼即可;

  • 所以,當我們的實體類或者數據庫中的表,字段或者參數過多時,建議使用map傳參,可以針對單一字段,而不是以整體為單位

各種傳參對比

  • Map傳遞參數,直接在sql中取出key即可 parameterType="Map"
  • 對象傳遞參數,直接在sql中取對象的屬性即可 parameterType="Object"
  • 只有一個基本類型參數的情況下,直接在sql中取到 parameterType="int"(一個參數可以省略parameterType)

補充:模糊查詢

模糊查詢的實現有兩種方法,我們以一個示例進行講解~

首先在接口中添加對應方法,這里進行name的模糊查詢

//模糊查詢
List<User> getUserLike(String value);

第1種:在Java代碼中添加sql通配符。

<select id="getUserLike" resultType="pojo.User">select * from mybatis.user where name like #{value}
</select>
@Testpublic void getUserLike() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserLike("%z%");//添加sql通配符for (User user : userList) {System.out.println(user);}//關閉sqlSessionsqlSession.close();}

第2種:在sql語句中拼接通配符,可能會引起sql注入

<select id="getUserLike" resultType="pojo.User">select * from mybatis.user where name like "%"#{value}"%"
</select>
@Testpublic void getUserLike() {//獲取sqlSession對象SqlSession sqlSession = MyBatisUtils.getSqlSession();//執行SQLUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserLike("z");for (User user : userList) {System.out.println(user);}//關閉sqlSessionsqlSession.close();}

總結

  • 對于模糊查詢的兩種方式,建議使用第一種方式,第二種方式存在sql注入的問題

  • 為了防止sql注入,所以參數盡量寫死,讓用戶傳入的是一個正確的參數


總結

以上是生活随笔為你收集整理的MyBatis常规CURD详解及拓展~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。