mybatis动态sql

MyBatis动态SQL,含分页功能

依然范特西╮ 提交于 2020-04-06 19:21:17
1. 写一个SqlProvider类: public class DynamicSql { public String sql(String sql){ return sql; } } 2. 写一个Mapper类: @Mapper public interface DynamicMapper { @SelectProvider(type=DynamicSql.class, method = "sql") List< HashMap<String,Object>> get(String sql); } 3. 使用实例: List< HashMap<String,Object>> clients = dynamicMapper.get(" SELECT * FROM client"); 4. 带分页功能: PageHelper.startPage(1, 10); List< HashMap<String,Object>> clients = dynamicMapper.get(" SELECT * FROM client"); return AjaxResult.success( new PageInfo(clients)); //此行按需求灵活处理 来源: oschina 链接: https://my.oschina.net/u/4006447/blog/3215512

MyBatis Plus自定义SQL使用条件构造器QueryWrapper

淺唱寂寞╮ 提交于 2020-04-05 17:07:21
1.注解的方式: @Select("select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment}") IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); 使用注解方式只需添加 ${ew.customSqlSegment}和@Param(Constants.WRAPPER)即可! 2.xml方式 IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); <!--xml--> <select id="selectPosts" resultType="com.example.entity.Post"> select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment} </select> 动态查找: @Select("select ${ew.SqlSelect} from ${tableName} ${ew

MyBatis基本应用

微笑、不失礼 提交于 2020-04-02 09:25:40
Mybatis(iBatis)简介 : (前身为iBatis)MyBatis是一个可以自定义SQL,存储过程和高级映射的持久层框架。MyBatis消除了几乎所以是JDBC代码和参数的手工设置以及结果集的检索。MyBatis可以使用简单的XML或注解用于配制和原始映射,将接口和JavaPOJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 作用:封装了JDBC操作,简化了数据库的访问 功能如下:——封装了获取连接,执行SQL,释放连接 ——封装了SQL参数设置 ——封装了记录映射成实体对象的过程,实体类的属性名与结果查询结果集ResultSet中列名保持一致 开发者:写SQL和实体类,然后使用SqlSession对象执行sql操作 MyBatis体系结构主要由以下几个关键部分 (1)加载配置 配置有两种形式,一种是XML配置文件,另一种是Java代码的注解。MyBatis将SQL的配置信息加载成为一个个MappdStatement对象( 包括了传入参数映射配置,执行的SQL语句,结果映射配置),并将其存储在内存中。 (2)SQL解析 当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map,JavaBean或者基本数据类型)MyBatis会根据SQL的ID找到对应的MappedStatement

Mybatis 动态SQL

一个人想着一个人 提交于 2020-03-28 08:42:14
Mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。 以 User 表为例来说明: 1、 if 语句 根据 username 和 sex 来查询数据。如果username为空,那么将只根据sex来查询;反之只根据username来查询 首先不使用 动态SQL 来书写 <select id="selectUserByUsernameAndSex" resultType="user" parameterType="com.ys.po.User"> <!-- 这里和普通的sql 查询语句差不多,对于只有一个参数,后面的 #{id}表示占位符,里面不一定要写id, 写啥都可以,但是不要空着,如果有多个参数则必须写pojo类里面的属性 --> select * from user where username=#{username} and sex=#{sex} </select> 上面的查询语句,我们可以发现,如果 #{username} 为空,那么查询结果也是空,如何解决这个问题呢?使用 if 来判断 <select id="selectUserByUsernameAndSex"

MyBatis映射器(转载)

心已入冬 提交于 2020-03-27 02:29:19
<div class="post-content" itemprop="articleBody"> <h2>什么是MyBatis映射器?</h2><p>MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等。在<a href="http://www.mybatis.cn/680.html" target="_blank">MyBatis的配置文件mybatis-config.xml</a>包含了<mappers></mappers>节点,这里就是MyBatis映射器。</p><h2>1、MyBatis映射器发展历史简介</h2><p>映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持XML映射器,所有的SQL语句都必须在XML文件中配置。而从MyBatis 3开始,开始支持接口映射器,其底层利用的是接口绑定技术(注:面试中经常会问到的一个知识点,见下文5.1项介绍)。另外,接口映射器允许通过注解定义SQL语句,用以替代XML文件配置SQL。</p><h2>2、MyBatis映射器分类</h2><h3>MyBatis映射器分为三类,如下所示:</h3><p>(1)纯xml映射器,利用SqlSession的各种方法实现增删改查。例如:</p><pre><code

MyBaits理解?

自作多情 提交于 2020-03-23 06:59:23
(1)MyBaits是一个基于Java的持久层框架,支持普通或定制化SQL查询、存储过程以及高级映射,使用XML或注解来配置和映射信息。 (2)应用程序使用SQLSessionFactory实例,一个SQLSessionFactory实例可以通过SQLSessionFactoryBuilder获得。SQLSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。 (3)SQL写在xml里,便于统一管理和优化,解除SQL与程序代码的耦合,通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试,提高了可维护性。 (4)提供映射标签,支持对象与数据库的orm字段关系映射,支持编写动态SQL,支持对象关系组建维护。 (5)总体流程:<1>加载配置并初始化<2>接收调用请求<3>处理操作请求<4>返回处理结果将最终的处理结果返回。 (6)处理过程: <1>根据SQL的ID查找对应的MappedStatement对象。 <2>根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。 <3>获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。 <4>根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理

MyBatis框架及原理分析

☆樱花仙子☆ 提交于 2020-03-23 06:40:29
文章转载自 https://www.cnblogs.com/luoxn28/p/6417892.html 感觉写的不错。 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。 MyBatis的配置 MyBatis框架和其他绝大部分框架一样,需要一个配置文件,其配置文件大致如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="false"/> <!--<setting name="logImpl" value="STDOUT

MyBatis持久层框架学习之01 MyBatis的起源和发展

柔情痞子 提交于 2020-03-23 05:47:04
一、MyBatis的简介    MyBatis 是支持定制化 SQL、存储过程以及 高级映射 的优秀的持久层框架。   MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML或注解用于配置和原始映射, 将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 . 二、MyBatis的历史    原是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation 迁移到了google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11月迁移到Github。   iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)    三、MyBatis的基本说明   (1)、MyBatis是一个工作在持久层的框架,它 不再是一个标准的ORM框架      我们先看看Hibernate是如何对数据库进行操作    我们再来看看Mybatis如何对数据库进行操作    因为它只管理了SQL语句和Java之间的关联和映射

Mybatis 框架学习

邮差的信 提交于 2020-03-23 05:45:35
Mybatis 一. 入门 1. JDBC 回顾 (1). 准备数据库 新建 mybatis_learn 数据库 执行 sql 脚本 1 -- ---------------------------- 2 -- Table structure for `Blog` 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `Blog`; 5 CREATE TABLE `Blog` ( 6 `id` int(11) NOT NULL AUTO_INCREMENT, 7 `author` varchar(128) NOT NULL COMMENT '作者', 8 `title` varchar(128) NOT NULL COMMENT '博客标题', 9 PRIMARY KEY (`id`) 10 ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 11 ​ 12 -- ---------------------------- 13 -- Records of Blog 14 -- ---------------------------- 15 INSERT INTO `Blog` VALUES ('1', '张三', 'Java基础概述'); 16 INSERT

Mybatis(二) Mybatis通用的写法

落花浮王杯 提交于 2020-03-22 16:55:26
2.1 用来循环容器的标签forEach,查看例子   foreach元素的属性主要有item,index,collection,open,separator,close。 item:集合中元素迭代时的别名, index:集合中元素迭代时的索引 open:常用语where语句中,表示以什么开始,比如以'('开始 separator:表示在每次进行迭代时的分隔符, close 常用语where语句中,表示以什么结束,   在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况: 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list . 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array . 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.   针对最后一条,我们来看一下官方说法: 注意 你可以将一个 List 实例或者数组作为参数对象传给