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
- Mybatis框架基礎-03MyBatis框架
- MyBatis傳入多個引數,傳入陣列和列表資料的處理MyBatis陣列
- mybatis 傳入多個引數MyBatis
- MyBatis傳入多個引數MyBatis
- cmdr 03 - 用流式介面定義命令列引數處理選項命令列
- 如何在mybatis 中傳多個引數,如何在mybatis 中遍歷 集合?MyBatis
- rewrite規則中引數多於9個的處理方式 apache nginxApacheNginx
- JavaScript 中的引數處理JavaScript
- Mybatis parameterType 傳入多個引數的使用MyBatis
- MyBatis傳入多個引數的問題MyBatis
- 利用Java處理Jmeter介面常用引數JavaJMeter
- mybatis 傳遞多個引數 --解決mybatis查詢使用多個引數方法--javabean傳統方法和map方法MyBatisJavaBean
- 15.MyBatis傳入多個引數的問題MyBatis
- MyBatis多對多的兩種處理方式MyBatis
- Mybatis傳遞多個引數的4種方式(乾貨)MyBatis
- Mybatis一對多、多對一處理MyBatis
- mybatis一對多&&多對一處理MyBatis
- 介面引數繫結, 公共處理程式碼生成工具
- Mybatis(五)--原始碼分析傳入單個list引數和多個list引數寫法MyBatis原始碼
- mybatis 多引數 list和StringMyBatis
- AngularJS中處理多個promiseAngularJSPromise
- C#中Main函式後引數的處理C#AI函式
- mybatis 的傳入引數如何既有物件又有單個引數MyBatis物件
- 多個request介面的功能最佳化處理速度
- 怎麼實現名稱相同,引數不同的多個介面
- Mybatis 傳入多個引數查詢資料 (3種方法)MyBatis
- Mybatis的引數-parameterTypeMyBatis
- 【傳統影像處理】1 數字影像基礎
- React中如何使用setState第二個引數來處理set後的資料React
- MyBatis中傳入引數為List集合的MyBatis
- 訊號處理基本引數
- Shell 引數的讀取和處理
- 【scipy 基礎】--影像處理
- shell中如何處理兩個數的減法
- 另一個go命令列引數處理器 - cmdrGo命令列