介绍
这期内容当中小编将会给大家带来有关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命令