MyBatis构建SQL

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 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);

你可能感兴趣的:(Mybatis,mybatis,sql,数据库)