mybatis动态sql

MyBatis 动态SQL

匿名 (未验证) 提交于 2019-12-02 23:34:01
1.概念 根据不同的条件需要执行不同的 SQL 命令.称为动态 SQL MyBatis 中动态 SQL 在 mapper.xml 中添加逻辑判断等. 3. 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 test="accout!=null and accout!=''"> and accout=#{accout} </if> </select> 4.1 当编写 where 标签时,如果内容中第一个是 and 去掉第一个 and 4.2 如果<where>中有内容会生成 where 关键字,如果 没有内容不 生成 where 关键字 4.3 使用示例 比直接使用<if>少写 where 1=1 <select id="selByAccinAccout" resultType="log"> select * from log <where> <if test="accin!=null and accin!=''"> and accin=#

MyBatis源码通~SqlSource

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LHQJ1992/article/details/90320639 SqlSource 构建动态SQL //XMLStatementBuilder.parseStatementNode() SqlSource sqlSource = langDriver . createSqlSource ( configuration , context , parameterTypeClass ) ; 涉及类 LanguageDriverRegistry+LanguageDriver XMLStatementBuilder SqlSource+SqlNode+SqlSourceBuilder MappedStatement 0、 解析Statement中一些重要点 SqlSource如何构建? Sql语句如何和参数拼接成完整的可执行sql? 1、LanguageDriverRegistry+LanguageDriver 在初始化Configuration时,会预先初始化Mybatis提供的两个LanguageDriver的实现类并注册到 LanguageDriverRegistry 中: RawLanguageDriver 和 XMLLanguageDriver ,默认为

mybatis

匿名 (未验证) 提交于 2019-12-02 23:32:01
基本信息: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 特点: 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。 总体流程: (1)加载配置并初始化 触发条件:加载配置文件 处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句

Mybatis 动态Sql语句《常用》

匿名 (未验证) 提交于 2019-12-02 23:06:17
MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 最常用 的就是 if where foreach这几个,一定要重点掌握. 名词解析: OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。 OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成: (1)属性名称(property) (2)方法调用(method invoke) (3)数组元素 所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。例如:names[0].length()。 mybatis 的 动态sql语句 是 基于OGNL表达式 的。可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:   1. if 语句 (简单的条件判断)   2. choose (when,otherwize) ,相当于java 语言中的 switch

如何优雅地使用MyBatis注解版

匿名 (未验证) 提交于 2019-12-02 22:56:40
1 第3-3课:如何优雅地使用MyBatis注解版 自从 Java 1.5 开始引入了注解,注解便被广泛地应用在了各种开源软件中,使用注解大大地降低了系统中的配置项,让编程变得更为优雅。MyBatis 也顺应潮流基于注解推出了 MyBatis 的注解版本,避免开发过程中频繁切换到 XML 或者 Java 代码中,从而让开发者使用 MyBatis 会有统一的开发体验。 因为最初设计时,MyBatis 是一个 XML 驱动的框架,配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的,而到了 MyBatis 3,就有新选择了。MyBatis 3 构建在全面且强大的基于 Java 语言的配置 API 之上,这个配置 API 是基于 XML 的 MyBatis 配置的基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。 1.1 注解版 注解版的使用方式和 XML 版本相同,只有在构建 SQL 方面有所区别,所以本课重点介绍两者之间的差异部分。 1.1.1 相关配置 注解版在 application.properties 只需要指明实体类的包路径即可,其他保持不变: mybatis.type-aliases-package=com.neo.model spring.datasource.url=jdbc:mysql:/

MyBatis框架之SQL映射和动态SQL

匿名 (未验证) 提交于 2019-12-02 21:53:52
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能。下面是SQL映射文件的几个顶级元素的配置:   1.mapper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下:     (1)用于区分不同的mapper,全局唯一。     (2)绑定DAO接口,即面向接口编程,当绑定一个接口,就不用写此接口的实现类,会通过接口的完全限定名找到对应的mapper配置来执行SQL语句, 所以,namespace的命名必须要写接口的完全限定名。   2.cache:配置给定命名空间的缓存。   3.cache-ref:从其他命名空间引用缓存配置。   4.resultMap:用来描述数据库结果集和对象的对应关系。   5.sql:可以重用的SQL块,也可以被其他语句引用。   6.insert:映射插入语句。   7.update:更新映射语句。   8.delete:删除映射语句。   9.select:映射查询语句。 2.使用select完成单条件查询   <select id = "GetUserByName" resultType = "User" parameterType = "string">     select *

JavaEE高级-MyBatisPlus学习笔记

匿名 (未验证) 提交于 2019-12-02 21:52:03
第 1 章 简介 1.1 MyBatisPlus 介绍   -MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具包,只做增强不做改变. 为简化开发工作、提高生产率而生我们的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 1.2 代码及文档发布地址   官方地址:      http://mp.baomidou.com   代码发布地址:     Github: https://github.com/baomidou/mybatis-plus     Gitee: https://gitee.com/baomidou/mybatis-plus   文档发布地址:     http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B 1.3 前置知识 Mybatis Spring Maven 第 2 章 集成 MP   2.1 创建测试表     -- 创建库       CREATE DATABASE mp;     -- 使用库       USE mp;     -- 创建表       CREATE TABLE tbl_employee(         id INT(11) PRIMARY KEY AUTO_INCREMENT,         last_name

mybatis入门使用

对着背影说爱祢 提交于 2019-12-02 21:30:00
1.编写mybatis.xml文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 配置 mybatis 的环境 --><environments default="mysql"><!-- 配置 mysql 的环境 --><environment id="mysql"><!-- 配置事务的类型 --><transactionManager type="JDBC"></transactionManager><!-- 配置连接数据库的信息:用的是数据源(连接池) --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ee50"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment><

Mybatis从认识到了解

匿名 (未验证) 提交于 2019-12-02 20:54:39
Ŀ¼ SqlSessionFactoryBuilder SqlSessionFactory SqlSession SQL Mapper resultMap 首发日期:2018-10-31 MyBatis是Apache旗下的开源项目,是一个持久层框架 与Hibernate的全自动ORM框架可以仅仅依靠映射关系进行SQL查询不同,MyBatis是一个基于SQL语句的半自动ORM框架,它需要我们手动去定义SQL语句。 与JDBC的对比中,MyBatis是基于ORM的,天然要比JDBC强,基于ORM使得MyBatis具有查询的数据可以自动封装到对象中的等好处,而JDBC需要手动编码的位置就较多了(就算是使用DButils,你也需要使用定义不同的方法来给不同的持久类赋值。)。 在互联网应用程序开发中,对于存储过程和复杂的SQL,Hibernate并没有很好地去处理,所以它比较难提升性能(并不是说不能,而是耗费心思较多),无法满足高并发和高响应的需求(如果要强行优化,又破坏了Hibernate的全自动ORM设计)。 与之对应的,Mybatis可以说是基于SQL的,它需要我们去自定义SQL,那么我们可以根据需要去设计和优化SQL,这种可针对SQL的优化的持久层框架,恰巧符合高并发和高响应的互联网应用程序开发开发需求。 ORM区别: Hibernate是完全面向POJO的,它基本不需要编写SQL

mybaits注解形式批量插入数据

本小妞迷上赌 提交于 2019-12-02 20:41:04
mybaits xml 文件配置形式很容易写出来,官方也给出了例子, 例如: http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html 代码 foreach动态sql就可以实现批量插入数据. mybaits注解形式批量插入数据,就需要自己拼接成sql语句. @InsertProvider(type = UserMapperProvider.class, method = "inserAll") int insertAll(List<User> list); public static class UserMapperProvider { public String inserAll(Map<String, List<User>> map) { List<User> list = map.get("list"); StringBuilder stringBuilder = new StringBuilder(256); stringBuilder.append("insert into \"spring4_2015_user\" (\"loginName\", \"name\", \"password\", \"salt\",\"email\",\"status\",\"teamId\") values ");