当前位置: 首页 > wzjs >正文

二级网站和自建网站有什么区别东莞网站建设相关技术

二级网站和自建网站有什么区别,东莞网站建设相关技术,editplus建设网站教学,高端网站开发步骤重要提醒:使用Param注解时,务必导入正确的包! import org.apache.ibatis.annotations.Param; 很多开发者容易错误导入Spring的Param,导致参数绑定失败!一、为什么需要传递List参数? 最常见的场景是动态构建…

重要提醒:使用@Param注解时,务必导入正确的包!
import org.apache.ibatis.annotations.Param;
很多开发者容易错误导入Spring的@Param,导致参数绑定失败!

一、为什么需要传递List参数?

最常见的场景是动态构建IN查询

SELECT * FROM users WHERE id IN (1, 2, 3, 4)

当我们需要根据前端传入的多个值查询时,就需要将List集合作为参数传递给Mapper。


二、基础版:MyBatis原生List传参

1. Mapper接口定义(注意@Param导入)
// !!!必须导入MyBatis的@Param包!!!
import org.apache.ibatis.annotations.Param;public interface UserMapper {// 使用@Param注解指定参数名List<User> selectByIds(@Param("idList") List<Long> idList);
}
2. XML映射文件实现
<select id="selectByIds" resultType="User">SELECT * FROM usersWHERE id IN<foreach collection="idList" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>
核心标签解析:
属性说明示例值
collection传入的集合参数名idList
item循环中当前元素的别名id
open循环开始前的字符串(
separator元素间的分隔符,
close循环结束后的字符串)
3. 实际生成的SQL

当传入List<Long> ids = Arrays.asList(1L, 2L, 3L)时:

SELECT * FROM users WHERE id IN (1, 2, 3)

三、避坑重点:@Param的正确使用

常见错误1:导入错误包
// ❌ 错误:导入了Spring的Param包
import org.springframework.data.repository.query.Param;// ✅ 正确:必须使用MyBatis的Param包
import org.apache.ibatis.annotations.Param;
常见错误2:忘记添加@Param注解
// ❌ 错误:缺少@Param注解会导致XML中无法识别参数
List<User> selectByIds(List<Long> idList);// ✅ 正确:必须添加@Param注解
List<User> selectByIds(@Param("idList") List<Long> idList);

四、MyBatis Plus的优雅实现

1. 使用QueryWrapper(无需XML)
public List<User> getUsersByIds(List<Long> ids) {return userMapper.selectList(new QueryWrapper<User>().in("id", ids));
}
2. Lambda表达式写法(推荐)
public List<User> getUsersByIds(List<Long> ids) {return userMapper.selectList(Wrappers.<User>lambdaQuery().in(User::getId, ids));
}

注意:MyBatis Plus的Wrapper方式不需要@Param注解


五、扩展应用场景

场景1:List处理
// Mapper
List<User> selectByNames(@Param("nameList") List<String> nameList);// XML
<foreach collection="nameList" item="name" open="(" separator="," close=")">#{name}
</foreach>
场景2:List<实体对象>
// Mapper
List<User> selectByConditions(@Param("userList") List<User> userList);// XML
<foreach collection="userList" item="user" separator=" OR ">(name = #{user.name} AND age > #{user.age})
</foreach>
场景3:多List参数
// Mapper
List<User> searchUsers(@Param("ids") List<Long> ids, @Param("names") List<String> names);// XML
<where><if test="ids != null and !ids.isEmpty()">id IN<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach></if><if test="names != null and !names.isEmpty()">AND name IN<foreach collection="names" item="name" open="(" separator="," close=")">#{name}</foreach></if>
</where>

六、特殊类型处理技巧

1. 枚举类型处理
// Mapper
List<User> selectByStatus(@Param("statusList") List<UserStatus> statusList);// XML
<foreach collection="statusList" item="status" open="(" separator="," close=")">#{status, typeHandler=org.apache.ibatis.type.EnumTypeHandler}
</foreach>
2. 日期范围查询
// Mapper
List<User> selectByDates(@Param("dateList") List<Date> dates);// XML
<foreach collection="dateList" item="date" separator=" OR ">create_time BETWEEN #{date} AND DATE_ADD(#{date}, INTERVAL 1 DAY)
</foreach>

七、性能优化与避坑指南

1. 空集合安全处理
<select id="safeSelect">SELECT * FROM users<where><if test="idList != null and !idList.isEmpty()">id IN<foreach collection="idList" ... /></if></where>
</select>
2. 大数据量分批查询
// 每500条执行一次查询
public List<User> batchSelect(List<Long> allIds) {List<User> result = new ArrayList<>();int batchSize = 500;for (int i = 0; i < allIds.size(); i += batchSize) {List<Long> batchIds = allIds.subList(i, Math.min(i + batchSize, allIds.size()));result.addAll(userMapper.selectByIds(batchIds));}return result;
}
3. SQL注入防护
<!-- 安全写法:使用#{}预编译 -->
<foreach collection="names" item="name">#{name}  <!-- 安全 -->
</foreach><!-- 危险写法:${}直接拼接 -->
<foreach collection="names" item="name">'${name}' <!-- 存在SQL注入风险! -->
</foreach>

八、完整可运行示例

Controller
@RestController
@RequestMapping("/users")
public class UserController {@PostMapping("/by-ids")public List<User> getUsersByIds(@RequestBody List<Long> ids) {return userService.getUsersByIds(ids);}
}
Service
@Service
@RequiredArgsConstructor
public class UserService {private final UserMapper userMapper;public List<User> getUsersByIds(List<Long> ids) {if (ids == null || ids.isEmpty()) {return Collections.emptyList();}// 超过1000条自动分批return ids.size() > 1000 ? batchSelect(ids) : userMapper.selectByIds(ids);}
}
Mapper XML
<mapper namespace="com.example.mapper.UserMapper"><select id="selectByIds" resultType="User">SELECT id, name, email FROM users<where><if test="idList != null and !idList.isEmpty()">id IN<foreach collection="idList" item="id" open="(" separator="," close=")">#{id}</foreach></if></where></select>
</mapper>

总结:核心要点回顾

  1. 必须使用正确的@Param包
    import org.apache.ibatis.annotations.Param;

  2. XML循环核心语法

    <foreach collection="参数名" item="元素名" open="开始符" separator="分隔符" close="结束符">#{元素名}
    </foreach>
    
  3. 最佳实践选择

    • 简单查询:MyBatis Plus Wrapper
    • 复杂SQL:MyBatis XML + foreach
    • 超大数据:分批查询
  4. 安全防护

    • 始终使用#{}防止SQL注入
    • 空集合检查避免全表扫描
  5. 特殊类型处理

    • 枚举:添加typeHandler
    • 日期:指定jdbcType=TIMESTAMP

最后提醒: 当遇到参数绑定问题时,首先检查@Param导入的包是否正确,这是最常见的错误根源!


文章转载自:

http://rVb6eERT.Lxqkt.cn
http://KUbAQrek.Lxqkt.cn
http://gupGctrB.Lxqkt.cn
http://dv2lxG69.Lxqkt.cn
http://0bhJluKb.Lxqkt.cn
http://8xxHuAAZ.Lxqkt.cn
http://l3jPFKYt.Lxqkt.cn
http://6aOdMUwz.Lxqkt.cn
http://oNnWfo0y.Lxqkt.cn
http://7dp5QQLR.Lxqkt.cn
http://V1tQEVQR.Lxqkt.cn
http://MN7B2J1X.Lxqkt.cn
http://0c8K2oDm.Lxqkt.cn
http://5AulhNKL.Lxqkt.cn
http://bKRWen5i.Lxqkt.cn
http://3mzzIYXm.Lxqkt.cn
http://5oYAvGIS.Lxqkt.cn
http://JPxdomiD.Lxqkt.cn
http://yFiJmLNx.Lxqkt.cn
http://aMXKhDDT.Lxqkt.cn
http://ElXUHNV7.Lxqkt.cn
http://ceRQB7Rv.Lxqkt.cn
http://sD1Wy2dN.Lxqkt.cn
http://QknfJioH.Lxqkt.cn
http://M7Yyusxj.Lxqkt.cn
http://ykAYdR2K.Lxqkt.cn
http://bOVFhlsh.Lxqkt.cn
http://3ODjEka5.Lxqkt.cn
http://AnKjYmgM.Lxqkt.cn
http://bcTVhes0.Lxqkt.cn
http://www.dtcms.com/wzjs/688742.html

相关文章:

  • 注销主体备案与网站备案表抽奖网站建设
  • 标准论坛网站建设德宏做网站
  • 青岛网站关键字优化神木网站建设
  • 做网站有必要注册商标吗wordpress购买资源插件
  • 北京网站排名制作做h5页面的网站有哪些
  • 展示型网站 带后台大都会app用不了
  • 带动画引导的网站网站建设与管理考查方案
  • 网站建设与管理 十四五国规教材网站网页设计的公司
  • 做网站二级页面的wordpress 简单企业主题下载
  • 网站建站目标wordpress破解登录密码破解
  • 南通做网站优化哪家好网络营销推广8种方法
  • 旅游网站开发注意点wordpress 页面下载
  • 电商网站设计线路图公司介绍ppt模板免费
  • 建设一个网站的基本步骤做网站外链需要多少钱
  • 怎么做网站推太原的网站搭建公司
  • 重庆做网站推广一个完整的策划案范文
  • 网站定制那个好公司网站建设建设
  • 响应式网站模板免费下载wordpress播放器安装
  • 做游戏网站年入百万山东济南seo整站优化费用
  • 山东泰安特产seo是做什么工作的
  • 网站的转化率泉州市住房和城乡建设部网站
  • 爱网站排行app开发工具简单
  • 网页小游戏的网站做网站用什么配置笔记本
  • 郑州高校网站建设服务公司东莞网站公司排名
  • wordpress existing_mimes搜索关键词优化
  • 中山高端企业网站设计大学生项目app策划书
  • 用asp做网站span深圳服务网站入口
  • 西安网站开发服务多少钱怎样做好物流网站建设
  • 徐州建设网站的公司本地dedecms网站
  • 什么软件做网站做好郴州建设工程集团招聘信息网站