首页 > 其他 > 详细

MyBatis03课堂笔记

时间:2019-12-26 20:27:08      阅读:96      评论:0      收藏:0      [点我收藏+]

MyBatis的运行流程【运行原理】

技术分享图片

 关联查询

数据表:一对一、多对一、一对多、多对多

MyBatis的关联查询分了两种:

  X对一:有三种解决方案

  X对多:有两种解决方案

X对一的查询

例子:员工和部门、订单项和订单。以员工和部门表为例讲解关联查询。

要求:在查询员工信息的时候,把该员工所属的部门信息一起查询出来.

关联查询

第一种解决方案:直接在resultMap标签内部采用连缀【.】的方式。

接口

技术分享图片

SQL映射文件:

技术分享图片

测试代码:

技术分享图片

第二种解决方案:直接在resultMap标签内部采用assocition标签的方式

SQL映射文件

技术分享图片

第三种解决方案:直接在resultMap标签内部采用association标签.分步查询!

对于分步查询存在懒加载机制:需要的时候再去加载,不需要的时候就不加载,默认是关闭的,需要手动开启。

 技术分享图片

 

技术分享图片

技术分享图片

X对多的关联查询

以部门和员工为例:一个部门对应多个员工。

要求:查询部门信息的时候,同时将将部门下的所有员工信息查询出来。

Dept类:提供getter/setter方法

技术分享图片

Employee类:getter/setter

 技术分享图片

 关联查询

第一种解决方案:在resultMap标签内部采用collection标签

技术分享图片

第二种:分步查询:resultMap标签内部采用collection标签

 技术分享图片

技术分享图片

 动态SQL

MyBatis的动态SQL支持以下几个标签。

if:类似于java中if语句

• choose (when, otherwise):多分支判断

• trim (where, set):

   Trim:对SQL语句进行修改的。

   Where:代替了原来的SQL语句中的where关键字

Set: 代替了原来的SQL语句中的set关键字

• foreach:遍历集合或者数组

 If标签

需求:如果条件携带了书名,就用书名查询,如果携带了价格,就用价格查询,如果携带了类型,就用类型查,如果携带了id就用id字段查.

接口:

 技术分享图片

SQL映射文件:

技术分享图片

 

 

 测试代码

技术分享图片

问题1:当不带bookName的时候,在where后面会多一个and关键字。

 where标签

解决办法:

  1. where关键字后面加 1=1 ,和后面的sql连接起来
  2. where标签代替where关键字

作用where标签可以将where标签内部的sql拼接起来的字符串最前面的and或者or关键字去掉。

技术分享图片

问题2:

where标签只能将where标签内部的sql拼接之后的字符串最前面的and或者or关键字去掉,但是不能将where标签内部的sql拼接之后的字符串最后面的and或者or关键字去掉?

 trim标签

解决方案:使用trim标签

 技术分享图片

Set标签

用来代替sql语句中的set关键字

接口:

 技术分享图片

SQL映射文件:

技术分享图片

测试代码:

技术分享图片

当然也可以使用我们前面学过的trim标签:

技术分享图片

 choose (when, otherwise)标签

需求:如果条件携带了书名,就用书名查询,如果携带了价格,就用价格查询,如果携带了类型,就用类型查,如果携带了id就用id字段查.

类似于java基础学过的switch...case语句|javaweb学过c:choose-->c:when..other

多分支判断和if的区别:有顺序、只会走其中一个判断。

接口:

技术分享图片

SQL映射文件:

技术分享图片

 Foreach标签

遍历集合或者数组

1. 遍历列表

接口:

 技术分享图片

SQL映射文件:

技术分享图片

测试语句:

技术分享图片

2.遍历数组

接口:

技术分享图片

SQL映射文件:

技术分享图片

测试代码:

技术分享图片

 3.批量添加数据

接口:

 技术分享图片

SQL映射文件:

技术分享图片

 

 

 SSM整合

技术分享图片

1.导包

 

技术分享图片

 

 

 2.web.xml

<!-- 指定spring的配置文件的路径和名称  -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- springmvc的前端控制器 -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!-- 配置处理post请求乱码的过滤器 -->
    <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
    </filter>
    
    <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    <!-- 将POST请求转换为PUT或者Delete请求 -->
    <filter>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    
    <filter-mapping>
      <filter-name>HiddenHttpMethodFilter</filter-name>创建并配置springmvc.xml

3.springmvc.xml

  1. 技术分享图片

 

 

 4.beans.xml

 <!-- 1.配置扫描包 -->
     <context:component-scan base-package="com.offcn">
      <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
   </context:component-scan>
   
   <!-- 2.加载properties配置文件 -->
   <context:property-placeholder location="classpath:jdbc.properties"/>
   <!-- 3.配置数据源 -->
   <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
      <property name="username" value="${jdbc.userName}"/>
      <property name="password" value="${jdbc.password}"/>
      <property name="url" value="${jdbc.jdbcUrl}"/>
      <property name="driverClassName" value="${jdbc.driverClass}"/>
   </bean>
 
   <!-- 5.配置数据源事务管理器 -->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="druidDataSource"/>
   </bean>
   <!-- 6.开启基于注解的事务支持 -->
   <tx:annotation-driven  transaction-manager="transactionManager"/>
   
   <!-- 7.配置SqlSessionFactoryBean对象 -->
   <bean class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="druidDataSource"/>
      <property name="configLocation" value="classpath:mybatis-config.xml"></property>
   </bean>
   
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     <property name="basePackage" value="com.offcn.dao"/>
   </bean>

。。

MyBatis03课堂笔记

原文:https://www.cnblogs.com/bai3535/p/12103915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!