返回顶部
首页 > 资讯 > 精选 >Mybatis动态SQL及单表多表查询怎么应用
  • 731
分享到

Mybatis动态SQL及单表多表查询怎么应用

2023-07-02 09:07:56 731人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“mybatis动态sql及单表多表查询怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis动态SQL及单表多表查询怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单

本文小编为大家详细介绍“mybatis动态sql及单表多表查询怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis动态SQL及单表多表查询怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

单表查询操作

参数占位符#{}和${}

  • #{}:相当于JDBC里面替换占位符的操作方式(#{}->“”).相当于预编译处理(预编译处理可以防止SQL注入问题)

  • ${}:相当于直接替换(desc这种关键字),但这种不能预防SQL注入

select * from userinfo where username='${name}'

${} VS #{}

  • ${}是直接替换,#{}是预执行;

  • ${} 会存在SQL 注入问题,#{}不存在SQL注入问题

SQL 注入

UserInfo userInfo = userMapper.login("admin","' or 1='1");

mysql> select * from userinfo where username = 'admin' and passWord ='' or 1='1';
+----+----------+----------+-------+---------------------+---------------------+-------+
| id | username | password | photo | createtime          | updatetime          | state |
+----+----------+----------+-------+---------------------+---------------------+-------+
|  1 | admin    | admin    |       | 2021-12-06 17:10:48 | 2021-12-06 17:10:48 |     1 |
+----+----------+----------+-------+---------------------+---------------------+-------+
1 row in set (0.00 sec)

like模糊查询

用concat进行字符串拼接

   <select id="findListByName" resultMap="BaseMap">        select * from userinfo where username like concat('%',#{name},'%')    </select>

多表查询操作

一对一多表查询

一对一的多表查询:需要设置resultMap中有个association标签,property对应实体类的属性名,resultMap是关联属性的字典映射(必须要设置),columnPrefix是设置前缀,当多表查询中有相同的字段的话,就会报错

<?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.example.demo.mapper.ArticleInfoMapper">    <resultMap id="BaseMap" type="com.example.demo.model.ArticleInfo">        <!--主键-->        <id property="id" column="id"></id>        <!--普通属性-->        <result property="updatetime" column="updatetime"></result>        <result property="title" column="title"></result>        <result property="content" column="content"></result>        <result property="createtime" column="createtime"></result>        <result property="rcount" column="rcount"></result>        <!--自定义对象属性-->        <association property="user"                     resultMap="com.example.demo.mapper.UserMapper.BaseMap"                     columnPrefix="u_">        </association>    </resultMap>    <select id="getAll" resultType="com.example.demo.model.ArticleInfo">        select a.*,u.id from articleinfo as a left join userinfo as u on a.uid = u.id;    </select>    <select id="getAll2" resultMap="BaseMap">        select a.*,u.id as u_id ,u.username as u_username,u.password as u_password from articleinfo as a left join userinfo as u on a.uid = u.id;    </select></mapper>

一对多多表查询

collection标签,用法同association

 <resultMap id="BaseMapper2" type="com.example.demo.model.UserInfo">        <!--映射主键的)(表中主键和程序实体类中的主键)-->        <id column="id" property="id"></id>        <!--普通列的映射-->        <result column="username" property="name"></result>        <result column="password" property="password"></result>        <result column="photo" property="photo"></result>        <result column="createtime" property="createtime"></result>        <result column="updatetime" property="updatetime"></result>        <!--外部关联-->        <collection property="artlist" resultMap="com.example.demo.mapper.ArticleInfoMapper.BaseMap"                    columnPrefix="a_"></collection>    </resultMap> <select id="getAll3" resultMap="BaseMapper2">        select u.*,a.id a_id,a.title a_title from userinfo u left join articleinfo a on u.id=a.uid </select>

动态SQL使用

if标签

注册分为必填和选填,如果在添加用户的时候有不确定的字段传入,就需要使用动态标签if来判断

//p是传递过来的参数名,并不是表的字段名 <insert id="add3">        insert into userinfo(username,password,        <if test="p!=null">         photo,        </if>         state)        values(#{username},#{password},        <if test="p!=null">            #{p},        </if>       #{state}) </insert>

trim标签

trim标签的属性

  • prefix:表示整个语句块,以prefix的值作为前缀

  • suffix:表示整个语句块,以suffix的值作为后缀

  • prefixOverrides:去掉最前面的符合条件的字符

  • suffixOverrides:去掉最后面的符合条件的字符

 <insert id="add4">        insert into userinfo        <trim prefix="(" suffix=")" suffixOverrides=",">            <if test="username!=null">                username,            </if>            <if test="password!=null">                password,            </if>            <if test="p!=null">                photo,            </if>            <if test="state!=null">                state,            </if>        </trim>        values        <trim prefix="(" suffix=")" suffixOverrides=",">            <if test="username!=null">                #{username},            </if>            <if test="password!=null">                #{password},            </if>            <if test="p!=null">                #{p},            </if>            <if test="state!=null">                #{state},            </if>        </trim>    </insert>

where标签

where标签首先可以帮助我们生成where,如果有查询条件,那么就生成where,如果没有查询条件,就会忽略where

其次where标签可以判断第一个查询条件前面有没有and,如果有则会删除

  <select id="login2" resultType="com.example.demo.model.UserInfo">        select * from userinfo        <where>        <if test="username!=null">            username=#{username}        </if>        <if test="password!=null">            and password=#{password}        </if>        </where>    </select>

set标签

和where的使用基本一样

可以自动帮助你处理最后一个逗号,并且自动写set

    <update id="update" parameterType="map">        update blog        <set>            <if test="newTitle != null">                title=#{newTitle},            </if>            <if test="newAuthor != null">                author=#{newAuthor},            </if>            <if test="newViews != null">                views = #{newViews}            </if>        </set>        <where>            <if test="id != null">                id=#{id}            </if>            <if test="title != null">                and title=#{title}            </if>            <if test="author != null">                and author=#{author}            </if>            <if test="views != null">                and views = #{views}            </if>        </where>    </update>

foreach标签

  • foreach属性:

  • collection:参数集合的名字

  • item:给接下来要遍历的集合起的名字

  • open:加的前缀是什么

  • close:加的后缀是什么

  • separator:每次遍历之间间隔的字符串

 <delete id="dels">        delete from userinfo where id in        <foreach collection="list" item="item" open="(" close=")" separator="," >            #{item}        </foreach> </delete>

读到这里,这篇“Mybatis动态SQL及单表多表查询怎么应用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Mybatis动态SQL及单表多表查询怎么应用

本文链接: https://lsjlt.com/news/341092.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mybatis动态SQL及单表多表查询怎么应用
    本文小编为大家详细介绍“Mybatis动态SQL及单表多表查询怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis动态SQL及单表多表查询怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单...
    99+
    2023-07-02
  • Mybatis详解动态SQL以及单表多表查询的应用
    目录单表查询操作参数占位符#{}和${}SQL 注入like模糊查询多表查询操作一对一多表查询一对多多表查询动态SQL使用if标签trim标签where标签set标签for...
    99+
    2024-04-02
  • Mybatis多表查询与动态SQL特性详解
    目录1.较复杂的查询操作1.1 参数占位符 #{} 和 ${}1.2SQL注入1.3like查询1.4resultType与resultMap1.4多表查询1.4.1一对一表映射1.4.2一对多表映射2.动态SQL2.1...
    99+
    2024-04-02
  • MyBatis动态sql查询及多参数查询方式
    目录MyBatis动态sql动态sql处理简单的多参数查询动态sql处理更新功能动态sql扩展动态sql处理集合参数foreach标签处理数组类型参数  &nbs...
    99+
    2022-11-13
    MyBatis sql查询 动态sql查询 多参数查询
  • 运用Mybatis动态查询字段及表名
    Mapper.java IPage getDyData(@Param("page") Page page, @Param("columns")String columns, @Param("tableName")String tableNa...
    99+
    2023-09-06
    mybatis java mysql
  • MyBatis-Plus多表联查的实现方法(动态查询和静态查询)
    目录建库建表依赖配置代码测试1.静态查询2.动态查询 1.不传条件2.传条件建库建表 DROP DATABASE IF EXISTS mp; CREATE DATA...
    99+
    2024-04-02
  • MyBatis-Plus多表联查(动态查询)的项目实践
    目录简介代码建库建表配置依赖测试1.静态查询2.动态查询简介 本文用示例介绍使用MyBatis-Plus进行多表查询的方法,包括静态查询和动态查询。 代码 controller pa...
    99+
    2022-11-13
    MyBatis-Plus多表联查 MyBatis-Plus多表动态查询
  • MyBatis中动态SQL及关联查询怎么实现
    小编给大家分享一下MyBatis中动态SQL及关联查询怎么实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!序言 MyBatis,大家都知道,半自动的ORM框架,原来叫ibatis,后来好...
    99+
    2024-04-02
  • MyBatis动态SQL表达式怎么使用
    本篇内容介绍了“MyBatis动态SQL表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态 sql 简单来讲就是我们能通过条件...
    99+
    2023-07-04
  • sql 单表/多表查询去除重复记录
      单表distinct  多表group by  group by 必须放在 order by 和 limit之前,不然会报错。  1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来...
    99+
    2024-04-02
  • MyBatis多表操作查询功能怎么用
    小编给大家分享一下MyBatis多表操作查询功能怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一对一查询用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户一对一查询的需求:查询一个订单,与此同时查询出该...
    99+
    2023-06-25
  • MyBatis 多表联合查询及优化方法
    目录背景正文关于优化这篇文章我打算来简单的谈谈 mybatis 的多表联合查询。起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也...
    99+
    2022-11-13
    MyBatis 多表联合查询 MyBatis 多表查询
  • Mybatis对sql表的一对多查询问题怎么解决
    这篇“Mybatis对sql表的一对多查询问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis对sql表...
    99+
    2023-07-02
  • sql多表查询语句怎么写
    多表查询语句用于从多个表中获取数据。可使用 join 关键字指定表关系,常用类型为:inner join(匹配行)、left join(左表全行,右表匹配行或 null)、right j...
    99+
    2024-05-30
  • mybatis-plus实现自定义SQL、多表查询与多表分页查询语句实例
    目录前言1、自定义SQL2、多表查询3、多表分页查询4、多表分页条件查询总结前言 本文介绍了在mybatis-plus中如何实现:自定义SQL语句,多表查询语句,多表分页查询语句 在...
    99+
    2024-04-02
  • mybatis动态表名怎么防止SQL注入
    要防止 MyBatis 中的 SQL 注入,可以通过以下方式来动态构建表名:1. 在 Mapper 接口中使用 @Param 注解传...
    99+
    2023-09-29
    mybatis SQL
  • Mybatis怎么使用ognl表达式实现动态sql
    这篇文章主要为大家展示了“Mybatis怎么使用ognl表达式实现动态sql”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mybatis怎么使用ognl表达式实现动态sql”这篇文章吧。新建Us...
    99+
    2023-06-15
  • SQL Server中怎么优化多表查询
    这期内容当中小编将会给大家带来有关SQL Server中怎么优化多表查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.执行路径ORACLE的这个功能大大地提高了SQL...
    99+
    2024-04-02
  • linq to sql多表查询怎么实现
    这篇文章主要讲解了“linq to sql多表查询怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linq to sql多表查询怎么实现”吧!在手写sql的年代,如果想从sqlserv...
    99+
    2023-06-17
  • 解析Mybatis对sql表的一对多查询问题
    Mybatisd对sql表的一对多查询 select * from projectrecord pr left join projects po on po.pid=p...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作