mybatis的动态SQL以及连接池详解

 更新时间:2022年02月08日 16:54:36   作者:ychen_sparkle  
这篇文章主要介绍了mybatis的动态SQL以及连接池详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis动态SQL及连接池

mybatis根据传入参数的不同来查询。

<select id="findByCondition" parameterType="com.domain.User" resultType="com.domain.User">
        select * from users where 1=1
        <if test="name != null">
           and name= #{name}
        </if>
    </select>

如果太多的话,就不写where1=1.在if外面嵌套if标签。

<select id="findByCondition" parameterType="com.domain.User" resultType="com.domain.User">
        select * from users
        <where>
            <if test="name != null">
                and name= #{name}
            </if>
        </where>
    </select>

同时,第一个if语句中的and将会被省略!!!

mybatis中的范围查询,in

mybatis范围查询,例如select * from users where age in (11,12,13);

外部定义一个包装类,包装ages作为属性,下列以id为例子(在外部定义集合来包装)

<select id="findByRange" parameterType="com.domain.QueryVo" resultType="com.domain.User">
        select * from users
        <where>
//where子句的开头,and或者是or,将会被where元素去除。
            <if test="ids != null and ids.size()>0">这里的判断条件是Java语句
                <foreach collection="ids" open="and id in (" close=")" item="id" separator=",">
                    #{id}
                </foreach>
            </if>
        </where>
    </select>

SQL语句 select 字段 from where id in{?}

<foreach>标签用于遍历集合,它的属性;

  • Collection 代表要遍历的集合元素(属性名称)
  • open代表语句的开始部分
  • close代表语句的结束部分
  • item代表遍历集合的每个元素,生成的变量名
  • sperator代表元素之间的分割符

连接池

连接池:在实际开发中使用,可以减少我们获取连接所消耗的时间。

mybatis连接池提供了3种方式的配置

在主配置文件中的DataSource属性中配置

  • type取值 POOLED采用传统的javax.sql.DataSource规范中的连接池      
  • UNPOLLED 虽然实现了DataSource的标准,但是没有使用池的概念(Connection对象)
  • JNDI 使用服务器提供的jndi技术来取得DataSource对象。注意:如果不是web工程和maven的war工程,是不可使用的。

备注:mybatis中事务的操控,底层是通过操控Connection对象设置的。

  • POOLED:从池中拿出连接,最后把连接放回池里。
  • UNPOOLED 创建连接,结束连接(jdbc连接方式)

动态sql与多表的连接查询

动态sql

① where和if标签

在这里插入图片描述

② foreach循环标签

在这里插入图片描述

注意事项

在这里插入图片描述

③ 批量添加

在这里插入图片描述

④ selectKey

在这里插入图片描述

多表的连接查询

① 多对一查询

A). 建表时,外键一定是建在多的一端。

B). 在多的一端的实体类中创建一个一的一端的对象属性。

C). 连接查询的sql语句

  • ①select … from 表1 left join 表2 on 连接条件。连接条件一般就是外键=指向的主键。
  • ② resultMap

i. id,result配置一般的属性

ii. association标签配置多余的字段,property和javatype属性。子标签id和result

在这里插入图片描述

② 多对一查询如何做到修改功能

在这里插入图片描述

③ 一对多查询

与多对一查询不同的地方:

A)创建实体类时,在一的一端创建一个List属性,List中放的是多的一端的对象。

B)详细的resultMap配置

在这里插入图片描述

小结

一对多的查询用的相对少一些。在查询一的一端的同时查询展示外键与一的 一端的主键相同的数据。

例:查询部门表同时查询展示所有属于该部门的员工。

多对以的查询用的相对多一些。在查询多的一端的同时查询展示主键与多的一端的外键相同的数据。例:查询员工表同时查询展示该员工所属的部门信息。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解java如何实现将数据导出为yaml

    详解java如何实现将数据导出为yaml

    这篇文章主要为大家详细介绍了java如何利用snakeyaml和freemarker实现将数据导出为yaml文件,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2023-11-11
  • Java调用opencv IDEA环境配置的教程详解

    Java调用opencv IDEA环境配置的教程详解

    这篇文章主要为大家详细介绍了Java调用opencv IDEA环境配置的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Java 实现浏览器下载文件及文件预览

    Java 实现浏览器下载文件及文件预览

    这篇文章主要介绍了Java 实现浏览器下载文件及文件预览,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • springboot配置多数据源并集成Druid和mybatis的操作

    springboot配置多数据源并集成Druid和mybatis的操作

    这篇文章主要介绍了springboot配置多数据源并集成Druid和mybatis的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringMVC 实现用户登录实例代码

    SpringMVC 实现用户登录实例代码

    这篇文章主要介绍了SpringMVC 实现用户登录实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • MyBatis使用resultMap如何解决列名和属性名不一致

    MyBatis使用resultMap如何解决列名和属性名不一致

    这篇文章主要介绍了MyBatis使用resultMap如何解决列名和属性名不一致的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Swagger-boostrap-ui如何配置用户名密码访问

    Swagger-boostrap-ui如何配置用户名密码访问

    这篇文章主要介绍了Swagger-boostrap-ui如何配置用户名密码访问,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • SpringBoot项目调优及垃圾回收器的比较详解

    SpringBoot项目调优及垃圾回收器的比较详解

    这篇文章主要介绍了SpringBoot项目调优及垃圾回收器的比较详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java redisTemplate阻塞式处理消息队列

    Java redisTemplate阻塞式处理消息队列

    用redis中的List可以实现队列,这样可以用来做消息处理和任务调度的队列。因此,本文将主要为大家介绍如何利用redisTemplate处理消息队列,感兴趣的小伙伴可以了解一下
    2021-12-12
  • java中的Io(input与output)操作总结(一)

    java中的Io(input与output)操作总结(一)

    所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写,感兴趣的朋友可以了解下
    2013-01-01

最新评论