史上最简单的MyBatis动态SQL入门示例代码

 更新时间:2017年03月23日 13:51:13   作者:sonng  
动态sql,可以根据用户对字段选择和输入,动态生成一条sql执行。接下来通过本文给大家分享MyBatis动态SQL入门示例代码,一起看看吧

假如有如下的关于书籍基本信息的表:

DROP DATABASE IF EXISTS `books`;
CREATE DATABASE `books`;
USE books;
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(128) DEFAULT NULL,
 `author` varchar(64) DEFAULT NULL,
 `press` varchar(64) DEFAULT NULL,
 `douban` FLOAT DEFAULT NULL,
 `isbn` varchar(13) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `book` (`name`,`author`,`press`,`douban`,`isbn`) VALUES('Java编程思想 第4版','(美)Bruce Eckel著','机械工业出版社',9.1,'9787111213826');
INSERT INTO `book` (`name`,`author`,`press`,`douban`,`isbn`) VALUES('深入理解Java虚拟机 JVM高级特性与最佳实践','周志明著','机械工业出版社',8.8,'9787111421900');
INSERT INTO `book` (`name`,`author`,`press`,`douban`,`isbn`) VALUES('疯狂Java讲义 第3版','李刚著','电子工业出版社',7.8,'9787121236693');
INSERT INTO `book` (`name`,`author`,`press`,`douban`,`isbn`) VALUES('深入理解Java 7 核心技术与最佳实践','成富著','机械工业出版社',6.9,'9787111380399');

用户可能用书名、出版社、豆瓣评分、ISBN中的1~4个字段进行查询,如果用固定的sql语句,那么得写C(4,1)+C(4,2)+C(4,3)+C(4,4)=4+6+4+1=15条sql和15个Dao方法

如果用动态sql,一条语句即可完成,比如这样:

<select id="multipSearch" parameterType="map" resultType="net.sonng.entity.Book">
  SELECT * FROM book 
  <where>
    <if test="name!=null">
      name LIKE #{name}
    </if>
    <if test="press!=null">
      AND press LIKE #{press}
    </if>
    <if test="douban!=null">
      AND douban>=#{douban}
    </if>
    <if test="isbn!=null">
      AND isbn=#{isbn}
    </if>
  </where>
</select>

动态sql,可以根据用户对字段选择和输入,动态生成一条sql执行

实体类Book,略。

BookDao,略

Controller略

Service如下:

package net.sonng.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import net.sonng.dao.BookDao;
import net.sonng.entity.Book;
import org.springframework.stereotype.Service;
@Service
public class TestService {
  @Resource
  private BookDao bookDao;
  public List<Book> multipSearch(String name,String press,String douban,String isbn){
    Map<String,String> map=new HashMap();
    if (name!=null && !name.equals("")) {
      map.put("name", "%"+name+"%");
    }
    if (press!=null && !press.equals("")) {
      map.put("press","%"+press+"%");
    }
    if (douban!=null && !douban.equals("")){
      map.put("douban", douban);
    }
    if (isbn!=null && !isbn.equals("")) {
      map.put("isbn", isbn);
    }
    return bookDao.multipSearch(map);
  }
}

测试类如下:

package net.sonng.test;
import java.util.List;
import net.sonng.controller.TestController;
import net.sonng.entity.Book;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
  public static void main(String[] args){
    ApplicationContext ac=new ClassPathXmlApplicationContext("ac.xml");
    TestController tc=ac.getBean("testController",TestController.class);//下面的4种查询语句,都可以一条动态SQL执行
    //List<Book> books=tc.multipSearch("Java", "", "", "");        //查询到4条
    //List<Book> books=tc.multipSearch("Java", "机械", "", "");      //3条
    //List<Book> books=tc.multipSearch("Java", "机械", "8", "");      //2条
    List<Book> books=tc.multipSearch("Java" ,"机械", "8", "9787111213826");//1条
    for (Book book:books){
      System.out.println(book.getId());
      System.out.println(book.getName());
      System.out.println(book.getIsbn());
      System.out.println(book.getAuthor());
      System.out.println(book.getPress());
      System.out.println(book.getDouban());
      System.out.println("----------------------------------");
    }
  }
}

以上所述是小编给大家介绍的史上最简单的MyBatis动态SQL入门示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java8 Map中新增的方法使用总结

    Java8 Map中新增的方法使用总结

    这篇文章主要介绍了Java8 Map中新增的方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Java8新特性之字符串去重介绍

    Java8新特性之字符串去重介绍

    这篇文章主要介绍了Java8新特性之字符串去重介绍,新的字符串去重特性可以帮助减少应用中String对象的内存占用,目前该特性只适用于G1垃圾收集器,并且默认不被开启,需要的朋友可以参考下
    2014-09-09
  • MyBatisPlus中CRUD使用方法详解

    MyBatisPlus中CRUD使用方法详解

    通用CRUD封装,BaseMapper(opens new window)接口,为Mybatis-Plus启动时自动解析实体表关系映射转换为Mybatis内部对象注入容器
    2023-01-01
  • Springboot配置@Async无效的解决方案

    Springboot配置@Async无效的解决方案

    这篇文章主要介绍了Springboot配置@Async无效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程

    web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程

    这篇文章主要为大家介绍了web.xml SpringBoot打包可执行Jar运行SpringMVC加载流程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java访问权限控制的重要性深入讲解

    Java访问权限控制的重要性深入讲解

    这篇文章主要给大家介绍了关于Java访问权限控制的重要性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • mybatis类型转换器如何实现数据加解密

    mybatis类型转换器如何实现数据加解密

    这篇文章主要介绍了mybatis类型转换器如何实现数据加解密,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 使用springMVC所需要的pom配置

    使用springMVC所需要的pom配置

    这篇文章主要介绍了使用springMVC所需要的pom配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java中自定义Spring Security权限控制管理示例(实战篇)

    java中自定义Spring Security权限控制管理示例(实战篇)

    本篇文章主要介绍了java中自定义Spring Security权限控制管理示例(实战篇) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • idea一招搞定同步所有配置(导入或导出所有配置)

    idea一招搞定同步所有配置(导入或导出所有配置)

    使用intellij idea很长一段时间,软件相关的配置也都按照自己习惯的设置好,如果需要重装软件,还得需要重新设置,本文就详细的介绍了idea 同步所有配置,感兴趣的可以了解一下
    2021-07-07

最新评论