当前位置: 移动技术网 > IT编程>开发语言>Java > 史上最简单的MyBatis动态SQL入门示例代码

史上最简单的MyBatis动态SQL入门示例代码

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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入门示例代码,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网