美文网首页
Mybatis知识day03 连接池&动态SQL&多表查询

Mybatis知识day03 连接池&动态SQL&多表查询

作者: 小陈工 | 来源:发表于2022-04-17 08:48 被阅读0次

    一、Mybatis 连接池

    1.1 Mybatis 的连接池技术采用的是自己的连接池技术。在 Mybatis的 SqlMapConfig.xml配置文件中,通过来<dataSource type="pooled">来实现 Mybatis中连接池的配置。  

    1.2 Mybatis 连接池的分类:

            UNPOOLED:不使用连接池的数据源 

            POOLED:使用连接池的数据源 

            JNDI:使用 JNDI 实现的数据源

            在这三种数据源中,我们一般采用的是 POOLED 数据源

    1.3 Mybatis 中数据源的配置:

    二、Mybatis 的事务控制

    2.1 Mybatis 中事务提交方式:Mybatis中事务的提交方式,本质上就是调用JDBC的 setAutoCommit()来实现事务控制。

    2.2 Mybatis 自动提交事务的设置(不常用,了解):

    注意事项:我们发现,此时事务就设置为自动提交了,同样可以实现CUD操作时记录的保存。虽然这也是一种方式,但就编程而言,设置为自动提交方式为 false 再根据情况决定是否进行提交,这种方式更常用,因为我们可以根据业务情况来决定提交是否进行提交。

    三、Mybatis 的动态 SQL 语句

    3.1 动态 SQL 之<if>标签:

    3.1.1 使用举例:

    持久层 Dao 接口:  

    持久层 Dao 映射配置:

    注意: <if>标签的 test 属性中写的是对象的属性名,如果是包装类的对象要使用 OGNL 表达式的写法。 另外要注意 where 1=1 的作用~!

    测试:

    3.2 动态 SQL 之<where>标签

    3.2.1 为了简化上面 where 1=1 的条件拼装,我们可以采用标签来简化开发:

    持久层 Dao 映射配置:

    3.3 动态标签之<foreach>标签

    3.3.1 需求:当传入多个 id 查询用户信息时,就要将一个集合中的值,作为参数动态添加进来。

    3.3.2 代码实现:

    在 QueryVo 中加入一个 List 集合用于封装参数

    在持久层 Dao 接口定义方法:

    持久层 Dao 映射配置:

    编写测试方法

    3.4 Mybatis 中简化编写的 SQL 片段:Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。

    3.4.1 举例:

    定义代码片段:

    引用代码片段:

    四、 Mybatis 多表查询之一对多

    4.1 本次案例主要以最为简单的用户和账户的模型来分析Mybatis多表关系。用户为 User 表,账户为Account表。一个用户(User)可以有多个账户(Account)。

    4.2 一对一查询(多对一):

    4.2.1 需求: 查询所有账户信息,关联查询下单用户信息。 因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的账户信息则为一对多查询,因为一个用户可以有多个账户。

    4.2.2 定义账户信息的实体类

    4.2.3 编写 Sql 语句:实现查询账户信息时,也要查询账户所对应的用户信息。

    4.2.4 定义 AccountUser 类

    为了能够封装上面 SQL 语句的查询结果,定义 AccountUser类中要包含账户信息同时还要包含用户信息,所以我们要在定义 AccountUser 类时可以继承 Account类。

    4.2.5 定义账户的持久层 Dao 接口:

    4.2.6 定义 AccountDao.xml 文件中的查询配置信息:

    4.2.7 创建 AccountTest 测试类

    4.2.8 定义专门的类作为输出类型,其中定义了 sql 查询结果集所有的字段。此方法较为简单,企业中使用普遍。

    4.3 一对多查询:

    4.3.1 需求: 查询所有用户信息及用户关联的账户信息。 

    分析: 用户信息和他的账户信息为一对多关系,并且查询过程中如果用户没有账户信息,此时也要将用户信息查询出来,我们想到了左外连接查询比较合适。

    4.3.2 编写 SQL 语句:

    4.3.3 用户持久层 Dao 接口中加入查询方法:

    4.3.4 用户持久层 Dao 映射文件配置:

    4.3.5 测试方法

    五、Mybatis 多表查询之多对多

    5.1 用户与角色的关系模型:

    5.2 业务要求及实现 SQL:

    5.2.1 需求:实现查询所有对象并且加载它所分配的用户信息。 

    分析:查询角色我们需要用到Role表,但角色分配的用户的信息我们并不能直接找到用户信息,而是要通过中 间表(USER_ROLE 表)才能关联到用户信息。

    5.2.2 实现的 SQL 语句:

    5.3 编写角色实体类

    5.4 编写 Role 持久层接口

    5.5 编写映射文件:

    5.6 编写测试类

    相关文章

      网友评论

          本文标题:Mybatis知识day03 连接池&动态SQL&多表查询

          本文链接:https://www.haomeiwen.com/subject/wzwkertx.html