mybatis动态sql

Mybatis介绍(一)

左心房为你撑大大i 提交于 2019-11-30 04:30:54
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是支持普通SQL查询,存储过程和高级映射的持久化框架,底层是对JDBC的封装,是一个半自动的ORM框架。 MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 一、Mybatis的功能架构 第一层:API接口层 提供给外部使用的接口API,开发人员通过这些本地API来操作数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 MyBatis和数据库的交互有两种方式: 使用传统的MyBatis提供的API; 传递Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession对象完成和数据库的交互;MyBatis提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和MyBatis 自身配置信息的维护操作。但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,MyBatis

Java 最常见19个模块面试题—第十三块答案

谁说我不能喝 提交于 2019-11-29 23:55:14
Java 最常见19个模块面试题—第十三块答案 十三、Mybatis 1. mybatis 中 #{}和 ${}的区别是什么? #{}是预编译处理, KaTeX parse error: Expected 'EOF', got '#' at position 21: …串替换; Mybatis在处理#̲{}时,会将sql中的#{}替… {}时,就是把${}替换成变量的值; 使用#{}可以有效的防止SQL注入,提高系统安全性。 2. mybatis 有几种分页方式? 数组分页 sql分页 拦截器分页 RowBounds分页 3. mybatis 逻辑分页和物理分页的区别是什么? ** 物理分页速度上并不一定快于逻辑分页,逻辑分页速度上也并不一定快于物理分页。 物理分页总是优于逻辑分页:没有必要将属于数据库端的压力加诸到应用端来,就算速度上存在优势,然而其它性能上的优点足以弥补这个缺点。 4. mybatis 是否支持延迟加载?延迟加载的原理是什么? Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 它的原理是,使用CGLIB创建目标对象的代理对象

从 JDBC 到 MyBatis

本秂侑毒 提交于 2019-11-29 21:53:16
JDBC Java Date Base Connectivity Java数据库连接, 是一种执行SQL语句的Java API, 由一组用java语言编写的类和接口组成。 API Application Programming Interface 应用程序编程接口 JDBC实现查询分析 我们先看看我们最熟悉也是最基础的通过 JDBC 查询数据库数据,一般需要以下 七个步骤: 1、加载JDBC驱动 2、建立并获取数据库连接 3、创建 JDBC Statements 对象 4、设置SQL语句的传入参数 5、执行SQL语句并获得查询结果 6、对查询结果进行转换处理并将处理结果返回 7、释放相关资源(关闭Connection,关闭Statement,关闭ResultSet) JDBC的缺点 JDBC演变到Mybatis的优化 第一步优化:连接获取和释放 1、数据库连接的获取和关闭——>数据库 连接池 ——>解决资源浪费的问题 ( 通过连接池就可以反复利用已经建立的连接去访问数据库了。 减少连接的开启和关闭的时间。 ) 2、可以通过 DataSource 进行隔离解耦, 我们统一从 DataSource 里面获取数据库连接 第二步优化:SQL统一存取 我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处: 1、可读性很差,不利于维护以及做性能调优 2

MyBatis的发展和选型

走远了吗. 提交于 2019-11-29 16:06:19
xlecho编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!! 参考文章列表: ORM框架的简单介绍 数据层框架的发展史 JDBC编码的几大问题和MyBatis等框架的发展支持原因? 在最初编写JDBC连接数据库的时候,各种代码操作较为复杂,而且有很多缺陷。缺陷总结如下: 方法的封装问题 数据源的支持 映射结果集的接收和处理 SQL语句硬编码 程序参数只能按照顺序传入(占位符) 没有实现实体类到数据库记录的映射 没有提供缓存等功能 工具类封装的出现解决了一部分问题 相应的工具类如:springjdbc、jdbcutils、Apache DbUtils等。这样的工具类主要解决了一下几个问题: 方法的封装 数据源的支持 映射结果集 工具类的响应实现解决了部分JDBC的缺陷,但是并不完美。每一次的改进和工具类的出现的就是我们框架的前身出现,框架也是工具。在越来越完善的解决方案的出现之后,ORM框架基本就成型了。同时解决了以上JDBC列出来的各种问题。 ORM框架,全称Object Relational Mapping,对象关系的映 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统

sql面试题整理

倾然丶 夕夏残阳落幕 提交于 2019-11-29 09:54:13
1、 10条SQL优化技巧 2、 58到家MySQL数据库开发规范 3、 java.sql.Date和java.util.Date的联系和区别 4、 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 5、 MyBatis里面的动态Sql是怎么设定的?用什么语法? 6、 MYSQL如何优化?结合你的经验 7、 MySQL存储引擎- MyISAM与InnoDB区别 8、 MySQL数据库索引技巧与索引优化 9、 mysql的sql语句优化方法面试题总结 10、 Mysql的引擎有哪些?支持事物么?DB储存引擎有哪些? 11、 Mysql的数据库表锁、行锁、页级锁 12、 oracle数据库笔试题:sql统计出有两门以上的课的分数在80分以上的学生的姓名和年龄? 13、 postgresql在order by时候联合索引失效 14、 sql Server中float、real、decimal(numeric)数据类型的区别 15、 sqlserver中char(n)、varchar(n)、text有什么区别? 16、 sqlserver中nchar(n)、nvarchar(n)、ntext有什么区别? 17、 sql优化 18、 SQL怎么优化执行效率更高? 19、 SQL笔试:Student学生表,Course 课程表,Sc选课表 20、 SQL笔试题

MyBatis源码流程分析

假如想象 提交于 2019-11-29 07:07:29
mybatis核心流程三大阶段 Mybatis的初始化 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 Product:要创建的复杂对象 Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建; ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例; Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建; 建造者模式 使用场景   ·需要生成的对象具有复杂的内部结构,实例化对象时要屏蔽掉对象内部的细节,让上层代码与复杂对象的实例化过程解耦,可以使用建造者模式;简而言之,如果“遇到多个构造器参数时要考虑用构建器”;   ·对象的实例化是依赖各个组件的产生以及装配顺序,关注的是一步一步地组装出目标对象,可以使用建造器模式; 建造者模式与工厂模式之间的区别: Mybatis的初始化 MyBatis建造者类图 映射器的关键类 Configuration :

Mybatis学习三(动态sql语句)

拈花ヽ惹草 提交于 2019-11-29 03:24:46
动态sql语句主要为以下语句 1、动态SQL:if 语句 2、动态SQL:if+where 语句 3、动态SQL:if+set 语句 4、动态SQL:choose(when,otherwise) 语句 5、动态SQL:trim 语句 6、动态SQL: SQL 片段 7、动态SQL: foreach 语句 之前的几篇学习博客我用mybatis对一张表进行的CRUD操作,但是 SQL 语句都比较简单,如果有比较复杂的 SQL 语句,经常需要拼接,而拼接 SQL稍微不注意就容易出错此时我们可以用mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签来解决这个问题,这几个标签可组合成非常灵活的SQL语句,用起来也是很舒服 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <!-- namespace:表示名称空间。现在的目的是区分id的. --> 5 <mapper namespace="com.zhiyou100.zhl.dao

MyBatis-----1.MyBatis简介和使用

跟風遠走 提交于 2019-11-29 03:24:42
MyBatis 介绍 : MyBatis 是一款优秀的 持久层框架 ,它支持定制化 SQL 、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object, 普通的 Java 对象 ) 映射成数据库中的记录。 MyBatis 的特点: l 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar 文件 + 配置几个 sql 映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 l 灵活: mybatis 不会对应用程序或者数据库的现有设计强加任何影响。 sql 写在 xml 里,便于统一管理和优化。通过 sql 语句可以满足操作数据库的所有需求。 l 解除 sql 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。 sql 和代码的分离,提高了可维护性。 l 提供映射标签,支持对象与数据库的 orm 字段关系映射 l 提供对象关系映射标签,支持对象关系组建维护 l 提供 xml 标签,支持编写动态 sql 。 (以上内容摘自百度百科,网址: https://baike

mybatis动态SQL

大兔子大兔子 提交于 2019-11-29 02:30:31
1.sql片段:sql语句中重复使用的可以提取成sql片段供调用(如数据表中的字段) sql标签是sql片段,id是被调用时用的 <sql id= "all" > u_id,u_username,u_password,u_sex,u_createtime,u_createtime,u_delete </sql> sql片段用include标签调用 <include refid="all"></include> 2.where+if where标签会在返回的sql语句前加where再去除and或or <select id="selectByWhere" resultMap="BaseMap"> select <include refid="all"></include> from tb_user <where> <if test="uid!=0"> and u_id=#{uid} </if> <if test="username!=null and username!=''"> <!-- 模糊查询 --> and u_username like concat('%',#{username},'%') </if> </where> </select> 以上还用了模糊查询:用concat函数拼接% 3.set+if set标签会在返回的sql前加set再去除最后的,(逗号)

Mybatis(动态sql标签)

杀马特。学长 韩版系。学妹 提交于 2019-11-29 01:49:32
   动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。 MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。   SQL标签(if,choose,where,trim,foreach) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zhiyou100.hhz.dao.UsersDao"> <!-- 动态sql片段 --> <sql id="userscolumn">id,name,sex,age,created</sql> <select id="selectByWhere" parameterType="int" resultType="com.zhiyou100.hhz.bean.Users"> select <include refid="userscolumn"/> from users <!-- where