MyBatis的运行流程【运行原理】
关联查询
数据表:一对一、多对一、一对多、多对多
MyBatis的关联查询分了两种:
X对一:有三种解决方案
X对多:有两种解决方案
X对一的查询
例子:员工和部门、订单项和订单。以员工和部门表为例讲解关联查询。
要求:在查询员工信息的时候,把该员工所属的部门信息一起查询出来.
第一种解决方案:直接在resultMap标签内部采用连缀【.】的方式。
接口
SQL映射文件:
测试代码:
第二种解决方案:直接在resultMap标签内部采用assocition标签的方式
SQL映射文件
第三种解决方案:直接在resultMap标签内部采用association标签.分步查询!
对于分步查询存在懒加载机制:需要的时候再去加载,不需要的时候就不加载,默认是关闭的,需要手动开启。
X对多的关联查询
以部门和员工为例:一个部门对应多个员工。
要求:查询部门信息的时候,同时将将部门下的所有员工信息查询出来。
Dept类:提供getter/setter方法
Employee类:getter/setter
第一种解决方案:在resultMap标签内部采用collection标签
第二种:分步查询:resultMap标签内部采用collection标签
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标签可以将where标签内部的sql拼接起来的字符串最前面的and或者or关键字去掉。
问题2:
where标签只能将where标签内部的sql拼接之后的字符串最前面的and或者or关键字去掉,但是不能将where标签内部的sql拼接之后的字符串最后面的and或者or关键字去掉?
解决方案:使用trim标签
Set标签
用来代替sql语句中的set关键字
接口:
SQL映射文件:
测试代码:
当然也可以使用我们前面学过的trim标签:
需求:如果条件携带了书名,就用书名查询,如果携带了价格,就用价格查询,如果携带了类型,就用类型查,如果携带了id就用id字段查.
类似于java基础学过的switch...case语句|javaweb学过c:choose-->c:when..other
多分支判断和if的区别:有顺序、只会走其中一个判断。
接口:
SQL映射文件:
遍历集合或者数组
接口:
SQL映射文件:
测试语句:
接口:
SQL映射文件:
测试代码:
接口:
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
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>
。。
原文:https://www.cnblogs.com/bai3535/p/12103915.html