MyBatis—学习笔记#day03

目录

1.mybatis中的连接池以及事务控制                     原理部分了解,应用部分会用

1.1mybatis中连接池使用及分析

1.1.1 Mybatis  连接池的分类

1.1.2 Mybatis  中数据源的配置

1.1.3 Mybatis  中 DataSource  的存取

1.1.4 Mybatis  中连接的获取过程分析

1.2 mybatis事务控制的分析

1.2.1 自动提交事务设置

2.mybatis基于XML配置的动态SQL语句使用       会用即可

2.1 if标签

2.2 where标签

2.3 foreach标签

3、mybatis中的多表操作                        掌握应用

一对一查询

一对多查询

多对多查询

扩展

JNDI数据源


1.mybatis中的连接池以及事务控制                     原理部分了解,应用部分会用

1.1mybatis中连接池使用及分析

在 Mybatis 的 SqlMapConfig.xml 配置文件中,通过<dataSource type=”pooled”>来实现 Mybatis 中连接池的配置。

1.1.1 Mybatis  连接池的分类

在 Mybatis 中我们将它的数据源 dataSource 分为以下几类:


可以看出 Mybatis 将它自己的数据源分为三类:
UNPOOLED 不使用连接池的数据源
POOLED 使用连接池的数据源
JNDI 使用 JNDI 实现的数据源

在这三种数据源中,我们一般采用的是 POOLED 数据源(很多时候我们所说的数据源就是为了更好的管理数据库连接,也就是我们所说的连接池技术)。

1.1.2 Mybatis  中数据源的配置

我们的数据源配置就是在 SqlMapConfig.xml 文件中,具体配置如下:

<!-- 配置数据源(连接池)信息 -->
<dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</dataSource>

MyBatis 在初始化时,根据<dataSource>的 type 属性来创建相应类型的的数据源 DataSource,即:
type=”POOLED”:MyBatis 会创建 PooledDataSource 实例
type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例
type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用

1.1.3 Mybatis  中 DataSource  的存取

MyBatis 是通过工厂模式来创建数据源 DataSource 对象的,  MyBatis 定义了抽象的工厂接口:org.apache.ibatis.datasource.DataSourceFactory,通过其 getDataSource()方法返回数据源DataSource。

下面是 DataSourceFactory 源码,具体如下:

package org.apache.ibatis.datasource;
import java.util.Properties;
import javax.sql.DataSource;
/**
* @author Clinton Begin
*/
public interface DataSourceFactory {
    void setProperties(Properties props);
    DataSource getDataSource();
}

 MyBatis 创建了 DataSource 实例后,会将其放到 Configuration 对象内的 Environment 对象中, 供以后使用。

1.1.4 Mybatis  中连接的获取过程分析

1.2 mybatis事务控制的分析

1.2.1 自动提交事务设置

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

2.mybatis基于XML配置的动态SQL语句使用       会用即可

       mappers配置文件中的几个标签:

2.1 if标签

配置

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

where 1=1 的作用:

在不定数量查询条件情况下,1=1可以很方便的规范语句

此时即使if标签都不成立,都会有一条正确的语句 select * from user where 1=1

测试

2.2 where标签

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

配置

2.3 foreach标签

需求

传入多个 id 查询用户信息,用下边两个 sql 实现:
SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16)
SELECT * FROM USERS WHERE username LIKE '%张%' AND id IN (10,89,16)
这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。
这样我们将如何进行参数的传递?

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

持久层 Dao  接口

配置

#{}里的内容有item所决定

SQL 语句:
select 字段 from user where id in (?)
<foreach>标签用于遍历集合,它的属性:
collection:代表要遍历的集合元素,注意编写时不要写#{}
open:代表语句的开始部分
close:代表结束部
item:括号里的内容,id
separator:以逗号为分隔符

测试

3、mybatis中的多表操作                        掌握应用

示例:用户和账户
            一个用户可以有多个账户(一对多)
            一个账户只能属于一个用户(多个账户也可以属于同一个用户)(一对一)
        步骤:
            1、建立两张表:用户表,账户表
                让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
            2、建立两个实体类:用户实体类和账户实体类
                让用户和账户的实体类能体现出来一对多的关系
            3、建立两个配置文件
                用户的配置文件
                账户的配置文件
            4、实现配置:
                当我们查询用户时,可以同时得到用户下所包含的账户信息
                当我们查询账户时,可以同时得到账户的所属用户信息

一对一查询

当我们查询账户时,可以同时得到账户的所属用户信息

建立对应关系

实现类

一对多查询

当我们查询用户时,可以同时得到用户下所包含的账户信息

建立对应关系

实现类

示例:用户和角色
            一个用户可以有多个角色
            一个角色可以赋予多个用户(多对多)
        步骤:
            1、建立两张表:用户表,角色表
                让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各自的主键,在中间表中是外键。
            2、建立两个实体类:用户实体类和角色实体类
                让用户和角色的实体类能体现出来多对多的关系
                各自包含对方一个集合引用
            3、建立两个配置文件
                用户的配置文件
                角色的配置文件
            4、实现配置:
                当我们查询用户时,可以同时得到用户所包含的角色信息
                当我们查询角色时,可以同时得到角色的所赋予的用户信息

多对多查询

实现类

 

建立对应关系

当我们查询角色时,可以同时得到角色的所赋予的用户信息

当我们查询用户时,可以同时得到用户所包含的角色信息

测试

扩展

JNDI数据源

JNDI:Java Naming and Directory Interface。是SUN公司推出的一套规范,属于JavaEE技术之一。目的是模仿windows系统中的注册表。

1.创建Maven的war工程并导入坐标 

<dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>

  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
  </dependency>
</dependencies>

2.在webapp文件下创建META-INF目录,在META-INF目录中建立一个名为context.xml的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- 
<Resource 
name="jdbc/mybatis"                  数据源的名称
type="javax.sql.DataSource"                   数据源类型
auth="Container"                        数据源提供者,这里指tomcat
maxActive="20"                         最大活动数
maxWait="10000"                            最大等待时间
maxIdle="5"                               最大空闲数
username="root"                            用户名
password="123456"                            密码
driverClassName="com.mysql.jdbc.Driver"          驱动类
url="jdbc:mysql://localhost:3306/mybatis" 连接url字符串
/>
 -->
<Resource 
name="jdbc/mybatis"
type="javax.sql.DataSource"
auth="Container"
maxActive="20"
maxWait="10000"
maxIdle="5"
username="root"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mybatis"
/>
</Context>

 

3.修改SqlMapConfig.xml中的配置

源码:https://github.com/DiCaprio17/MyBatis/tree/master/mybatis_day03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值