欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis之多參數(shù)查詢方式

 更新時間:2023年06月28日 14:48:25   作者:ACodeBird  
這篇文章主要介紹了mybatis之多參數(shù)查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis多參數(shù)查詢

利用map封裝多個參數(shù)

xxxmapper.xml的查詢語句(直接用占位符#{key},key就是map的key)

<select id="selectByMap" parameterType="hashmap" resultType="com.mybatis_demo.domain.User">
?? ?select * from t_user where uname like concat('%',#{uname},'%') and age>#{age}
</select>

測試代碼

//用map封裝多個參數(shù)實現(xiàn)多參數(shù)查詢
?? ?@Test
?? ?public void test6() {
?? ??? ?try {
?? ??? ??? ?//讀取配置文件
?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
?? ??? ??? ?//創(chuàng)建sqlSessionFactoryBuilder
?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
?? ??? ??? ?//利用sqlSessionFactoryBuilder獲取sqlSessionFactory
?? ??? ??? ?SqlSessionFactory sqlSessionFactory = builder.build(in);
?? ??? ??? ?//利用sqlSessionFactory獲取sqlSeesion
?? ??? ??? ?SqlSession session = sqlSessionFactory.openSession();
?? ??? ??? ?//利用sqlSeesion操作數(shù)據(jù)庫
?? ??? ??? ?Map<String,Object> map = new HashMap<String,Object>();
?? ??? ??? ?map.put("uname", "明");
?? ??? ??? ?map.put("age", 95);
?? ??? ??? ?List<User> list = session.selectList("UserMapper.selectByMap", map);
?? ??? ??? ?for (User user : list) {
?? ??? ??? ??? ?System.out.println(user);
?? ??? ??? ?}
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}

利用list封裝多個參數(shù)

xxxmapper.xml的查詢語句(通過foreach遍歷list集合,其中item代表變量,open表示以"(“開頭,separator表示變量之間以”,“隔開,close表示以”)"結(jié)尾,即遍歷結(jié)果是(1,3,4,9)

<select id="selectByList" parameterType="java.util.List" resultType="com.mybatis_demo.domain.User">
?? ?select * from t_user where uid in
?? ?<foreach collection="list" item="item" open="(" separator="," close=")">
?? ??? ?#{item}
?? ?</foreach>
</select>

測試代碼:

//多參數(shù)查詢,用list傳遞參數(shù),在對應(yīng)的mapper.xml文件中使用foreach進行遍歷
?? ?@Test
?? ?public void test7() {
?? ??? ?try {
?? ??? ??? ?//讀取配置文件
?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
?? ??? ??? ?//創(chuàng)建sqlSessionFactoryBuilder
?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
?? ??? ??? ?//利用sqlSessionFactoryBuilder獲取sqlSessionFactory
?? ??? ??? ?SqlSessionFactory sqlSessionFactory = builder.build(in);
?? ??? ??? ?//利用sqlSessionFactory獲取sqlSeesion
?? ??? ??? ?SqlSession session = sqlSessionFactory.openSession();
?? ??? ??? ?//利用sqlSeesion操作數(shù)據(jù)庫
?? ??? ??? ?List<Integer> test = new ArrayList<Integer>();
?? ??? ??? ?test.add(1);
?? ??? ??? ?test.add(3);
?? ??? ??? ?test.add(4);
?? ??? ??? ?test.add(9);
?? ??? ??? ?List<User> users = session.selectList("UserMapper.selectByList", test);
?? ??? ??? ?for (User user : users) {
?? ??? ??? ??? ?System.out.println(user);
?? ??? ??? ?}
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}

如果使用動態(tài)代理mapper開發(fā),還有另外一種方法

mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
? PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
? "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis_demo.mapper.UserMapper">
<select id="selectByMoreParamter" resultType="com.mybatis_demo.domain.User">
?? ?<!-- select * from t_user where uname like concat('%',#{param1},'%') and age = #{param2} and address = #{param3} -->
?? ?select * from t_user where uname like concat('%',#{arg0},'%') and age = #{arg1} and address = #{arg2}
</select>
</mapper>

mapper接口

public interface UserMapper {
?? ?//mybatis使用mapper動態(tài)代理
?? ?//4大原則,一個注意
?? ?//1.接口中的方法名需要與對應(yīng)mapper.xml的id一致
?? ?//2.接口中的返回值需要與對應(yīng)mapper.xml的返回值類型保持一致
?? ?//3.接口中的參數(shù)需要與對應(yīng)mapper.xml的參數(shù)類型、個數(shù)、參數(shù)名保持一致
?? ?//4.對應(yīng)mapper.xml的名字空間需要修改成對應(yīng)接口的全包名
?? ?//注意:mapper動態(tài)代理根據(jù)返回值類型,mybatis會自動選擇調(diào)用selectone還是selectlist....
?? ?//直接傳多個參數(shù)
?? ?public User selectByMoreParamter(String uname,Integer age,String address);
}

測試代碼

//當傳入多個參數(shù)時,使用#{arg0}、#{arg1},arg+下標獲取參數(shù),下標從0開始
?? ?//或者使用#{param1},param+下標獲取參數(shù)下標從1開始
?? ?@Test
?? ?public void test_selectByMoreParamter() {
?? ??? ?try {
?? ??? ??? ? //讀取配置文件
?? ??? ??? ?InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
?? ??? ??? ?//創(chuàng)建SqlSessionFactoryBuilder對象,用來獲取SqlSessionFactory對象
?? ??? ??? ?SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
?? ??? ??? ?//利用SqlSessionFactoryBuilder對象build一個SqlSessionFactory對象
?? ??? ??? ?SqlSessionFactory build = builder.build(in);
?? ??? ??? ?//利用sqlSessionFactory獲取session對象
?? ??? ??? ?SqlSession session = build.openSession();
?? ??? ??? ?//通過session對象獲取對應(yīng)mapper接口
?? ??? ??? ?UserMapper mapper = session.getMapper(UserMapper.class);
?? ??? ??? ?User user = mapper.selectByMoreParamter("白", 4, "北京朝陽區(qū)");
?? ??? ??? ?System.out.println(user);
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}

注意:

用map可以封裝多種不同類型的參數(shù),list只能封裝同種類型的參數(shù);

使用動態(tài)代理可以使用arg+下標獲取參數(shù),下標從0開始;

或者使用param+下標獲取參數(shù),下標從1開始

mybatis一對多嵌套查詢多參數(shù)

在使用mybatis注解開發(fā)的時候經(jīng)常遇到一對多以及多對多的需求,而在使用mybatis嵌套查詢的時候,我遇到子查詢條件不止一個情況,這個時候需要我們父查詢傳遞多個參數(shù)過去給子查詢作為查詢條件。

那該怎么傳遞多個參數(shù)呢?我們只需要這樣設(shè)置,

column寫法 :

Result({property 名稱 = column 字段名 , property 名稱 = column 字段名 ...})

例子:

@Result(column = "{id?= id,aid?= article_id}")

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論