欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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