Mybatis构建sql语法
构建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语法相关推荐
- MyBatis动态SQL语法详解(二)
文章目录 一.MyBatis查询返回 1.1.MyBatis查询返回对象 1.2.MyBatis查询返回list集合 1.3.MyBatis查询返回Map 1.4.MyBatis查询自定义结果映射规则 ...
- MyBatis构建sql时动态传入表名以及字段名
http://wendy-wxie.iteye.com/blog/1605193 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用 ...
- R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库、将dplyr语法查询语句翻译为SQL查询语句
R语言构建仿真数据库(sqlite)并使用dplyr语法和SQL语法查询数据库.将dplyr语法查询语句翻译为SQL查询语句 目录
- MyBatis引起的SQL语法错误
当我们在使用MyBatis框架时,有时会报SQL语法错误,例如这样 这时我们去检查xml文件里面的SQL语句,也没发现什么错误啊,这个时候你就应该想到是不是由MyBatis这个框架引起的了,因为MyB ...
- mybatis的SQL语句构建器
mybatis的SQL语句构建器 SQLProvider.java package com.qfedu.test;import com.qfedu.pojo.User; import org.apac ...
- 使用FluentMybatis实现mybatis动态sql拼装和fluent api语法
开始第一个例子: Hello World 新建Java工程,设置maven依赖 新建maven工程,设置项目编译级别为Java8及以上,引入fluent mybatis依赖包. <depende ...
- mybatis 使用Criteria语法处理sql遇到的时间格式问题
分享一个好的思路,既然Criteria底层实现也是用的JDBC,那么为什么不可以自己重载自动生成的方法呢?比如我现在的需求是接收前端String类型的时间字段,我数据库里存的时间类型是date,然而C ...
- Mybatis 动态Sql语句《常用》
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
- Mybatis—动态SQL语句与逆向工程
Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...
最新文章
- 深度研究自然梯度优化,从入门到放弃 | Deep Reading
- clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
- 【MATLAB】界面介绍 ( 标题栏 | 选项卡 | 命令窗口 | 编辑器 | 变量命名规则 )
- 我对软件行业及大数据的理解
- MIT自然语言处理第三讲:概率语言模型(第四、五、六部分)
- 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
- C++学习笔记:(九)输入/输出流
- 概率论 一维随机变量
- 系统部门岗位关联表_155页,房地产公司最为系统的岗位说明书,敬请收藏
- JavaScript中数组高级编程实践
- 数字图像基本操作——图像采样、量化、算术运算、点运算实验结果及分析
- 2022-02-27周报
- Linux中shell脚本详解
- HL340(usb转串口线)驱动
- 解决selenium自动化测试时,chrome浏览器自动关闭问题
- Win10下蓝牙音箱无法调节音量的解决方案
- 灵活替换、无惧缺芯,ARM工控板中的模块化设计
- 如何使用omnipeek工具抓取WiFi设备的action帧
- Android VR Player(全景视频播放器) [10]: VR全景视频渲染播放的实现(exoplayer,glsurfaceview,opengl es)
- Lintcode 2.尾部的零
热门文章
- attrib批量显示文件夹_1.2Windows之DOS命令基础篇-学习attrib+del+copy+xcopy命令
- linux支持异步io吗,Linux 异步IO
- Spring Bean的配置及常用属性
- Java字节流的使用
- Java字符编码介绍
- C语言实现随机抽取纸牌
- c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
- 自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评
- seo vue 动态路由_VUE项目SEO问题的解决
- android主板读取vga线数据_智锐通掘金新基建上新系列之3.5quot; 与ATX工业主板图鉴...