0048 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="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简易入门示例的更多相关文章
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】
(第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...
- 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 ...
- Java EE数据持久化框架 • 【第4章 MyBatis动态SQL】
全部章节 >>>> 本章目录 4.1 MyBatis动态标签 4.1.1 MyBatis动态标签介绍 4.1.2 < if >标签 4.1.3 update语 ...
- mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- 自己动手实现mybatis动态sql
发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...
随机推荐
- OSC的原理
OSC是Online Schema Change简写,即在线架构改变.其实现步骤: 1. init,即初始化阶段,会对创建的表做一些验证工作,如检查表是否有主键,是否存在触发器或者外键等.2. cre ...
- 七.使用fastJson解析器
1.到入jar包 <!-- 添加fastjson 依赖包. --> <dependency> <groupId>com.alibaba</groupId> ...
- [转载]抓包工具Charles乱码解决办法
FROM: http://blog.csdn.net/huanghanqian/article/details/52973651 安装 SSL 证书 Mac 端 首先去 http://www.char ...
- RocketMQ概念整理
DefaultMessageStore 消息的存储和提取. 相对重要的两个方法: 消息存储 PutMessageResult putMessage(MessageExtBrokerInner msg) ...
- JedisCluster操作redis集群demo
package com.chenk; import java.util.HashMap; import java.util.HashSet; import java.util.List; import ...
- PHP基础知识(二)
Global namespace //看不懂看下面的中文 中英结合看看 When using namespaces, you may find that internal functions(内部( ...
- .Net Framework 之 托管代码和非托管代码的区别
一.什么是托管代码(managed code)? 托管代码:是微软的中间语言(IL),即微软中间语言MSIL(Microsoft Interspace Language). “ 源代码→机器码 ”运行 ...
- iOS 调用音乐播放以及视频播放器
音乐播放 NSString *path = [[NSBundle mainBundle] pathForResource:@"预谋" ofType:@"mp3" ...
- 分布式消息系统Jafka入门指南
分布式消息系统Jafka入门指南 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.JafkaMQ简单介绍 JafkaMQ是一个分布式的公布/订阅消息系 ...
- eslint for...in 报错处理
示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...