mybatis动态sql

MyBatis 框架工作流程

别来无恙 提交于 2019-11-27 05:49:48
MyBatis 框架工作流程 1.MyBatis项目列表 官网列出的项目列表: 项目 描述 MyBatis 3 用于Java的SQL映射框架 Generator MyBatis代码生成器 Migrations 数据库变更迁移管理工具 Migrations Maven Plugin 数据库变更迁移管理工具Maven插件 MyBatipse MyBatis Eclipse插件 MyBatis for Scala 用于Scala的SQL映射框架 MyBatis Dynamic SQL 用于MyBatis和Spring JDBC模板的SQL生成器 整合项目: 项目 描述 Spring 与Spring集成 Spring Boot Starter 与Spring Boot集成 Guice 与Guice集成 CDI 与CDI集成 Velocity Velocity脚本插件 Freemarker Freemarker脚本插件 OSCache OSCache缓存插件 EHCache 的Ehcache缓存插件 Hazelcast Hazelcast缓存插件 Memcached Memcached缓存插件 Redis Redis缓存插件 Ignite Apache Ignite缓存插件 以上项目用于不同的框架中: 对于 Spring Boot Servlet Web 项目

mybatis的动态SQL

走远了吗. 提交于 2019-11-26 23:42:35
在没有使用动态SQL的时候,所有的sql语句都是程序员提前写好的,我们可以通过传递不同的参数来获取不同的查询结果。 例子:有一个功能要根据班级和人名来进行查询,如何客户端只传来班级信息就根据班级查询,如果只传来人名就根据人名来查询,如果班级和人名都有就根据两个信息查询。当然这个功能不使用动态SQL也能实现,编写三条SQL语句,根据客户端传来的不同参数调用不同的SQL语句查询,但这样如果遇到更复杂的功能就需要编写大量的查询语句,不利于开发效率。 这时候通过动态SQL就能很好的解决这个问题. 动态SQL就是能在mapper xml中添加逻辑判断,动态生成sql语句; 动态SQL介绍:(动态SQL都很好理解,有编程基础的基本一看就懂了) 1,<if>标签 :如果test属性为真,就将标签之间的内容添加到sql语句中 <select id="selByAccinAccout" resultType="log"><!--添加1=1是防止后面没有内容,sql会不规范--> select * from log where 1=1 <!-- OGNL 表达式,直接写 key 或对象的属性.不需要添加任何特字符号 -->  <!--accin为传递进来的参数,可以直接通过名字引用--> <if test="accin!=null and accin!=''"> and accin=#{accin}

mybatis(九)强大的动态SQL

丶灬走出姿态 提交于 2019-11-26 22:06:27
上篇文章简单介绍了mybatis的查询,至此,CRUD都已讲完。本文将介绍mybatis强大的动态SQL。 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用?   传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if, choose, when, otherwise, trim, where, set, foreach标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率。下面就去感受Mybatis动态SQL的魅力吧: 1. if: 你们能判断,我也能判断! 作为程序猿,谁不懂 if ! 在mybatis中也能用 if 啦: <select id="findUserById" resultType="user"> select * from user where <if test="id != null"> id=#{id} </if> and deleteFlag=0; </select> 上面例子: 如果传入的id 不为空, 那么才会SQL才拼接id = #{id}。 这个相信大家看一样就能明白,不多说。 细心的人会发现一个问题:“你这不对啊! 要是你传入的id为null, 那么你这最终的SQL语句不就成了 select * from

综合技术 --myBatis理解

两盒软妹~` 提交于 2019-11-26 17:14:50
myBatis是一个基于java的持久层框架,它提供的持久层框架包括 SQL Maps和Data Access Objescts(DAO)。 myBatis是支持普通的SQL查询、存储过程和高级映射的持久层框架。myBatis使用简单的XML或注释用于配置和原始映射,将接口和java的对象映射成数据库中的记录。 每个myBatis应用程序主要都是使用sqlSesionFactory实例的,一个 sqlSesionFactory实例可以通过 sqlSesionFactoryBuilder获得, sqlSesionFactoryBuilder可以从一个XML配置文件或者一个预定义的配置类的实例获得。 用xml文件可以很方便的构建 sqlSesionFactory实例,配置的时候推荐使用 类路径资源,当然也可以使用其他的reader实例。myBatis有一个资源类--Resources,它有很多方法,可以方便的从类路径及其它位置加载资源。 myBatis的流程 1.加载配置文件并初始化 触发条件:加载配置文件 将SQL的配置信息加载成为一个个的MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。 2.接收调用请求 触发条件:调用myBatis提供的api 传入参数:为SQL的ID和传入参数对象 处理过程:将请求传递给下层的请求处理层

mybatis总结

二次信任 提交于 2019-11-26 16:43:07
总体来说 MyBatis 主要完成两件事情 根据 JDBC 规范建立与数据库的连接; 通过Annotaion/XML+JAVA反射技术,实现 Java 对象与关系数据库之间相互转化 优点: 1. 易于上手和掌握。 2. sql写在xml里,便于统一管理和优化。 3. 解除sql与程序代码的耦合。 4. 提供映射标签,支持对象与数据库的orm字段关系映射 5. 提供对象关系映射标签,支持对象关系组建维护 6. 提供xml标签,支持编写动态sql。 缺点: 1. sql工作量很大,尤其是字段多、关联表多时。 2. sql依赖于数据库,导致数据库移植性差。 3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。 4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null) 5. DAO层过于简单,对象组装的工作量较大。 6. 不支持级联更新、级联删除。 7. 编写动态sql时,不方便调试,尤其逻辑复杂时。 8 提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。 9. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。 10.

mybaits注解开发动态sql异常:Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 758; 元素内容必须由格式

半腔热情 提交于 2019-11-26 13:57:23
报错信息: Could not find value method on SQL annotation. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 50; 元素内容必须由格式正确的字符数据或标记组成。 "<script>"+ "select user_id,IFNULL(`level`,0) as level from users where currencyId=# {currencyId} and \n" + " snapshot_time>='#{startTime} " "and snapshot_time<=#{endTime} " + " and user_id in" +"<foreach collection='userIds' item='item' open='(' separator=',' close=')'>" + " #{item} " + "</foreach>"+ "</script>" 我们看sql语句发现没有任何问题,原因mybatis把他认为是一个xml格式。xml中不能包含 <(小于号

MyBatis——动态SQL

谁都会走 提交于 2019-11-26 09:22:26
一、动态 SQL :   1. 条件判断:   ( 1 ) if 标签: <if test=" age != null and age != '' "> and age = #{age} </if>   ( 2 ) choose 标签: 类似java中的switch语句;一个when成立即结束choose,如果都不满足执行otherwise; <choose> <when test=""></when> <when test=""></when> <otherwise></otherwise> </choose>   2. 拼关键字:   ( 1 ) where 标签: 自动忽略首个and/or; <where> <if test="state != null"> AND state = #{state} </if> <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </where>   ( 2 ) set 标签: 自动剔除不相关的逗号;     使用if+set组合标签,某项值为null时,保持数据库原值; <set> <if test

总结

我的未来我决定 提交于 2019-11-25 19:41:58
第一章 初始MyBatis 1.1.1 为什么学习框架技术使用ppt模板制作文档的优点如下: 1. 不用考虑布局,排版等问题,提高了效率。2. 可以专心于ppt内容,使演讲的质量更有保障。3. 新手也可以制作很专业的幻灯片演讲稿A1. 不用再考虑公共问题,框架已经帮我们做好了2. 可以专心于业务逻辑,保证核心业务逻辑的开发质量3. 结构统一,便于学习和维护4. 框架中集成了前人的经验,可以帮助新人写出稳定,性能优良而且结构优美的高质量程序。 1.1.2 框架概念框架是一个提高了可重用的公共结构的半成品。它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是提供了可重用的设计。 1.1.3 主流框架的介绍1. Struts 2 框架Struts 2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁 2. Hibernate框架 Hibernate 是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。 3. Spring框架 Spring也是一个开源框架。它的目标是使现有的javaee技术更容易使用和促进良好的编程习惯 4. SpringMVC框架 SpringMVC是Spring框架提供的构建web应用程序的全功能MVC模块,属于SpringFramework的后续产品