mybatis动态sql

SSM框架--mybatis

醉酒当歌 提交于 2020-02-03 07:15:19
五.mybatis相关 1.jdbc介绍 JDBC是Java制定的接口,数据库产商依照该接口编写与自家数据库配套的实现类。比如MySQL、Oracle、SqlServer等都有自己的不同实现,这些实现类的集合既是我们笼统意义上的“驱动”。 2.preparedstatement和statement的区别 数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,语法语义解析优化sql语句,指定执行计划执行并返回结果 但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如select 的where子句值不同,update的set子句值不同,insert 的values值不同).如果每次都需要经过上面的词法语义解析,语句优化,制定执行计划等,则效率就明显不行了 所谓预编译语句就是将这类语句的值用占位符替代,可以视为将sql语句模板或者说参数化 什么是预编译(将这条sql(解析完成)语句放入缓存执行计划中,如果有相同的sql语句进来,就会直接执行该sql(解析完成)语句,省去解析的过程) 下面列出PreparedStatement的几点优势。 1.PreparedStatement可以写动态参数化的查询用PreparedStatement你可以写带参数的sql查询语句

Mybatis面试题目

爱⌒轻易说出口 提交于 2020-01-29 04:45:26
${s}与#{s}的区别 1.${s}是Properties文件中的变量占位符,属于静态文本替换,比如 d r i v e r 会 被 静 态 替 换 为 c o m . m y s q l . j d b c . D r i v e r 。 e g : i d = {driver}会被静态替换为com.mysql.jdbc.Driver。eg:id= d r i v e r 会 被 静 态 替 换 为 c o m . m y s q l . j d b c . D r i v e r 。 e g : i d = {1 Or 1=1}(sql注入问题)。即传入的s是什么花括号中就是什么。 2.#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,***在sql执行前***会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。使用#{}可以有效的防止SQL注入,提高系统安全性。一般能用#的就别用 , , , 方式一般用于传入数据库对象,例如传入表名. 3.用法:select * from user where name

Mybatis的高级查询&批量删除&批量添加&Mybatis集成SSM

亡梦爱人 提交于 2020-01-29 00:31:00
一、映射Mapper 接口方法映射到对应的SQL XXXMapper.xml的命名空间名称就是Mapper接口的全限定名 Mapper接口上也可以通过相应的注释来写SQL(但是最好不要这么写哦) // 查询全部 // @Select("select * from employee") List < Employee > findAll ( ) ; employeeMapper.xml < ? 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 = "cn.cxm.mapper.mapper.EmployeeMapper" > < select id = "findOne" parameterType = "long" resultType = "cn.cxm.mapper.domain.Employee" > SELECT * FROM employee WHERE id = # { id } < / select > < select id

MyBatis4:动态SQL

蓝咒 提交于 2020-01-27 01:26:37
什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件串联SQL字符串在一起是多么地痛苦,确保不能忘了空格或者在列表的最后的省略逗号,动态SQL可以彻底处理这种痛苦。 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。 动态SQL元素和使用JSTL或其它相似的基于XML的文本处理器相似,在MyBatis之前的版本中,有很多元素需要了解,MyBatis3大大地提升了它们,现在用不到原先一半的元素就能工作了,MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。 OK,介绍就到这儿,下面来进入动态SQL的学习吧。 if 在动态SQL中所做的最通用的事情就是包含部分where子句的条件,比如: <select id="selectInCondition" parameterType="student" resultType="student"> select * from student where studentId > #{studentId} <if test="studentName != null"> and studentName = #{studentName}; </if> </select>

[转帖]Mybatis十八连环问!这谁顶得住?

落花浮王杯 提交于 2020-01-24 01:24:04
Mybatis十八连环问!这谁顶得住? http://www.itpub.net/2020/01/19/5130/ 1、#{}和${}的区别是什么? 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。 2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 答:还有很多其他的标签,<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey

Mybatis入门

依然范特西╮ 提交于 2020-01-23 23:53:58
Mybatis入门 Mybatis简介 Mybatis中文官网: http://www.mybatis.cn/82.html Mybatis前身 Mybatis的前身是Apache的开源框架iBatis,与Hibernate一样是一个Java持久层的框架。 Mybatis的优势在于灵活,它几乎可以替代JDBC,同时提供了接口编程。目前Mybatis的数据访问层DAO(Data Access Object)是不需要实习类的,它只需要一个接口和XML(或者注解),建议使用注解来实现。Mybatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性,使用方便,同时也对SQL进行优化。因为其具有封装少,映射多样化,支持存储过程,可以进行SQL优化等特点,是的它取代了Hibernate成为Java互联网中首选持久层框架。 Mybatis的三个优点 1.不屏蔽SQL,意味着可以更为精确定位SQL语句,可以对其进行优化和改造,这有利于互联网系统性能的提高,符合互联网需要性能优化的特点。 2.提供强大、灵活的映射机制,方便Java开发者使用。提供动态SQL的功能,允许我们根据不同组装SQL,这个功能远比其他工具或者Java编码的可读性和可维护性高得多,满足各种应用系统的同时也满足了需求经常变化的互联网应用的要求。 3.在Mybatis中,提供了使用Mapper的接口编程

115网盘怎么搜索资源

孤者浪人 提交于 2020-01-23 21:51:43
1、啥是 MyBatis? MyBatis 是一个半自动 ORM 持久层框架,她内部对 JDBC 做了封装,并使用 XML 或注解来配置和映射数据库信息,开发人员只需要关注 SQL 语句本身,避免了处理繁琐的数据库映射过程,使 Java 代码和 SQL 完全分离,有利于分层开发,提高开发效率和灵活性。 2、MyBatis 的优缺点和适用场景? 1)优点 基于SQL语句编程,非常灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除SQL与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 能够与Spring很好的集成; 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。 2)缺点 SQL语句的编写工作量较大,尤其当字段多、关联表多时。 不支持方言,数据库移植性差。 SQL存在XML文件中,调试不方便。 对动态SQL的支持不是很好,提供的标签过于简单。 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。 3)适用场景 MyBatis 解耦了 SQL 和 程序代码

MyBatis源码的学习(20)---如何从jdbc到mybatis?

一曲冷凌霜 提交于 2020-01-23 20:59:21
mybatis源码解读,基本简单的流程已经解析的差不多了,这里做个总结:从架构的角度,分析下如何把jdbc封装成myBatis的。 原生的jdbc代码步骤: 1.获取连接(连接信息等可以从配置文件中获取) 2.sql 3.创建statement对象 4.设置参数 5.执行statement 6.结果集映射为java类型 7.释放资源 从架构的角度看问题: 首先,连接信息需要的驱动,数据源信息。可以抽取到配置文件中。 第二,那么sql语句是否也可以提取到配置文件,然后我们从配置文件读sql语句 第三,我们sql中的参数如何赋值 第四,reseultSet如何转为我们需要的java类型 其实,mybatis就是帮我们解决了这四个问题的。 我们的配置信息需要存储:Confguration, 我们的数据库连接时信息需要存储 :DataSource 然后我们的sql怎么存储呢? Mapper.xml文件,还有每一个sql语句这些信息需要存储 XMLMapperBuilder MapperBuilderAssistant XMLStatementBuilder MappedStatement XMLScriptBuilder 然后我们的sql信息的存储 SqlSource SqlNode BoundSql 我们的参数的存储 public class BoundSql { private

mybatis动态sql之bind标签

时光怂恿深爱的人放手 提交于 2020-01-21 22:51:27
<select id="" resultType=""> select * from tbl_employee where last_name like #{lastName} </select> 一般我们进行模糊查询时,都会在java端输入: List<Employee> employees = mapper.getEmpByLastNameLike("%小%"); 如果我们想在xml文件中进行这种处理: "%#{lastName}%" 这样肯定是不行的,#{}只是个占位符,"%#{lastName}%"会被当做一整个字符串。 当然我们可以这样做: "%${lastName}%" 但是这样不安全,此时就可以使用bin标签: <select id="" resultType=""> <bind name="_lastName" value="'%'+lastName+'%'"/> select * from tbl_employee where last_name like #{_lastName} </select> 说明:bind标签中name是为该值取别名,value是其具体的值,可以使用ongl表达式。 来源: https://www.cnblogs.com/xiximayou/p/12227198.html

Mybatis 学习笔记 -雷云龙

纵然是瞬间 提交于 2020-01-21 17:53:32
Mybatis 学习笔记 -雷云龙 一 、mybatis概述 mybatis是java持久层框架,即是操作数据库的。内部封装了jdbc,只需要关注sql 本身 mybatis通过xml 或者注解 的方式将需要执行的statement配置起来,并通过java对象和statement中sql 的动态参数进行映射,最终生成完整的sql,最后mybatis 执行sql 并将结果映射成对象返回 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装 二、mybatis 入门 1、环境搭建 1.坐标 < dependencies > < dependency > < groupId > org.mybatis </ groupId > < artifactId > mybatis </ artifactId > < version > 3.5.0 </ version > </ dependency > < dependency > < groupId > mysql </ groupId > < artifactId > mysql-connector-java </ artifactId > < version > 5.1.6 </ version > < scope > runtime </ scope > </ dependency > < dependency > <