MyBatis中如何使用动态SQL命令

  介绍

这期内容当中小编将会给大家带来有关MyBatis中如何使用动态SQL命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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

删除数据库,如果存在“书”;
  创建数据库“书”;
  使用书;
  删除表如果存在“书”;
  创建表的“书”(
  “id”int(11)不是零AUTO_INCREMENT,
  “名字”varchar(128)默认为空,
  “作者”varchar(64)默认为空,
  “新闻”varchar(64)默认为空,
  “豆瓣”浮动默认为空,
  isbn的varchar(13)默认为空,
  主键(“id”)
  )引擎=InnoDB AUTO_INCREMENT=5默认字符集=utf8;
  插入“书”(“名字”,“作者”,“新闻”,“豆瓣”,isbn)值(& # 39;Java编程思想第4版& # 39;,& # 39;(美)Bruce Eckel著& # 39;,& # 39;机械工业出版社& # 39;,9.1,& # 39;9787111213826 & # 39;);
  插入“书”(“名字”,“作者”,“新闻”,“豆瓣”,isbn)值(& # 39;深入理解Java虚拟机JVM高级特性与最佳实践& # 39;,& # 39;周志明著& # 39;,& # 39;机械工业出版社& # 39;,8.8,& # 39;9787111421900 & # 39;);
  插入“书”(“名字”,“作者”,“新闻”,“豆瓣”,isbn)值(& # 39;疯狂Java讲义第3版& # 39;,& # 39;李刚著& # 39;,& # 39;电子工业出版社& # 39;,7.8,& # 39;9787121236693 & # 39;);
  插入“书”(“名字”,“作者”,“新闻”,“豆瓣”,isbn)值(& # 39;深入理解Java 7核心技术与最佳实践& # 39;,& # 39;成富著& # 39;,& # 39;机械工业出版社& # 39;,6.9,& # 39;9787111380399 & # 39;);

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

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

& lt;选择id=癿ultipSearch"parameterType=癿ap"resultType=皀et.sonng.entity.Book"比;   SELECT * FROM书   & lt; where>   & lt;如果测试=懊?=null"比;   名字像#{名称}   & lt;/if>   & lt;如果测试=靶挛?=null"比;   和新闻#{新闻}   & lt;/if>   & lt;如果测试=岸拱?=null"比;   和douban>=#{豆瓣}   & lt;/if>   & lt;如果测试=癷sbn !=null"比;   和isbn=# {isbn}   & lt;/if>   & lt;/where>   & lt;/select>

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

实体类的书,略。

BookDao,略控制器略

服务如下:

包net.sonng.service;
  进口java.util.HashMap;
  进口并不知道;
  进口java.util.Map;
  进口javax.annotation.Resource;
  进口net.sonng.dao.BookDao;
  进口net.sonng.entity.Book;
  进口org.springframework.stereotype.Service;
  @ service
  公开课TestService {
  @
  私人BookDao BookDao;
  公共ListmultipSearch(字符串名称,字符串,字符串豆瓣,字符串isbn) {
  String> Map<字符串;地图=new HashMap ();
  如果名字!=零,,! name.equals (“;”)) {
  map.put (“name"“%”+名称+“%”);
  }
  如果(按!=零,,! press.equals (“;”)) {
  map.put (“press"“%”+新闻+“%”);
  }
  如果(豆瓣!=零,,! douban.equals (“;”)) {
  map.put (“douban"豆瓣);
  }
  如果(isbn !=零,,! isbn.equals (“;”)) {
  map.put (“isbn" isbn);
  }
  返回bookDao.multipSearch(地图);
  }
  }

测试类如下:

包net.sonng.test;
  进口并不知道;
  进口net.sonng.controller.TestController;
  进口net.sonng.entity.Book;
  进口org.springframework.context.ApplicationContext;
  进口org.springframework.context.support.ClassPathXmlApplicationContext;
  公共类测试{
  公共静态void main (String [] args) {
  ApplicationContext ac=new ClassPathXmlApplicationContext (“ac.xml");
  TestController tc=ac.getBean (“testController" TestController.class);//下面的4种查询语句,都可以一条动态SQL执行//List书=tc.multipSearch (“Java",“”,“”,“”);//查询到4条//List书=tc.multipSearch (“Java",“机械“,“”,“”);//3条//List书=tc.multipSearch (“Java",“机械“,“8”,““);//2条
  List书=tc.multipSearch (“Java",“机械“,“8”,“9787111213826“);//1条
  (书书:书){
  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命令