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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态sql (sql-if,sql-foreach)

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态sql (sql-if,sql-foreach) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • 1. UserMapper接口
    • 1. sql-if
    • 2. sql-foreach
    • 3. 多條件查詢和根據多個id查詢測試

say sth.. 每當我回顧以前寫jdbc分頁,多條件查詢時,我那是有多痛苦。 特別是當我拼接條件時,對象.getName 又是判斷null,又是判斷空字符串的。 還得拿一個集合來裝條件。以及列名后面的逗號,where 條件的空格。 我/(ㄒoㄒ)/~~ 搞得我特別壓抑,好了,現在mybatis的sql標簽來甜我了。\( ̄︶ ̄*\))

jdbc規范下的動態查詢

1. UserMapper接口

user表字段userId userName userPassword 查詢涉及到- where不確定條件查詢 sql-if- in 多條件查詢- 不提供實體類
  • 關于mybatis環境搭建
  • 關于代理開發接口實現
package cn.bitqian.dao;import cn.bitqian.entity.User;import java.util.List;/*** @author echo lovely* @date 2020/9/11 15:36*/ public interface UserMapper {public List<User> queryUserByCondition(User user);public List<User> queryUserByIds(List<Integer> ids); }

1. sql-if

<?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="cn.bitqian.dao.UserMapper"><!--sql 片段的抽取 statement標簽內使用include標簽進行引用--><sql id="selectUserPart">select * from users1</sql><!-- 根據id or name or pwd 查詢 --><select id="queryUserByCondition" parameterType="user" resultType="user"><include refid="selectUserPart"></include><where><if test="userId != 0 and userId != null">and userid = #{userId}</if><if test="userName != null">and username = #{userName}</if><if test="userPassword != null">and userpassword = #{userPassword}</if></where></select> </mapper>

2. sql-foreach

<?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="cn.bitqian.dao.UserMapper"><select id="queryUserByIds" parameterType="list" resultType="user">select * from users1 <!-- where userid in (1, 2, 3) --><where><!--collection=arrayopen, end 拼接sql寫死的片段separator 為分隔符item 為list中的每個元素--><foreach collection="list" open="userid in (" close=")" separator="," item="userId">#{userId}</foreach></where></select></mapper>

3. 多條件查詢和根據多個id查詢測試

import cn.bitqian.dao.UserMapper; import cn.bitqian.entity.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test;import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List;/*** 動態sql測試* @author echo lovely* @date 2020/9/11 15:50*/ public class DynamicDemoTest {public SqlSession getSqlSession() {try {InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);// 默認提交事務return sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return null;}@Testpublic void test1() {SqlSession sqlSession = getSqlSession();if (sqlSession != null) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();// user.setUserId(1);user.setUserName("rose");user.setUserPassword("love jack");List<User> userList = userMapper.queryUserByCondition(user);System.out.println(userList);sqlSession.close();}}@Testpublic void test2() {SqlSession sqlSession = getSqlSession();if (sqlSession != null) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(3);// 查詢user id 為1或者為2的數據記錄System.out.println(userMapper.queryUserByIds(list));sqlSession.close();}}}

總結

以上是生活随笔為你收集整理的动态sql (sql-if,sql-foreach)的全部內容,希望文章能夠幫你解決所遇到的問題。

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