史上最简单的MyBatis动态SQL入门示例代码
程序员文章站
2024-03-04 17:07:29
假如有如下的关于书籍基本信息的表:
drop database if exists `books`;
create database `books`;
use...
假如有如下的关于书籍基本信息的表:
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入门示例代码,希望对大家有所帮助
上一篇: 详解Java的闭包
下一篇: Android多线程学习实例详解