之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。
MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句
方法名 | 说明 |
---|---|
SELECT(String.column) | 根据字段拼接查询语句 |
FROM(String…table) | 根据表名拼接语句 |
WHERE(String…condition) | 根据条件拼接语句 |
INSERT_INTO(String table) | 根据表名拼接新增语句 |
VALUES(String column,String values) | 根据字段和值拼接插入数据语句 |
UPDATE(String table) | 根据表名拼接修改语句 |
DELETE_FROM(String table) | 根据表名拼接删除语句 |
… … | … … |
测试类:
- package Mybatis4.sql;
-
- import org.apache.ibatis.jdbc.SQL;
-
- public class SqlTest {
- public static void main(String[] args) {
- /* String sql = getSql();
- System.out.println(sql);
- }
- //定义方法,获取查询student表的sql语句
- public static String getSql() {
- String sql = "SELECT * FROM student";
- return sql;*/
-
- String sql = getSql();
- System.out.println(sql);
- }
-
- public static String getSql() {
- String sql = new SQL(){//通过SQL类提供的方法来实现sql语句的编写
- {
- SELECT("*");
- FROM("student");
- }
- }.toString();
- return sql;
- }
- }
定义功能类并提供获取查询的SQL语句的方法
@SelectProvider:生成查询用的SQL语句注解
type属性:生成SQL语句功能类对象
method属性:指定调用方法
新建功能类ReturnSql:
- package Mybatis4.sql;
-
- import org.apache.ibatis.jdbc.SQL;
-
- public class ReturnSql {
- //定义方法,返回查询的sql语句
- public String getSelectAll() {
- return new SQL() {
- {
- SELECT("*");
- FROM("student");
- }
- }.toString();
- }
- }
修改StudentMapper:
- //查询全部
- //@Select("SELECT * FROM student")
- //注意:method只是指定一个方法的名字,SelectProvider内部会自己调用
- @SelectProvider(type = ReturnSql.class , method = "getSelectAll")
- public abstract List
selectAll();
定义功能类并提供获取新增的SQL语句的方法
@InsertProvider:生成新增用的SQL语句注解
type属性:生成SQL语句功能类对象
method属性:指定调用方法
ReturnSql:
- //定义方法,返回新增的sql语句
- public String getInsert(Student stu) {
- return new SQL() {
- {
- INSERT_INTO("student");
- INTO_VALUES("#{id},#{name},#{age}");
- }
- }.toString();
- }
修改StudentMapper:
- //新增操作: sql的参数与之前的写法一致,从insert方法的参数中获取对应属性值
- //@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")
- @InsertProvider(type = ReturnSql.class , method = "getInsert")
- public abstract Integer insert(Student stu);
定义功能类并提供获取修改的SQL语句的方法
@UpdateProvider:生成修改用的SQL语句注解
type属性:生成SQL语句功能类对象
method属性:指定调用方法
ReturnSql:
- //定义方法,返回修改的sql语句
- public String getUpdate(Student stu) {
- return new SQL() {
- {
- UPDATE("student");
- SET("name=#{name}","age=#{age}");
- WHERE("id=#{id}");
- }
- }.toString();
- }
修改StudentMapper:
- //修改操作
- //@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")
- @UpdateProvider(type = ReturnSql.class , method = "getUpdate")
- public abstract Integer update(Student stu);
定义功能类并提供获取删除的SQL语句的方法
@DeleteProvider:生成删除用的SQL语句注解
type属性:生成SQL语句功能类对象
method属性:指定调用方法
ReturnSql:
- //定义方法,返回删除的sql语句
- public String getDelete(Integer id) {
- return new SQL() {
- {
- DELETE_FROM("student");
- WHERE("id=#{id}");
- }
- }.toString();
- }
修改StudentMapper:
- //删除操作
- //@Delete("DELETE FROM student WHERE id=#{id}")
- @DeleteProvider(type = ReturnSql.class , method = "getDelete")
- public abstract Integer delete(Integer id);