• 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)根据表名拼接删除语句
    … …

    … …

    测试类:

    1. package Mybatis4.sql;
    2. import org.apache.ibatis.jdbc.SQL;
    3. public class SqlTest {
    4. public static void main(String[] args) {
    5. /* String sql = getSql();
    6. System.out.println(sql);
    7. }
    8. //定义方法,获取查询student表的sql语句
    9. public static String getSql() {
    10. String sql = "SELECT * FROM student";
    11. return sql;*/
    12. String sql = getSql();
    13. System.out.println(sql);
    14. }
    15. public static String getSql() {
    16. String sql = new SQL(){//通过SQL类提供的方法来实现sql语句的编写
    17. {
    18. SELECT("*");
    19. FROM("student");
    20. }
    21. }.toString();
    22. return sql;
    23. }
    24. }

    2.查询功能的实现

    定义功能类并提供获取查询的SQL语句的方法

    @SelectProvider:生成查询用的SQL语句注解

        type属性:生成SQL语句功能类对象

        method属性:指定调用方法

    新建功能类ReturnSql:

    1. package Mybatis4.sql;
    2. import org.apache.ibatis.jdbc.SQL;
    3. public class ReturnSql {
    4. //定义方法,返回查询的sql语句
    5. public String getSelectAll() {
    6. return new SQL() {
    7. {
    8. SELECT("*");
    9. FROM("student");
    10. }
    11. }.toString();
    12. }
    13. }

    修改StudentMapper:

    1. //查询全部
    2. //@Select("SELECT * FROM student")
    3. //注意:method只是指定一个方法的名字,SelectProvider内部会自己调用
    4. @SelectProvider(type = ReturnSql.class , method = "getSelectAll")
    5. public abstract List selectAll();

    3.新增功能的实现

    定义功能类并提供获取新增的SQL语句的方法

    @InsertProvider:生成新增用的SQL语句注解

        type属性:生成SQL语句功能类对象

        method属性:指定调用方法

    ReturnSql:

    1. //定义方法,返回新增的sql语句
    2. public String getInsert(Student stu) {
    3. return new SQL() {
    4. {
    5. INSERT_INTO("student");
    6. INTO_VALUES("#{id},#{name},#{age}");
    7. }
    8. }.toString();
    9. }

    修改StudentMapper:

    1. //新增操作: sql的参数与之前的写法一致,从insert方法的参数中获取对应属性值
    2. //@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")
    3. @InsertProvider(type = ReturnSql.class , method = "getInsert")
    4. public abstract Integer insert(Student stu);

    4.修改功能的实现

    定义功能类并提供获取修改的SQL语句的方法

    @UpdateProvider:生成修改用的SQL语句注解

        type属性:生成SQL语句功能类对象

        method属性:指定调用方法

    ReturnSql:

    1. //定义方法,返回修改的sql语句
    2. public String getUpdate(Student stu) {
    3. return new SQL() {
    4. {
    5. UPDATE("student");
    6. SET("name=#{name}","age=#{age}");
    7. WHERE("id=#{id}");
    8. }
    9. }.toString();
    10. }

    修改StudentMapper:

    1. //修改操作
    2. //@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")
    3. @UpdateProvider(type = ReturnSql.class , method = "getUpdate")
    4. public abstract Integer update(Student stu);

    5.删除功能的实现 

    定义功能类并提供获取删除的SQL语句的方法

    @DeleteProvider:生成删除用的SQL语句注解

        type属性:生成SQL语句功能类对象

        method属性:指定调用方法

    ReturnSql:

    1. //定义方法,返回删除的sql语句
    2. public String getDelete(Integer id) {
    3. return new SQL() {
    4. {
    5. DELETE_FROM("student");
    6. WHERE("id=#{id}");
    7. }
    8. }.toString();
    9. }

     修改StudentMapper:

    1. //删除操作
    2. //@Delete("DELETE FROM student WHERE id=#{id}")
    3. @DeleteProvider(type = ReturnSql.class , method = "getDelete")
    4. public abstract Integer delete(Integer id);
  • 相关阅读:
    【Git技巧】第八篇 git历史提交版本回退(可切换任意已经提交的版本)
    送你个低代码福利,错过要再等一年
    VScode platformio的使用
    今天让你知道PMP考试通过率达97%,可信不可信
    安卓常见设计模式11------迭代器模式(Kotlin版)
    优化算法|MOAVOA:一种新的多目标人工秃鹰优化算法(Matlab代码实现)
    前端开发之el-table 表头不换行且宽度自适应
    Mysql主从集群同步延迟问题怎么解决
    RZMO-A-030/210、HZMO-A-030/315电控比例压力阀控制器
    1022 D进制的A+B
  • 原文地址:https://blog.csdn.net/weixin_61611746/article/details/132095371