mybatis动态sql

MyBatis的动态SQL语句

走远了吗. 提交于 2020-01-20 22:28:59
文章目录 1. 动态SQL之<if>标签 2. 动态SQL之<where>标签 3. 动态SQL之<foreach>标签 4. MyBatis中的SQL片段 1. 动态SQL之<if>标签 我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果username不为空时还要加入用户名作为条件,这种情况在我们的多条件组合查询中经常会碰到。 <?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.joker.dao.IUserDao " > < select id = " findByUser " resultType = " user " parameterType = " user " > select * from user where 1=1 < if test = " username!=null and username != ' ' " > and username like #{username} </ if > < if test =

Mybatis分页查询与动态SQL

杀马特。学长 韩版系。学妹 提交于 2020-01-20 03:20:48
一、Mybatis的分页查询    由于第一二节较为详细讲述了Mybatis的环境搭建,文件配置,SQL编写和Java代码实现,所以接下来的讲述都将只抽取关键代码和mapper文件中的关键sql,详细的流程和案例可参见《 Mybatis入门和简单Demo 》和《 Mybatis的CRUD案例 》。   (1)无条件的分页的mapper文件配置和Java代码实现 <!-- 传入的参数类型为map,此时无需使用map.get("key")去获得实际值,只需填入key值便可 --> <select id="findByPage" parameterType="map" resultMap="studentMap"> select id,name,age,sex from student limit #{start},#{end} </select> /* * 无条件分页查询 */ public List<Student> findByPage(int start,int end) { SqlSession sqlSession = null; try{ sqlSession = MyBatisUtil.getSqlSession(); Map<String,Object> param = new LinkedHashMap<String,Object>(); param.put(

mybatis的select、insert、update、delete语句

不打扰是莪最后的温柔 提交于 2020-01-17 17:52:15
源地址: https://www.cnblogs.com/yufeng218/p/6622644.html 一、select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.CLASS_ID FROM STUDENT_TBL ST WHERE ST.STUDENT_ID = #{studentID} </select> 这条语句就叫做‘getStudent,有一个String参数,并返回一个StudentEntity类型的对象。 注意参数的标识是:#{studentID}。 select 语句属性配置细节: 属性 描述 取值 默认 id 在这个模式下唯一的标识符,可被其它语句引用 parameterType 传给此语句的参数的完整类名或别名 resultType 语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用) resultMap 引用的外部resultMap 名

MyBatis使用注解执行sql语句

无人久伴 提交于 2020-01-17 13:41:08
首先官方文档中的说明: https://mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 映射器注解 因为最初设计时,MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的。而到了 MyBatis 3,就有新选择了。MyBatis 3 构建在全面且强大的基于 Java 语言的配置 API 之上。这个配置 API 是基于 XML 的 MyBatis 配置的基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。 注意 不幸的是,Java 注解的的表达力和灵活性十分有限。尽管很多时间都花在调查、设计和试验上,最强大的 MyBatis 映射并不能用注解来构建——并不是在开玩笑,的确是这样。比方说,C#属性就没有这些限制,因此 MyBatis.NET 将会比 XML 有更丰富的选择。也就是说,基于 Java 注解的配置离不开它的特性。 1.在注解上使用sql语句,或者通过xml的形式使用动态sql 2.使用provider的方式来生成sql语句: https://www.cnblogs.com/JoeyWong/p/9457118.html 来源: CSDN 作者: bdlaxx 链接: https://blog.csdn

大剑无锋之不都说面试不问mybatis,为什么我被虐了。。。【mybatis面试题】

廉价感情. 提交于 2020-01-17 02:17:44
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>为不支持自增的主键生成策略标签。 3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问

Mybatis原理分析之一:从JDBC到Mybatis

给你一囗甜甜゛ 提交于 2020-01-16 23:15:47
1.引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架。再而论述Mybatis作为一个数据持久层框架本身有待改进之处。 2.JDBC实现查询分析 我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个步骤: (1) 加载JDBC驱动 (2) 建立并获取数据库连接 (3) 创建 JDBC Statements 对象 (4) 设置SQL语句的传入参数 (5) 执行SQL语句并获得查询结果 (6) 对查询结果进行转换处理并将处理结果返回 (7) 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet) 以下是具体的实现代码: Java代码 public static List<Map<String,Object>> queryForList(){ Connection connection = null ; ResultSet rs = null ; PreparedStatement stmt = null ; List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>(); try { //加载JDBC驱动 Class.forName( "oracle.jdbc

MyBatis学习笔记(3)-动态SQL

不羁岁月 提交于 2020-01-16 02:27:55
动态SQL 是MyBatis最核心的功能和最强大的特性之一,在使用原生JDBC进行连接数据库时,若要完成SQL语句拼接,程序员需要小心翼翼地完成代码,非常不方便,而MyBatis基于OGNL表达式的动态SQL机制,对SQL语句进行灵活操作,通过表达式进行判断,对SQL进行灵活拼接、组装。 总体说来mybatis 动态SQL 语句主要有以下几类: if 语句 (简单的条件判断) where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误) foreach (在实现 mybatis in 语句查询时特别有用) choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀) set (主要用于更新时) 其中前三个是最常用的,本文也主要介绍这三种语句。 If语句 在UserMapper.xml文件中作如下配置 <!-- 传递pojo综合查询用户信息 --> <select id="findUserList" parameterType="user" resultType="user"> select * from user where 1=1 <if test="id!=null

MyBatis 笔记

安稳与你 提交于 2020-01-15 14:03:49
官方文档: 英文: https://mybatis.org/mybatis-3/ 中文: https://mybatis.org/mybatis-3/zh/index.html MyBatis概述 什么是MyBatis MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 Mybatis与其他持久化方式对比 MyBatis是一个半自动化的持久化框架 JDBC是SQL夹在Java代码中,耦合度高导致硬编码,维护不易且实际开发中SQL会经常变化 Hibernate和JPA是内部自动产生的SQL语句,不容易做特殊优化,长而复杂的SQL,hibernate处理也不容易,是基于全映射的全自动化框架,大量子弹的pojo进行部分映射比较困难,导致数据库性能下降 对于开发人员,核心SQL需要自己优化,所以需要SQL和java编码分开,功能界面明显,一个专注业务,一个专注数据 文档资料 下载地址:https://github.com/mybatis/mybatis-3 中文文档:http://www.mybatis.org

Mybatis知识点总结

旧时模样 提交于 2020-01-15 05:56:52
1.什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2.MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 3.Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 推荐看起来比较清晰的PageHelper分页原理 3)PageHelper首先将前端传递的参数保存到page这个对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响,接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,完成分页。 4.Mybatis的插件运行原理

Mybatis框架相关知识详解

旧巷老猫 提交于 2020-01-14 03:17:03
Mybatis框架 1、什么是Mybatis? 2、Mybatis的优点 3、Mybatis的缺点 4、Mybatis框架的适用场合 5、#{}和${}的区别是什么 6、实体类中的属性名和表中的字段名不一样,怎么办? 8、编写模糊查询like语句 9、Dao接口的工作原理 10、Mybatis分页原理 11、Mybatis的映射形式 12、使用MyBatis的mapper接口调用时有哪些要求? 13、resultType与resultMap的区别 14、在mapper中如何传递多个参数? 15、Mybatis的Executor执行器 16、Mybatis的动态sql 17、Mybatis的关联查询和实现方式以及区别 18、Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系 19、Mybatis的接口绑定以及其实现方式 20、Mybatis缓存 21、Mybatis延迟加载 22、Mybatis的基本工作流程 23、Mybatis实行一对多的操作方式 24、Mybatis实行一对一的操作方式 1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能