• 基于手写SQL语句的注解CRUD

    把手写SQL语句的注解CRUD,修改为动态SQL语句方式。

  • CategoryDynaSqlProvider

    新增CategoryDynaSqlProvider,提供CRUD对应的SQL语句。
    这里的SQL语句使用SQL类的方式构建,在 关于SQL类中有更加详细的讲解。

    package com.how2java;import org.apache.ibatis.jdbc.SQL;public class CategoryDynaSqlProvider {public String list() {return new SQL().SELECT("*").FROM("category_").toString();}public String get() {return new SQL().SELECT("*").FROM("category_").WHERE("id=#{id}").toString();}public String add(){return new SQL().INSERT_INTO("category_").VALUES("name", "#{name}").toString();}public String update(){return new SQL().UPDATE("category_").SET("name=#{name}").WHERE("id=#{id}").toString();}public String delete(){return new SQL().DELETE_FROM("category_").WHERE("id=#{id}").toString();}}
  • 修改CategoryMapper

    把本来是手写SQL的CategoryMapper接口,修改为注解引用CategoryDynaSqlProvider类的方式
    比如增加,本来是手写SQL语句的

    @Insert(" insert into category_ ( name ) values (#{name}) ")
    public int add(Category category);  

    修改为了注解@InsertProvider配合CategoryDynaSqlProvider的add方法

    @InsertProvider(type=CategoryDynaSqlProvider.class,method="add")
    public int add(Category category);  
    package com.how2java.mapper;import java.util.List;import org.apache.ibatis.annotations.DeleteProvider;
    import org.apache.ibatis.annotations.InsertProvider;
    import org.apache.ibatis.annotations.SelectProvider;
    import org.apache.ibatis.annotations.UpdateProvider;import com.how2java.CategoryDynaSqlProvider;
    import com.how2java.pojo.Category;public interface CategoryMapper {@InsertProvider(type=CategoryDynaSqlProvider.class,method="add") public int add(Category category); @DeleteProvider(type=CategoryDynaSqlProvider.class,method="delete")public void delete(int id); @SelectProvider(type=CategoryDynaSqlProvider.class,method="get") public Category get(int id); @UpdateProvider(type=CategoryDynaSqlProvider.class,method="update") public int update(Category category);  @SelectProvider(type=CategoryDynaSqlProvider.class,method="list")     public List<Category> list();
    }
  • 查询测试

    用同样的测试类,进行CRUD测试。注意,id值需要根据实际情况调整

    package com.how2java;import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.how2java.mapper.CategoryMapper;
    import com.how2java.pojo.Category;public class TestMybatis {public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();CategoryMapper mapper = session.getMapper(CategoryMapper.class);//        add(mapper);
    //        delete(mapper);
    //        get(mapper);
    //        update(mapper);listAll(mapper);session.commit();session.close();}private static void update(CategoryMapper mapper) {Category c= mapper.get(14);c.setName("修改了的Category名稱");mapper.update(c);listAll(mapper);}private static void get(CategoryMapper mapper) {Category c= mapper.get(14);System.out.println(c.getName());}private static void delete(CategoryMapper mapper) {mapper.delete(13);listAll(mapper);}private static void add(CategoryMapper mapper) {Category c = new Category();c.setName("新增加的Category");mapper.add(c);listAll(mapper);}private static void listAll(CategoryMapper mapper) {List<Category> cs = mapper.list();for (Category c : cs) {System.out.println(c.getName());}}
    }
  • 关于SQL类

    SQL类是用于进行动态SQL生成的,如下代码是一个相对复杂的SQL类的使用举例,以后需要用到的时候,再来参考。

    private String selectPersonSql() {return new SQL() {{SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");FROM("PERSON P");FROM("ACCOUNT A");INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");WHERE("P.ID = A.ID");WHERE("P.FIRST_NAME like ?");OR();WHERE("P.LAST_NAME like ?");GROUP_BY("P.ID");HAVING("P.LAST_NAME like ?");OR();HAVING("P.FIRST_NAME like ?");ORDER_BY("P.ID");ORDER_BY("P.FULL_NAME");}}.toString();
    }

Mybatis注解-注解方式的动态SQL语句相关推荐

  1. Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?

    作者 | 稻草江南 来源 | https://juejin.cn/post/6883081187103866894 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,那么它是怎么 ...

  2. MyBatis学习 之 三、动态SQL语句

    2019独角兽企业重金招聘Python工程师标准>>> 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的, ...

  3. Mybatis—动态SQL语句与逆向工程

    Mybatis动态SQL语句与逆向工程 MyBatis动态SQL语句与逆向工程 1.动态SQL语句 1.1.动态SQL是什么 1.2.动态SQL有什么用 1.3.基于XML的实现 1.3.2.接口文件 ...

  4. Postgresql实现动态SQL语句

    本文介绍Postgresql如何实现动态SQL语句. 1. 动态SQL 动态SQL在程序启动时会根据输入参数替换相应变量.使用动态SQL可以创建更强大和灵活的应用程序,但在编译时SQL语句的全文不确定 ...

  5. Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

    1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...

  6. 02JavaWeb之MyBatis详解、SqlSession执行、mapper代理执行、动态SQL语句、注解开发、resultMap、resultType、多参数传递

    MyBatis MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发,它封装了JDBC大部分的操作. MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由 ...

  7. mybatis的注解开发之三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...

  8. @Select注解动态sql语句

    一.我们先看看xml配置的动态sql语句 二.如何使用注解也能达到这种效果呢? 1.先在sql里面加上标签<script> 2.之后就是用上面的配置,但是得注意双引号,和每一条语句的逗号分 ...

  9. 通用Mapper注解方式实现动态SQL

    1.通用Mapper注解方式实现动态SQL 注意:使用动态SQL后,不能使用分页助手,需要手动写分页SQL 对应的mapper接口实现SelectMapper接口 在对应的mapper接口中的方法上

最新文章

  1. 3D视觉工坊—助学助研计划正式启动!
  2. Oracle密码过期 怎么修改
  3. 全国院线总票房破 50 亿!影院复工后,哪些电影最受欢迎?
  4. PAIP.FLEX与JAVA数据对应关系.txt
  5. php文件同名怎么办,php根据文件不同关闭同名进程
  6. python 实现 BCH 纠错码的方法
  7. [渝粤教育] 西南科技大学 高等数学2 在线考试复习资料
  8. MQ消息队列的优缺点介绍以及对比选型
  9. 项目管理44个过程输入输出工具技术巧记法
  10. win7旗舰版恢复出厂设置没有修复计算机,教你win7旗舰版怎么恢复出厂设置
  11. 领导绝不会告诉你的,提拔干部的三大关键因素
  12. TPS929120的CRC校验的三种实现方法
  13. 最简单DIY基于ESP8266的智能彩灯②(在网页用按键和滑动条控制RGB灯)
  14. 问题xxx: TypeError: __randomstate_ctor() takes from 0 to 1 positional arguments but 2 were given
  15. 可视化神器Plotly绘制热力图
  16. 学Linux到底学什么?老司机来告诉你!
  17. 晶振作为电子产品“心脏”关键部分,究竟是什么原理起到什么作用
  18. android+3g移植,惊呆!普耐尔MOMO迷你3G移植MIUI系统
  19. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/account
  20. 3D游戏 和 3D电影

热门文章

  1. 专访盖国强李轶楠丨通过数据库服务能力评估背后的故事
  2. 网络安全-IIS短文件名枚举漏洞
  3. VRay Next for SketchUp 室外建筑日景表现教程
  4. ORACLE学习详解
  5. 中国无线天线行业市场供需与战略研究报告
  6. K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路
  7. 统计学总结之Bias(偏差),Error(误差),和Variance(方差)的区别
  8. 5G工业路由器出炉带来了哪些影响
  9. jmeter非GUI输出性能测试报告报WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x
  10. 后缀自动机1003 HDU 4416