1.构建SQL概述
之前通过注解开发时,相关 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;}
}
2.查询功能的实现
定义功能类并提供获取查询的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<Student> selectAll();
3.新增功能的实现
定义功能类并提供获取新增的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);
4.修改功能的实现
定义功能类并提供获取修改的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);
5.删除功能的实现
定义功能类并提供获取删除的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);