之前通过注解开发时,相关 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);