mybatis动态sql

mybatis动态sql

课程目标

1、mybatis动态sql
2、模糊查询
3、查询返回结果集的处理
4、分页查询
5、特殊字符处理

mybatis动态sql

以foreach为例

接口类 BookMapper:

package com.xy.mapper;

import com.xy.model.Book;
import com.xy.model.BookVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BookMapper {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);
/*动态sqlforeach*/
    List<Book> selectBooksIn(@Param("bookIds") List bookIds);

}

BookMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xy.mapper.BookMapper" >
  <resultMap id="BaseResultMap" type="com.xy.model.Book" >
    <constructor >
      <idArg column="bid" jdbcType="INTEGER" javaType="java.lang.Integer" />
      <arg column="bname" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
    </constructor>
  </resultMap>
  <sql id="Base_Column_List" >
    bid, bname, price
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bid = #{bid,jdbcType=INTEGER}
  </select>

  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from t_mvc_book
    where bid = #{bid,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.xy.model.Book" >
    insert into t_mvc_book (bid, bname, price
      )
    values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.xy.model.Book" >
    insert into t_mvc_book
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="bid != null" >
        bid,
      </if>
      <if test="bname != null" >
        bname,
      </if>
      <if test="price != null" >
        price,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="bid != null" >
        #{bid,jdbcType=INTEGER},
      </if>
      <if test="bname != null" >
        #{bname,jdbcType=VARCHAR},
      </if>
      <if test="price != null" >
        #{price,jdbcType=REAL},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.xy.model.Book" >
    update t_mvc_book
    <set >
      <if test="bname != null" >
        bname = #{bname,jdbcType=VARCHAR},
      </if>
      <if test="price != null" >
        price = #{price,jdbcType=REAL},
      </if>
    </set>
    where bid = #{bid,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.xy.model.Book" >
    update t_mvc_book
    set bname = #{bname,jdbcType=VARCHAR},
      price = #{price,jdbcType=REAL}
    where bid = #{bid,jdbcType=INTEGER}
  </update>

<!--讲解foreach标签-->
  <select id="selectBooksIn" resultType="com.xy.model.Book" parameterType="java.util.List">
    select * from t_mvc_book where bid in
    <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
      #{bid}
    </foreach>
  </select>


</mapper>

接口类 BookService:

package com.xy.service;

import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.utils.PageBean;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 10:57
 */
public interface BookService {
    int deleteByPrimaryKey(Integer bid);

    Book selectByPrimaryKey(Integer bid);

/*foreach动态sql*/
    List<Book> selectBooksIn(List bookIds);


}

实现类 BookServiceImpl:

package com.xy.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xy.mapper.BookMapper;
import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.service.BookService;
import com.xy.utils.PageBean;

import java.util.List;
import java.util.Map;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 11:09
 */
public class BookServiceImpl implements BookService {
    private BookMapper bookMapper;

    public BookMapper getBookMapper() {
        return bookMapper;
    }

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }
  
    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }
       /*foreach动态sql*/
    @Override
    public List<Book> selectBooksIn(List bookIds) {
        return bookMapper.selectBooksIn(bookIds);
    }
}

测试类 BookServiceImplTest:

package com.xy.service.impl;

import com.xy.mapper.BookMapper;
import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.service.BookService;
import com.xy.utils.PageBean;
import com.xy.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.*;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 11:16
 */
public class BookServiceImplTest {
    private BookService bookService;
    private SqlSession sqlSession;

    @Before
    public void setUp(){
        BookServiceImpl service =new BookServiceImpl();
        sqlSession = SessionUtil.openSession();
        BookMapper mapper =  sqlSession.getMapper(BookMapper.class);
        System.out.println("mapper:"+mapper);
        service.setBookMapper(mapper);
        bookService =service;
        System.out.println(((BookServiceImpl) bookService).getBookMapper());

    }

    @After
    public void setDown(){
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void deleteByPrimaryKey() {
        System.out.println("测试有事务的方法");
        System.out.println(this.bookService.deleteByPrimaryKey(11));
    }

    @Test
    public void selectByPrimaryKey() {
        System.out.println("测试没有事务的方法");
        System.out.println(this.bookService.selectByPrimaryKey(11));

    }
    /*foreach动态sql*/
    @Test
    public void selectBooksIn() {
        List bookIds = new ArrayList();
        bookIds.add(16);
        bookIds.add(18);
        bookIds.add(19);
        for (Book book : this.bookService.selectBooksIn(bookIds)) {
            System.out.println(book);

        }
    }

    }

结果:
在这里插入图片描述

模糊查询

三种方式:
#{...}
${...}
Concat
注意:#{...}自带引号,${...}动态列 有sql注入的风险

接口类 BookMapper:

/*模糊查询三种方法*/
    List<Book> selectBooksLike1(@Param("bname") String bname);
    List<Book> selectBooksLike2(@Param("bname") String bname);
    List<Book> selectBooksLike3(@Param("bname") String bname);

BookMapper.xml:

<!--模糊查询三种方法 #{...}-->
  <select id="selectBooksLike1" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like #{bname}
    </where>
  </select>
  <!--第二张方法模糊查询  ${...}-->
  <select id="selectBooksLike2" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like '${bname}'
    </where>
  </select>
<!--第三种方式模糊查询   Concat-->
  <select id="selectBooksLike3" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like concat('%',#{bname},'%')
    </where>
  </select>

接口类 BookService:

/*模糊查询三种方法*/
    List<Book> selectBooksLike1(String bname);
    List<Book> selectBooksLike2(String bname);
    List<Book> selectBooksLike3(String bname);

实现类 BookServiceImpl:

 /*三种模糊查询的方法:*/
    @Override
    public List<Book> selectBooksLike1(String bname) {
        return bookMapper.selectBooksLike1(bname);
    }

    @Override
    public List<Book> selectBooksLike2(String bname) {
        return bookMapper.selectBooksLike2(bname);
    }

    @Override
    public List<Book> selectBooksLike3(String bname) {
        return bookMapper.selectBooksLike3(bname);
    }

测试类 BookServiceImplTest:

 /*三种模糊查询*/
    @Test
    public void selectBookLike3() {
       /* for (Book book : this.bookService.selectBooksLike1("%圣墟%")) {
            System.out.println(book);
        }*/
      /*  for (Book book : this.bookService.selectBooksLike2("%斗破%")) {
            System.out.println(book);

        }*/
        for (Book book : this.bookService.selectBooksLike3("圣墟")) {
            System.out.println(book);
        }

    }

结果:
在这里插入图片描述

查询返回结果集的处理

resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

1 使用resultMap返回自定义类型集合

2 使用resultType返回List

3 使用resultType返回单个对象

4 使用resultType返回List,适用于多表查询返回结果集

5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集

接口类 BookMapper:

/*返回结果集五种方式:*/
    List<Book> list1();
    List<Book> list2();
    List<Book> list3(BookVo bookVo);
    List<Map> list4();
    Map list5(Map map);

BookMapper.xml:

<!--返回不同结果集五种方法:
resultMap:适合使用返回值是自定义实体类的情况
  resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

第一种 使用resultMap返回自定义类型集合:
-->
  <select id="list1" resultMap="BaseResultMap">
    select * from t_mvc_book
  </select>
  <!--2 使用resultType返回List<T>-->
  <select id="list2" resultType="com.xy.model.Book">
    select * from t_mvc_book
  </select>
  <!--3 使用resultType返回单个对象 -->
  <select id="list3" resultType="com.xy.model.Book" parameterType="com.xy.model.BookVo">
    select * from t_mvc_book where bid in
    <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
      #{bid}
    </foreach>
  </select>
  <!--4 使用resultType返回List<Map>,适用于多表查询返回结果集-->
  <select id="list4" resultType="java.util.Map">
    select * from t_mvc_book
   </select>
  <!--5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集-->
    <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
  select * from t_mvc_book where bid = #{bid}
</select>

接口类 BookService :

/*查询返回结果集的处理*/
    List<Book> list1();
    List<Book> list2();
    List<Book> list3(BookVo bookVo);
    List<Map> list4();
    Map list5(Map map);

实现类 BookServiceImpl:

/*查询返回结果集的处理 五种方式*/
    @Override
    public List<Book> list1() {
        return bookMapper.list1();
    }

    @Override
    public List<Book> list2() {
        return bookMapper.list2();
    }

    @Override
    public List<Book> list3(BookVo bookVo) {
        return bookMapper.list3(bookVo);
    }

    @Override
    public List<Map> list4() {
        return bookMapper.list4();
    }

    @Override
    public Map list5(Map map) {
        return bookMapper.list5(map);
    }

测试类 BookServiceImplTest:

 /*查询返回结果集的处理:*/
    @Test
    public void list1() {
        for (Book book : this.bookService.list1()) {
            System.out.println(book);

        }
    }

    @Test
    public void list2() {
        for (Book book : this.bookService.list2()) {
            System.out.println(book);

        }
    }
    @Test
    public void list3() {
        BookVo bookVo = new BookVo();
        List bookIds = new ArrayList();
        bookIds.add(16);
        bookIds.add(18);
        bookIds.add(19);
        bookVo.setBookIds(bookIds);
        for (Book book : this.bookService.list3(bookVo)) {
            System.out.println(book);


        }

    }
    @Test
    public void list4() {
        for (Map map : this.bookService.list4()) {
            System.out.println(map);

        }
    }
    @Test
    public void list5() {
   Map map =new HashMap();
   map.put("bid",18);
   System.out.println(this.bookService.list5(map));
    }

结果:
3 使用resultType返回单个对象:
在这里插入图片描述
.4。 使用resultType返回List,适用于多表查询返回结果集:
在这里插入图片描述

分页查询

使用分页插件步奏
1、导入pom依赖
2、Mybatis.cfg.xml配置拦截器
3、使用PageHelper进行分页
4、处理分页结果

导入pom依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

Mybatis.cfg.xml配置拦截器

<plugins>
    <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
    </plugin>
</plugins>

PageBean分页工具:

package com.xy.utils;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-16 15:02
 */
public class PageBean {

    private int page = 1;// 页码

    private int rows = 10;// 页大小

    private int total = 0;// 总记录数
    //保留上一次的请求
    private String url;
    //保留上一次请求所提供的参数
    private Map<String, String[]>paMap=new HashMap<>();

    /*
     * pageBean初始化方法
     */
    public void setRequest(HttpServletRequest req) {
        this.setPage(req.getParameter("page"));
        this.setRows(req.getParameter("rows"));
        this.setPagination(req.getParameter("pagination"));
        this.setUrl(req.getRequestURL().toString());
        this.setPaMap(req.getParameterMap());
    }

    private void setPagination(String parameter) {
        if("false".equals(pagination)) {
            this.setPagination(false);//不可以分页
        }
    }

    private void setRows(String rows) {
        if(StringUtils.isNotBlank(rows)) {
            this.setRows(Integer.valueOf(rows));
        }
    }

    private void setPage(String page) {
        if(StringUtils.isNotBlank(page)) {//不为空就赋值
            this.setPage(Integer.valueOf(page));
        }
    }

    private boolean pagination = true;// 是否分页

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }



    public Map<String, String[]> getPaMap() {
        return paMap;
    }

    public void setPaMap(Map<String, String[]> paMap) {
        this.paMap = paMap;
    }

    public PageBean() {
        super();
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public void setTotal(String total) {
        this.total = Integer.parseInt(total);
    }

    public boolean isPagination() {
        return pagination;
    }

    public void setPagination(boolean pagination) {
        this.pagination = pagination;
    }

    /**
     * 获得起始记录的下标
     *
     * @return
     */
    public int getStartIndex() {
        return (this.page - 1) * this.rows;
    }

    @Override
    public String toString() {
        return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
    }

    /**
     * 最大页
     */
    public int getMaxPage() {
        // 21 10 3=(21/10)+1
        return this.total%this.rows==0 ? this.total/this.rows : this.total/this.rows+1;
    }

    /**
     * 获取下一页
     */
    public int getNextPage() {
        return this.page < this.getMaxPage() ? this.page+1 : this.page;
    }


    /**
     * 获取上一页
     */
    public int getPreviousPage() {
        return this.page >1 ? this.page-1 : this.page;
    }




}

StringUtils:

package com.xy.utils;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-16 15:01
 */
public class StringUtils {
    // 私有的构造方法,保护此类不能在外部实例化
    private StringUtils() {
    }

    /**
     * 如果字符串等于null或去空格后等于"",则返回true,否则返回false
     *
     * @param s
     * @return
     */
    public static boolean isBlank(String s) {
        boolean b = false;
        if (null == s || s.trim().equals("")) {
            b = true;
        }
        return b;
    }

    /**
     * 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
     *
     * @param s
     * @return
     */
    public static boolean isNotBlank(String s) {
        return !isBlank(s);
    }
}

接口类 BookMapper:

/*分页:*/
   List<Map> listPage(Map map);

BookMapper.xml:

<!--分页查询:-->
<select id="listPage" resultType="java.util.Map" parameterType="java.util.Map">
    select * from t_mvc_book
    <where>
        <if test="bname != null and bname != ''">
           bname like #{bname}
        </if>
    </where>
</select>

接口类BookService:

/*分页*/
    List<Map> listPage(Map map, PageBean pageBean);

实现类BookServiceImpl:

/*分页*/
    @Override
    public List<Map> listPage(Map map, PageBean pageBean) {
        if(pageBean != null && pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
          List<Map> list = bookMapper.listPage(map);
        if(pageBean != null && pageBean.isPagination()){
            PageInfo pageInfo = new PageInfo(list);
            System.out.println("当前页:" + pageInfo.getPageNum());
            System.out.println("显示当前条数:" + pageInfo.getPageSize());
            System.out.println("符合条件的总记录数:"+pageInfo.getTotal());
            pageBean.setTotal(pageInfo.getTotal()+"");
        }

        return list;
    }

测试类BookServiceImplTest:

/*分页:*/
    @Test
    public void listPager() {
        Map map = new HashMap();
        map.put("bname","%圣墟%");
        PageBean pageBean = new PageBean();
        pageBean.setPagination(false);
       pageBean.setPage(3);
        for (Map map1 : this.bookService.listPage(map, pageBean)) {
            System.out.println(map1);

        }

    }

结果:
在这里插入图片描述

特殊字符处理

>(&gt;)   
    <(&lt;)  
    &(&amp;) 
 空格(&nbsp;)
 <![CDATA[ <= ]]> 

以下为全部完整代码展示:

BookVo:

package com.xy.model;


import java.util.List;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-16 12:18
 *
 * vo類专门用来封装多表联查信息用于展示的
 * 封装查询条件
 */
public class BookVo extends Book{
private List<Integer> bookIds;
private Float min;
private Float max;

    public Float getMin() {
        return min;
    }

    public void setMin(Float min) {
        this.min = min;
    }

    public Float getMax() {
        return max;
    }

    public void setMax(Float max) {
        this.max = max;
    }

    public List<Integer> getBookIds() {
        return bookIds;
    }

    public void setBookIds(List<Integer> bookIds) {
        this.bookIds = bookIds;
    }
}

接口类 BookMapper:

package com.xy.mapper;

import com.xy.model.Book;
import com.xy.model.BookVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BookMapper {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);
/*动态sqlforeach*/
    List<Book> selectBooksIn(@Param("bookIds") List bookIds);
/*模糊查询三种方法*/
    List<Book> selectBooksLike1(@Param("bname") String bname);
    List<Book> selectBooksLike2(@Param("bname") String bname);
    List<Book> selectBooksLike3(@Param("bname") String bname);

/*返回结果集五种方式:*/
    List<Book> list1();
    List<Book> list2();
    List<Book> list3(BookVo bookVo);
    List<Map> list4();
    Map list5(Map map);

/*分页:*/
    //select * from t_mvc_book where bname like '%圣墟%' limit 20,10;
   List<Map> listPage(Map map);

/*特殊字符*/
    List<Book> list6(BookVo bookVo);
}

BookMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xy.mapper.BookMapper" >
  <resultMap id="BaseResultMap" type="com.xy.model.Book" >
    <constructor >
      <idArg column="bid" jdbcType="INTEGER" javaType="java.lang.Integer" />
      <arg column="bname" jdbcType="VARCHAR" javaType="java.lang.String" />
      <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
    </constructor>
  </resultMap>
  <sql id="Base_Column_List" >
    bid, bname, price
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bid = #{bid,jdbcType=INTEGER}
  </select>

  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from t_mvc_book
    where bid = #{bid,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.xy.model.Book" >
    insert into t_mvc_book (bid, bname, price
      )
    values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.xy.model.Book" >
    insert into t_mvc_book
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="bid != null" >
        bid,
      </if>
      <if test="bname != null" >
        bname,
      </if>
      <if test="price != null" >
        price,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="bid != null" >
        #{bid,jdbcType=INTEGER},
      </if>
      <if test="bname != null" >
        #{bname,jdbcType=VARCHAR},
      </if>
      <if test="price != null" >
        #{price,jdbcType=REAL},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.xy.model.Book" >
    update t_mvc_book
    <set >
      <if test="bname != null" >
        bname = #{bname,jdbcType=VARCHAR},
      </if>
      <if test="price != null" >
        price = #{price,jdbcType=REAL},
      </if>
    </set>
    where bid = #{bid,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.xy.model.Book" >
    update t_mvc_book
    set bname = #{bname,jdbcType=VARCHAR},
      price = #{price,jdbcType=REAL}
    where bid = #{bid,jdbcType=INTEGER}
  </update>

<!--讲解foreach标签-->
  <select id="selectBooksIn" resultType="com.xy.model.Book" parameterType="java.util.List">
    select * from t_mvc_book where bid in
    <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
      #{bid}
    </foreach>
  </select>
  <!--模糊查询三种方法 #{...}-->
  <select id="selectBooksLike1" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like #{bname}
    </where>
  </select>
  <!--第二张方法模糊查询  ${...}-->
  <select id="selectBooksLike2" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like '${bname}'
    </where>
  </select>
<!--第三种方式模糊查询   Concat-->
  <select id="selectBooksLike3" resultType="com.xy.model.Book" parameterType="java.lang.String">
    select * from t_mvc_book
    <where>
      bname like concat('%',#{bname},'%')
    </where>
  </select>
<!--返回不同结果集五种方法:
resultMap:适合使用返回值是自定义实体类的情况
  resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

第一种 使用resultMap返回自定义类型集合:
-->
  <select id="list1" resultMap="BaseResultMap">
    select * from t_mvc_book
  </select>
  <!--2 使用resultType返回List<T>-->
  <select id="list2" resultType="com.xy.model.Book">
    select * from t_mvc_book
  </select>
  <!--3 使用resultType返回单个对象 -->
  <select id="list3" resultType="com.xy.model.Book" parameterType="com.xy.model.BookVo">
    select * from t_mvc_book where bid in
    <foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
      #{bid}
    </foreach>
  </select>
  <!--4 使用resultType返回List<Map>,适用于多表查询返回结果集-->
  <select id="list4" resultType="java.util.Map">
    select * from t_mvc_book
   </select>
  <!--5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集-->
    <select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
  select * from t_mvc_book where bid = #{bid}
</select>
  <!--分页查询:-->
<select id="listPage" resultType="java.util.Map" parameterType="java.util.Map">
    select * from t_mvc_book
    <where>
        <if test="bname != null and bname != ''">
           bname like #{bname}
        </if>
    </where>
</select>
<!--特殊字符处理-->
  <select id="list6" resultType="com.xy.model.Book" parameterType="com.xy.model.BookVo">
    select * from t_mvc_book where <![CDATA[price > #{min} and price < #{max} ]]>
  </select>
    
</mapper>

接口类 BookService

package com.xy.service;

import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.utils.PageBean;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 10:57
 */
public interface BookService {
    int deleteByPrimaryKey(Integer bid);



    Book selectByPrimaryKey(Integer bid);

/*foreach动态sql*/
    List<Book> selectBooksIn(List bookIds);
/*模糊查询三种方法*/
    List<Book> selectBooksLike1(String bname);
    List<Book> selectBooksLike2(String bname);
    List<Book> selectBooksLike3(String bname);
/*查询返回结果集的处理*/
    List<Book> list1();
    List<Book> list2();
    List<Book> list3(BookVo bookVo);
    List<Map> list4();
    Map list5(Map map);
    /*分页*/
    List<Map> listPage(Map map, PageBean pageBean);
/*特殊字符*/
    List<Book> list6(BookVo bookVo);

}

实现类 BookServiceImpl

package com.xy.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xy.mapper.BookMapper;
import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.service.BookService;
import com.xy.utils.PageBean;

import java.util.List;
import java.util.Map;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 11:09
 */
public class BookServiceImpl implements BookService {
    private BookMapper bookMapper;

    public BookMapper getBookMapper() {
        return bookMapper;
    }

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }
    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }
    /*foreach动态sql*/
    @Override
    public List<Book> selectBooksIn(List bookIds) {
        return bookMapper.selectBooksIn(bookIds);
    }
    /*三种模糊查询的方法:*/
    @Override
    public List<Book> selectBooksLike1(String bname) {
        return bookMapper.selectBooksLike1(bname);
    }

    @Override
    public List<Book> selectBooksLike2(String bname) {
        return bookMapper.selectBooksLike2(bname);
    }

    @Override
    public List<Book> selectBooksLike3(String bname) {
        return bookMapper.selectBooksLike3(bname);
    }
/*查询返回结果集的处理 五种方式*/
    @Override
    public List<Book> list1() {
        return bookMapper.list1();
    }

    @Override
    public List<Book> list2() {
        return bookMapper.list2();
    }

    @Override
    public List<Book> list3(BookVo bookVo) {
        return bookMapper.list3(bookVo);
    }

    @Override
    public List<Map> list4() {
        return bookMapper.list4();
    }

    @Override
    public Map list5(Map map) {
        return bookMapper.list5(map);
    }

   /*分页*/
    @Override
    public List<Map> listPage(Map map, PageBean pageBean) {
        if(pageBean != null && pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
          List<Map> list = bookMapper.listPage(map);
        if(pageBean != null && pageBean.isPagination()){
            PageInfo pageInfo = new PageInfo(list);
            System.out.println("当前页:" + pageInfo.getPageNum());
            System.out.println("显示当前条数:" + pageInfo.getPageSize());
            System.out.println("符合条件的总记录数:"+pageInfo.getTotal());
            pageBean.setTotal(pageInfo.getTotal()+"");
        }

        return list;
    }
/*特殊字符:*/
    @Override
    public List<Book> list6(BookVo bookVo) {
        return bookMapper.list6(bookVo);
    }
}

测试类BookServiceImplTest

package com.xy.service.impl;

import com.xy.mapper.BookMapper;
import com.xy.model.Book;
import com.xy.model.BookVo;
import com.xy.service.BookService;
import com.xy.utils.PageBean;
import com.xy.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.*;

/**
 * @author 依呀
 * @site www.xiaomage.com
 * @company xxx公司
 * @create  2019-11-15 11:16
 */
public class BookServiceImplTest {
    private BookService bookService;
    private SqlSession sqlSession;

    @Before
    public void setUp(){
        BookServiceImpl service =new BookServiceImpl();
        sqlSession = SessionUtil.openSession();
        BookMapper mapper =  sqlSession.getMapper(BookMapper.class);
        System.out.println("mapper:"+mapper);
        service.setBookMapper(mapper);
        bookService =service;
        System.out.println(((BookServiceImpl) bookService).getBookMapper());

    }

    @After
    public void setDown(){
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void deleteByPrimaryKey() {
        System.out.println("测试有事务的方法");
        System.out.println(this.bookService.deleteByPrimaryKey(11));
    }

    @Test
    public void selectByPrimaryKey() {
        System.out.println("测试没有事务的方法");
        System.out.println(this.bookService.selectByPrimaryKey(11));

    }
    /*foreach动态sql*/
    @Test
    public void selectBooksIn() {
        List bookIds = new ArrayList();
        bookIds.add(16);
        bookIds.add(18);
        bookIds.add(19);
        for (Book book : this.bookService.selectBooksIn(bookIds)) {
            System.out.println(book);

        }
    }
    /*三种模糊查询*/
    @Test
    public void selectBookLike3() {
       /* for (Book book : this.bookService.selectBooksLike1("%圣墟%")) {
            System.out.println(book);
        }*/
      /*  for (Book book : this.bookService.selectBooksLike2("%斗破%")) {
            System.out.println(book);

        }*/
        for (Book book : this.bookService.selectBooksLike3("圣墟")) {
            System.out.println(book);
        }

    }
    /*查询返回结果集的处理:*/
    @Test
    public void list1() {
        for (Book book : this.bookService.list1()) {
            System.out.println(book);

        }
    }

    @Test
    public void list2() {
        for (Book book : this.bookService.list2()) {
            System.out.println(book);

        }
    }
    @Test
    public void list3() {
        BookVo bookVo = new BookVo();
        List bookIds = new ArrayList();
        bookIds.add(16);
        bookIds.add(18);
        bookIds.add(19);
        bookVo.setBookIds(bookIds);
        for (Book book : this.bookService.list3(bookVo)) {
            System.out.println(book);


        }

    }
    @Test
    public void list4() {
        for (Map map : this.bookService.list4()) {
            System.out.println(map);

        }
    }
    @Test
    public void list5() {
   Map map =new HashMap();
   map.put("bid",18);
   System.out.println(this.bookService.list5(map));
    }
    /*分页:*/
    @Test
    public void listPager() {
        Map map = new HashMap();
        map.put("bname","%圣墟%");
        PageBean pageBean = new PageBean();
        pageBean.setPagination(false);
       pageBean.setPage(3);
        for (Map map1 : this.bookService.listPage(map, pageBean)) {
            System.out.println(map1);

        }

    }
    /*特殊字符处理*/
    @Test
    public void list6() {
        BookVo bookVo = new BookVo();
        bookVo.setMax(50f);
       bookVo.setMin(30f);
        for (Book book : this.bookService.list6(bookVo)) {
            System.out.println(book);

        }
    }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值