mybatis动态sql

MyBatis:动态SQL

五迷三道 提交于 2019-12-04 04:22:35
动态SQL: 什么是动态SQL: 动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官方描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQL 语言得以改进这种情形。 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 if choose (when, otherwise) trim (where, set) foreach ​ 我们之前写的 SQL 语句 都比较 简单,如果有比较复杂的业务,我们需要写复杂的 SQL 语句,往往需要拼接,而拼接 SQL ,稍微不注意,由于引号,空格等缺失可能都会导致错误。那么怎么去解决这个问题呢?这就要使用 mybatis 动态SQL,通过 if, choose,

mybatis动态SQL中的sql片段

谁说胖子不能爱 提交于 2019-12-03 14:15:08
https://www.cnblogs.com/qiankun-site/p/5762352.html 在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景:   1、创建动态SQL     <sql id="sql_count">select count(*)</sql>   2、使用     <select id="selectListCountByParam" parameterType="map" resultType="String">       <include refid="sql_count"/> from table_name     </select>   3、解析     在使用sql片段时使用include标签通过sql片段的id进行引用,sql片段的ID在当前空间必须为唯一的      当然,sql片段中也可以写其他的内容,只要符合语法规范都是可以的。如下:     <sql id="sql_where">       <trim prefix="WHERE" prefixoverride="AND | OR">         <if test="id != null">AND id=#{id}</if>         <if test="name != null and name.length()>0">AND name=#{name

MyBatis动态SQL

荒凉一梦 提交于 2019-12-03 14:06:43
  根据不同的条件,需要执行不同的SQL 命令.称为动态SQL。例如如下需求,我们需要根据姓名和手机号去查询person的数据,那么: 当姓名和手机号参数不传值时,执行的sql应该是: select * from person 当只传姓名时,执行的sql应该是: select * from person where name = 'xxx' 当只传手机号时,执行的sql应该是: select * from person where phone = 'xxx' 当姓名和手机号都传递时,执行的sql应该是: select * from person where name = 'xxx' and phone = 'xxx'   如果上面这种处理逻辑要在service或dao中进行处理时,会比较麻烦,这个时候,就可以使用上动态SQL了,利用MyBatis 中的动态SQL 在mappxml中添加逻辑判断等。 1. <if> <select id="selByAccinAccout" resultType="log"> select * from log where 1=1 <!-- OGNL 表达式,直接写 key 或对象的属性.不需要添加任何特字符号 --> <if test="accin!=null and accin!=''"> and accin=#{accin} </if> <if

mybatis的插件机制

我的未来我决定 提交于 2019-12-03 09:25:12
一、mybatis的插件介绍 关于mybatis的插件,我想大家也都用过,就比如最常用的逆向工程,根据表结构生成model,dao,xml文件,还有分页插件,那这些插件的工作原理是怎么样的呢,就比如分页插件,它为什么能改变我们在xml文件中写的sql语句,本文将带大家一起来了解mybatis的插件机制。(由于本人也是在不断学习,文中难免有错误或不足之处,还望指正,本文基于mybatis3.3.0版本),下面将围绕这几个方面 1、插件入口,即怎么把插件注入到mybatis代码里面 2、插件能拦截哪些类或哪些方法 3、举例简易分表插件 二、插件入口 在先了解前,我们来一段自定义mybatis插件的代码 1 import org.apache.ibatis.executor.statement.StatementHandler; 2 import org.apache.ibatis.plugin.*; 3 4 import java.sql.Connection; 5 import java.util.Properties; 6 7 @Intercepts( 8 value = { 9 @Signature( 10 type = StatementHandler.class, 11 method = "prepare", 12 args = {Connection.class} //

java面试小结——框架(hibernate、MyBatis、spring、Spring MVC)

ε祈祈猫儿з 提交于 2019-12-03 08:16:06
Hibernate 什么是ORM 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些? 所谓”持久”就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: - 数据存储逻辑的分离,提供抽象化的数据访问接口。 - 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。 - 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。 - 数据抽象,提供更面向对象的数据操作。 持久层框架有: - Hibernate - MyBatis - TopLink - Guzz - jOOQ - Spring Data - ActiveJDBC Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗

web-简单总结

青春壹個敷衍的年華 提交于 2019-12-03 08:15:12
1. MyBatis 说出你所了解的持久层(ORM)框架 mybatis,hibernate,jpa,jooq object relationship mapping 建立java 对象与关系型数据库之间的映射关系 mybatis 是轻量级的 orm,hibernate 是重量级的(用注解方式建立orm关系,很多sql由框架生成) jpa 是一套接口,hibernate 同时也作为 jpa 2)什么是 MVC,你的项目中哪里体现了 MVC 模型(model) - 数据,domain,java bean 视图(view) - 数据的展现方式,jsp 控制器(controller) - 把模型和视图联系在一起,对应着 servlet 3)梳理一下 MyBatis 的使用步骤 pom.xml 中添加 mybatis 依赖 resources/mybatis-config.xml 配置文件(配置数据库连接和映射关系) 提供 xml mapper 或 接口 映射 (都是通过这些映射管理 sql 语句) 使用 mybatis 的api 执行增删改查 4)列举 MyBatis 中重要的接口,它们分别是干什么的? SqlSessionFactory (接口) - 创建 sqlsession 的 SqlSessionFactoryBuilder (类) - 创建工厂对象 SqlSession (接口

Mybatis面试题一

半腔热情 提交于 2019-12-03 07:26:41
1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; (3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 (4

MyBatis动态SQL和缓存

瘦欲@ 提交于 2019-12-03 05:30:49
1. 什么是动态SQL 静态SQL:静态SQL语句在程序运行前SQL语句必须是确定的,SQL语句中涉及的表的字段名必须是存在的,静态SQL的编译是在程序运行前的。 动态SQL:动态SQL语句是在程序运行是被创建和执行的。 2. MyBatis中的动态SQL 为什么需要动态SQL?有时候需要根据实际传入的参数来动态的拼接SQL语句。 对于一些复杂的查询,我们可能会指定多个查询条件,但是这些条件可能存在也可能不存在,此时就需要根据用户指定的条件动态生成SQL语句。如果不使用持久层框架我们可能需要自己拼装SQL语句 MyBatis中用于实现动态SQL的元素主要有: if choose / when / otherwise trim where set foreach 3. if标签 4. choose标签 5. trim标签 6. set标签 7. foreach标签 动态SQL的另一个常用的操作是需要对一个集合进行遍历,通常在构建in条件语句的时候 foreach标签还可以用于批量保存数据 <insert id="addEmps"> INSERT INTO tbl_employee(user_name,gender,email,d_id) VALUES <foreach collection="emps" item="emp" separator=","> (#{emp

Mybatis的动态sql的处理

[亡魂溺海] 提交于 2019-12-03 05:28:22
SQL语句中的特殊符号 特殊符号 < <= > >= & ‘ “ 替换 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot; 动态 sql语句的需求 概念:映射文件中的sql语句不是固定的,根据传递的参数的个数,sql语句需要动态的改变。 比如:多条件查询的需求 根据用户填写的条件不同会导致执行的sql语句不一样 select * from tuser ; select * from tuser where id = ? select * from tuser where name = ? 等等 从上述需求看:sql语句根本不能确定下来,在这种需求下面,Mybatis创造了一些新的标签,可以用来判断、循环等sql标签。 常用的 Mybatis的动态标签 利用Mybatis的工具类生成需要的实体类、dao接口、映射文件 多条件查询的实现 或者 来源: https://www.cnblogs.com/Tunan-Ki/p/11780044.html

MyBatis入门

半腔热情 提交于 2019-12-03 05:26:15
title: MyBatis入门 date: 2018-07-12 15:22:24 tags: [Java,MyBatis] categories: 框架 1. MyBatis 简介 MyBatis是一个优秀的 持久层框架 ,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。 Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回 2. MyBatis架构 MyBatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息、 mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载 SqlSessionFactory 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂 SqlSession