mybatis基礎03(介面中的多個引數處理)
情況一:利用了引數的下標
介面中的方法:
public interface UserMapper {
public List<User> getInfo();
public List<User> param1(String uname,String uphone);
}
對應的配置(UserMapper.xml)
<select id="param1" resultType="com.offcn.bean.User">
select * from user where uname=#{arg0} and uphone=#{arg1}
</select>
mybatisTest.java中的程式碼:
@Test
public void test2() {
try {
String resource = "mybatis-config.xml";
//將配置檔案 讀取成為一個輸入流物件
InputStream inputStream = Resources.getResourceAsStream(resource);
//通過一個輸入流物件和sqlSessionFactoryBuilder構建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//建立一個會話物件
SqlSession session = sqlSessionFactory.openSession();
//幫我們建立介面物件
//UserMapper mapper = MapperProxy型別的物件
UserMapper mapper = session.getMapper(UserMapper.class);
/*情況1:
當方法中出現多個引數的時候
*/
List<User> users = mapper.param1("a", "b");
} catch (IOException e) {
e.printStackTrace();
}
}
主要的只有一句:
/*情況1:
當方法中出現多個引數的時候
*/
List<User> users = mapper.param1("a", "b");
情況二:介面中多個引數處理:利用Map集合的key
介面中的方法:
public List<User> param2(Map<String,Object> map);
對應的配置(UserMapper.xml)
<select id="param2" resultType="com.offcn.bean.User" parameterType="java.util.Map">
select * from user where uname=#{key1} and uphone=#{key2}
</select>
mybatisTest.java中的程式碼:
/*情況2:
當方法中出現多個引數的時候:利用Map集合
*/
Map<String,Object> map = new HashMap<>();
map.put("key1","aferg");
map.put("key2","bsdfe");
List<User> users = mapper.param2(map);
情況三:利用傳入物件
介面方法:
public List<User> param3(User user);
對應的配置:(UserMapper.xml)
<select id="param3" resultType="com.offcn.bean.User" parameterType="com.offcn.bean.User">
select * from user where uname=#{uname} and uphone=#{uphone}
</select>
mybatisTest.java中的程式碼:
/*情況3:
當方法中出現多個引數的時候:利用傳入物件
*/
User user = new User();
user.setUname("呂叢林");
user.setUphone("12343");
List<User> users = mapper.param3(user);
情況四:利用註解
介面方法:
public List<User> param4(@Param("uname") String uname,@Param("uphone") String uphone);
對應配置:(UserMapper.xml)
<select id="param4" resultType="com.offcn.bean.User">
select * from user where uname=#{uname} and uphone=#{uphone}
</select>
mybatisTest.java中的測試程式碼:
mapper.param4("呂叢林","12343");
**
Mybatis中的模糊查詢
**
模糊查詢中使用mybatis提供兩個解析標記
1.#{ } :解析成我們的佔位符 —>preparedStatement
2.${ } :解析字串的拼接 —>Statement
模糊查詢第一種:1.#{}:佔位符
介面方法:
//模糊查詢
public List<User> getInfo1(String name);
對應配置:(UserMapper.xml)
<!--模糊查詢-->
<select id="getInfo1" resultType="com.offcn.bean.User">
select * from user where uname like "%"#{name}"%"
</select>
mybatisTest.java中的測試程式碼:
/*
* 模糊查詢:運用佔位符
* */
List<User> users = mapper.getInfo1("呂");
模糊查詢第二種:2.${ } :字串的拼接
介面方法:
//模糊查詢2
public List<User> getInfo2(@Param("name") String name);
對應配置:(UserMapper.xml)
<!--模糊查詢2-->
<select id="getInfo2" resultType="com.offcn.bean.User">
select * from user where uname like '%${name}%'
</select>
mybatisTest.java中的測試程式碼:
/*
* 模糊查詢2:字串拼接
* */
List<User> users = mapper.getInfo2("呂");
**
模糊查詢第三種(concat)推薦
**
介面方法:
//模糊查詢3
public List<User> getInfo3(String name);
對應配置:(UserMapper.xml)
<!--模糊查詢3-->
<select id="getInfo3" resultType="com.offcn.bean.User">
select * from user where uname like concat('%',concat(#{uname},'%'))
</select>
mybatisTest.java中的測試程式碼:
/*
* 模糊查詢3:字串拼接
* */
List<User> users = mapper.getInfo3("呂");
第四:模糊查詢中轉義字元應用:
介面方法:
//模糊查詢4
public List<User> getInfo4(String name);
對應配置:(UserMapper.xml)
<!--模糊查詢4-->
<select id="getInfo4" resultType="com.offcn.bean.User">
select * from user where uname like #{name}
</select>
mybatisTest.java中的測試程式碼:
/*
* 模糊查詢4:轉義字元
* */
List<User> users = mapper.getInfo4("%呂%");
**
附加內容
**
自定義結果型別
我們定義的屬性和當前型別對應資料庫表中的欄位的名車個不一致,這個時候我們查詢資料的結果不匹配的部分就使用當前型別的預設值填充:
我們需要自己定義一種對映,將表中欄位和類中的屬性對應在一起
解決當前屬性名和查詢欄位名稱不一致的問題:
(1)在 mapper.xml檔案中使用resultMap標籤新定義一個對映關係型別
註釋: 在開發中使用resultMap標籤處理欄位的不匹配比較少,基本欄位都是程式碼生成器。
自動返回主鍵值
資料庫表的某個欄位自增長 auto_increment,我們儲存資料後,需要在程式中獲取我們插入資料的自增長的主鍵值,解決方案:
(1) 介面
int saveUser(User user);
(2) 對應的mapper配置
A: 使用我們的標籤屬性返回主鍵值
insert into user values(#{uid},#{uname},#{uphone})
B: 使用selectKey標籤獲取主鍵值
select last_insert_id();
insert into user values(#{uid},#{uname},#{uphone})
(3) 測試
User user = new User();
user.setUname(“ABC”);
user.setUphone(“119”);
int i = mapper.saveUser(user);
System.out.println(user.getUid());
如果我們的主鍵是uuid(),非自增長的情況,需要在程式中自動獲取主鍵值,我們需要使用標籤selectKey
(1) 構建一個表(略)
(2) 構建資料模型
public class Person {
private String id;
private String name;
(3) 構建介面和配置檔案
int savePerson(Person person);
Mapper.xml
select uuid(); 函式
insert into person values(#{id},#{name})
selectKey 標籤:獲取主鍵值標籤
keyColumn: 屬性資料庫中那個欄位是主鍵
keyProperty: 類中的那個屬性是和表中主鍵欄位對應的
resultType: 主鍵的型別
Order: before after
在我們執行插入sql語句前或者是後執行我們 selectKey標籤中的sql
(4) 測試
PersonMapper mapper1 = sqlSession.getMapper(PersonMapper.class);
Person perso = new Person();
perso.setName(“AAAAA”);
mapper1.savePerson(perso);
System.out.println(perso.getId());
相關文章
- MyBatis 引數處理MyBatis
- 12.MyBatis學習--對映檔案_引數處理_單個引數&多個引數&命名引數MyBatis
- Mybatis引數處理總結MyBatis
- cmdr 03 - 用流式介面定義命令列引數處理選項命令列
- Mybatis框架基礎-03MyBatis框架
- mybatis 傳入多個引數MyBatis
- JavaScript 中的引數處理JavaScript
- Mybatis parameterType 傳入多個引數的使用MyBatis
- 利用Java處理Jmeter介面常用引數JavaJMeter
- 15.MyBatis傳入多個引數的問題MyBatis
- mybatis一對多&&多對一處理MyBatis
- Mybatis一對多、多對一處理MyBatis
- 介面引數繫結, 公共處理程式碼生成工具
- Mybatis(五)--原始碼分析傳入單個list引數和多個list引數寫法MyBatis原始碼
- 多個request介面的功能最佳化處理速度
- mybatis 的傳入引數如何既有物件又有單個引數MyBatis物件
- Mybatis 傳入多個引數查詢資料 (3種方法)MyBatis
- 【傳統影像處理】1 數字影像基礎
- 訊號處理基本引數
- Mybatis的引數-parameterTypeMyBatis
- 另一個go命令列引數處理器 - cmdrGo命令列
- 【scipy 基礎】--影像處理
- 《Mybatis 手擼專欄》第10章:使用策略模式,呼叫引數處理器MyBatis模式
- 分散式系統中處理引數配置的4種方案分散式
- 分散式系統中處理引數配置的 4 種方案分散式
- Python基礎(11):引數Python
- SpringMVC中@RequestBody接收前端傳來的多個引數SpringMVC前端
- MyBatis中傳入引數為List集合的MyBatis
- 處理多個異常
- 影像處理案例03
- axios 後端拿不到引數的處理iOS後端
- 多對一處理 和一對多處理的處理
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle
- Android安全防護的「多工視窗中的介面高斯模糊處理」其實是個騙局?Android
- 聊聊介面最大併發處理數
- C#基礎之前處理器,異常處理C#
- Python基礎 -- 異常處理Python
- 【scipy 基礎】--訊號處理