构建sql:

  • 之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。
  • MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句

常用方法:

查询功能的实现:
  • @SelectProvider:生成查询用的 SQL语句注解

    • type 属性:生成 SQL 语句功能类对象
    • method 属性:指定调用方法
新增功能的实现:
  • @InsertProvider:生成新增用的 SQL 语句注解。

    • type 属性:生成 SQL 语句功能类对象
    • method 属性:指定调用方法
修改功能的实现:
  • @UpdateProvider:生成修改用的 SQL 语句注解。

    • type 属性:生成 SQL 语句功能类对象
    • method 属性:指定调用方法
删除功能的实现:
  • @DeleteProvider:生成删除用的 SQL 语句注解

    • type 属性:生成 SQL 语句功能类对象
    • method 属性:指定调用方法
演示:

SQL类:

public class ReturnSql {//定义方法,返回查询的sql语句public String getSelectAll() {return new SQL() {{SELECT("*");FROM("student");}}.toString();}//定义方法,返回新增的sql语句public String getInsert(Student stu) {return new SQL() {{INSERT_INTO("student");INTO_VALUES("#{id},#{name},#{age}");}}.toString();}//定义方法,返回修改的sql语句public String getUpdate(Student stu) {return new SQL() {{UPDATE("student");SET("name=#{name}","age=#{age}");WHERE("id=#{id}");}}.toString();}//定义方法,返回删除的sql语句public String getDelete(Integer id) {return new SQL() {{DELETE_FROM("student");WHERE("id=#{id}");}}.toString();}
}

接口:

public interface PersonMapper {//查询全部//@Select("SELECT * FROM student")@SelectProvider(type = ReturnSql.class , method = "getSelectAll")public abstract List<Student> selectAll();//新增功能//@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")@InsertProvider(type = ReturnSql.class , method = "getInsert")public abstract Integer insert(Student stu);//修改功能//@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")@UpdateProvider(type = ReturnSql.class , method = "getUpdate")public abstract Integer update(Student stu);//删除功能//@Delete("DELETE FROM student WHERE id=#{id}")@DeleteProvider(type = ReturnSql.class , method = "getDelete")public abstract Integer delete(Integer id);
}

测试:

    @Testpublic void selectAll() throws Exception {//1.加载核心配置文件InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//4.获取One接口的实现类对象PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);//5.调用实现类的方法,接收结果List<Student> list = mapper.selectAll();//6.处理结果for (Student c : list) {System.out.println(c);}//7.释放资源sqlSession.close();is.close();}

Mybatis构建sql语法相关推荐

  1. MyBatis动态SQL语法详解(二)

    文章目录 一.MyBatis查询返回 1.1.MyBatis查询返回对象 1.2.MyBatis查询返回list集合 1.3.MyBatis查询返回Map 1.4.MyBatis查询自定义结果映射规则 ...

  2. MyBatis构建sql时动态传入表名以及字段名

    http://wendy-wxie.iteye.com/blog/1605193 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用 ...

  3. R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句

    R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库.将dplyr语法查询语句翻译为SQL查询语句 目录

  4. MyBatis引起的SQL语法错误

    当我们在使用MyBatis框架时,有时会报SQL语法错误,例如这样 这时我们去检查xml文件里面的SQL语句,也没发现什么错误啊,这个时候你就应该想到是不是由MyBatis这个框架引起的了,因为MyB ...

  5. mybatis的SQL语句构建器

    mybatis的SQL语句构建器 SQLProvider.java package com.qfedu.test;import com.qfedu.pojo.User; import org.apac ...

  6. 使用FluentMybatis实现mybatis动态sql拼装和fluent api语法

    开始第一个例子: Hello World 新建Java工程,设置maven依赖 新建maven工程,设置项目编译级别为Java8及以上,引入fluent mybatis依赖包. <depende ...

  7. mybatis 使用Criteria语法处理sql遇到的时间格式问题

    分享一个好的思路,既然Criteria底层实现也是用的JDBC,那么为什么不可以自己重载自动生成的方法呢?比如我现在的需求是接收前端String类型的时间字段,我数据库里存的时间类型是date,然而C ...

  8. Mybatis 动态Sql语句《常用》

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...

  9. Mybatis—动态SQL语句与逆向工程

    Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...

最新文章

  1. 深度研究自然梯度优化,从入门到放弃 | Deep Reading
  2. clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
  3. 【MATLAB】界面介绍 ( 标题栏 | 选项卡 | 命令窗口 | 编辑器 | 变量命名规则 )
  4. 我对软件行业及大数据的理解
  5. MIT自然语言处理第三讲:概率语言模型(第四、五、六部分)
  6. 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
  7. C++学习笔记:(九)输入/输出流
  8. 概率论 一维随机变量
  9. 系统部门岗位关联表_155页,房地产公司最为系统的岗位说明书,敬请收藏
  10. JavaScript中数组高级编程实践
  11. 数字图像基本操作——图像采样、量化、算术运算、点运算实验结果及分析
  12. 2022-02-27周报
  13. Linux中shell脚本详解
  14. HL340(usb转串口线)驱动
  15. 解决selenium自动化测试时,chrome浏览器自动关闭问题
  16. Win10下蓝牙音箱无法调节音量的解决方案
  17. 灵活替换、无惧缺芯,ARM工控板中的模块化设计
  18. 如何使用omnipeek工具抓取WiFi设备的action帧
  19. Android VR Player(全景视频播放器) [10]: VR全景视频渲染播放的实现(exoplayer,glsurfaceview,opengl es)
  20. Lintcode 2.尾部的零

热门文章

  1. attrib批量显示文件夹_1.2Windows之DOS命令基础篇-学习attrib+del+copy+xcopy命令
  2. linux支持异步io吗,Linux 异步IO
  3. Spring Bean的配置及常用属性
  4. Java字节流的使用
  5. Java字符编码介绍
  6. C语言实现随机抽取纸牌
  7. c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
  8. 自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评
  9. seo vue 动态路由_VUE项目SEO问题的解决
  10. android主板读取vga线数据_智锐通掘金新基建上新系列之3.5quot; 与ATX工业主板图鉴...