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

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="multiSearch" 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> multiSearch(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.multiSearch(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.multiSearch("Java", "", "", ""); //查询到4条
//List<Book> books=tc.multiSearch("Java", "机械", "", ""); //3条
//List<Book> books=tc.multiSearch("Java", "机械", "8", ""); //2条
List<Book> books=tc.multiSearch("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("----------------------------------");
}
}
}

0048 MyBatis动态SQL简易入门示例的更多相关文章

  1. MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】

    (第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...

  2. MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】

    (第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...

  3. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

  4. 超全MyBatis动态SQL详解!( 看完SQL爽多了)

    MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...

  5. mybatis 动态sql和参数

    mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...

  6. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    目录 0 一起来学习 mybatis 1 数据准备 2 if 标签 2.1 在 WHERE 条件中使用 if 标签 2.1.1 查询条件 2.1.2 动态 SQL 2.1.3 测试 2.2 在 UPD ...

  7. Java EE数据持久化框架 • 【第4章 MyBatis动态SQL】

    全部章节   >>>> 本章目录 4.1 MyBatis动态标签 4.1.1  MyBatis动态标签介绍 4.1.2 < if >标签 4.1.3 update语 ...

  8. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  9. 自己动手实现mybatis动态sql

    发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...

随机推荐

  1. vmware 下 ubuntu 不能全屏显示 的解决方法

    vmware 下 ubuntu 不能全屏显示 在 vmware 下 安装 ubuntu后,默认分辨率是 800 * 600,可以设置以全屏显示: 设置步骤: vmware 下启动 虚拟机,即 启动 u ...

  2. Android源代码编译apk导入第三方包报错

    报错内容例如以下: make: *** 没有规则能够创建"out/target/common/obj/APPS/ AndroidWFS_intermediates/classes-full- ...

  3. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

    定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target——要以本地特定的顺序与 stringObject 进行比较的字 ...

  4. 《深入理解Java虚拟机》笔记4

    垃圾回收器是垃圾回收算法的实现,Java虚拟机的设计者为了 获取最大的性价比,也在不断改进中.硬件在不断变化,多核 的普及,基于单核的收集器应该已经没有太大意义了.Java7中 又新增了g1收集器,没 ...

  5. django中根据模型生成页面的脚手架app-groundwork

    相信做过Asp.net MVC的朋友对在此框架下,根据模型自动生成浏览,编辑,查看,删除的四个页面的脚手架功能记忆尤新,那么我们在用python中的django框架时,有没有此脚手架功能呢,很显然,默 ...

  6. Echarts 获取后台数据 使用后台数据展示 柱形图

    后台数据要以json格式返回 页面:引用echarts.js , 然后data以ajax的数据请求并返回 <%@ page language="java" import=&q ...

  7. 给Swing的GUI组件设置前景色和背景色

    JButton btn=new JButton("TEST"); btn.setForeground(Color.white);// 设置前景色(文字颜色)btn.setBackg ...

  8. eclipse缺省的Server没有weblogic

    转自:http://www.javakfz.com/index.php/08/06/471.html eclipse缺省的Server没有weblogic,因此要下载个weblogic的插件.这个过程 ...

  9. js重置form表单

      CreateTime--2017年7月19日10:37:11Author:Marydon js重置form表单 需要使用的方法:reset() 示例: HTML部分 <form id=&qu ...

  10. 09-spring学习-资源访问接口

    目标: 1,掌握Resource接口的使用. 2,掌握ResourceLoader接口的使用. 3,掌握各种资源数据的读取操作. 具体内容: 要想进行资源读取操作,首先想到IO包中提供的操作类. 但是 ...