zoukankan      html  css  js  c++  java
  • MyBatis基础入门《六》Like模糊查询

    MyBatis基础入门《六》Like模糊查询

    描述:

      未改动的文件,不再粘贴出来。项目中SQL的xml映射文件重要标签如下:

    1 mapper namespace
    2 cache 配置给定命令空间的缓存
    3 cache-ref 从其他命令空间引用缓存配置
    4 resultMap 用来描述数据库结果集和对象的对应关系
    5 sql 可以重用的SQL块,也可以被其他语句引用
    6 insert   映射插入语句
    7 update 映射更新语句
    8 delete 映射删除语句
    9 select 映射查询语句

     

     

     

     

     

     

     

     

     

    一、mapper

    1. namespace:命令空间

      >>>  namespace和子元素的id联合保证唯一,区别不同的mapper

      >>>  绑定DAO接口

        >>>  namespace的命令必须跟某个接口同名

        >>>  接口中的方法与映射文件中SQL语句id 一一对应

    二、select

    1. select是Mybatis中最常用的元素之一

    2. select语句有很多属性可以详细配置每一条语句

      >>> id

        >> 命令空间中唯一的标识符

        >> 接口中的方法与映射文件中的SQL语句id 一一对应

      >>> parameterType

        >> 传入SQL语句的参数类型

          > 基础数据类型

            > int、String、Date等

            > 只能传入一个,通过#{参数名}即可获取传入的值

          > 复杂数据类型

            > java实体类、Map等

            > 通过#{属性名} 或者 #{map的keyName} 即可获取传入值

      >>> resultType

        >> SQL语句返回值类型的完整类名或别名

    ---------------------------------------------------------------------------------------------------------------------------------

    项目结构

     

    ClientMapper.java

     1 package com.charles.dao;
     2 
     3 import java.util.List;
     4 import com.charles.entity.TblClient;
     5 
     6 public interface ClientMapper {
     7 
     8     /***
     9      * 注意这个名字,必须要和ClientMapper.xml文件中的select标签id属性值一样。
    10      * @return List<TblClient> 集合
    11      */
    12     public List<TblClient> getClientAll();
    13     
    14     /***
    15      * 根据用户名称进行筛选数据
    16      * @param name
    17      * @return List<TblClient> 集合
    18      */
    19     public List<TblClient> getClientByName(String name);
    20 }

    ClientMapper.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 
     6 <mapper namespace="com.charles.dao.ClientMapper">
     7  
     8     <resultMap type="com.charles.entity.TblClient" id="tblClientID">
     9         <id property="cid" column="id" />
    10         <result property="cname" column="client_name"/>
    11         <result property="caddress" column="client_address"/>
    12         <result property="cbirthday" column="client_birthday"/>
    13     </resultMap>    
    14     
    15     <!-- 查询数据库 -->
    16     <select id="getCount" resultType="int">
    17         SELECT COUNT(*) FROM tbl_client
    18     </select>    
    19     
    20     <!--
    21         #########################################################################################################
    22         实体类:TbClient.java 中的属性和数据库中表字段的属性不一样,所以需要进行手动配置映射关系。
    23         
    24         如果实体类:TbClient.java中的属性和数据库中表字段的属性是一样的,那就不需要进行配置了,
    25         执行使用 resultType="com.charles.entity.TbClient"即可,有点类似方式二,从数据库中查询出来的列名刚好就是
    26         实体类TbClient.java中的属性名
    27         #########################################################################################################
    28     -->
    29     
    30     <!-- 
    31         查询所有的用户. 方式1 
    32         使用此方式需要使用resultMap标签进行定义实体类属性和数据库中表字段之间的映射关系。
    33     -->
    34 <!--     <select id="getClientAll" resultMap="tblClientID"> -->
    35 <!--         SELECT * FROM tbl_client  -->
    36 <!--     </select> -->
    37     
    38     
    39     <!-- 查询所有的用户. 方式2 -->
    40 <!--     <select id="getClientAll" resultType="com.charles.entity.TblClient"> -->
    41 <!--         SELECT  -->
    42 <!--             id as cid, -->
    43 <!--             client_name as cname, -->
    44 <!--             client_address as caddress, -->
    45 <!--             client_birthday as cbirthday -->
    46 <!--         FROM tbl_client  -->
    47 <!--     </select> -->
    48         
    49         <!-- 
    50              查询所有的用户. 方式3 
    51              使用此方式需注意两点:
    52                 1. 需要在 mybatis-config.xml文件中,配置别名baitang
    53                  2. SQL 语句需要使用别名 对应 实体类TbClient.java 中的属性名
    54         -->
    55         <select id="getClientAll" resultType="baitang">
    56             SELECT 
    57                 id as cid,
    58                 client_name as cname,
    59                 client_address as caddress,
    60                 client_birthday as cbirthday
    61             FROM tbl_client 
    62         </select>
    63         
    64         <!-- 根据用户的名称进行模糊查询数据 -->
    65         <select id="getClientByName" parameterType="java.lang.String" resultType="baitang">
    66             SELECT 
    67                 id as cid,
    68                 client_name as cname,
    69                 client_address as caddress,
    70                 client_birthday as cbirthday 
    71             FROM tbl_client WHERE client_name like CONCAT('%',#{cname},'%')
    72         </select>
    73 
    74 </mapper>

      注意:

        在书写like查询sql语句时,这样子的SQL语句【SELECT * FROM tbl_client WHERE client_name like '%#{cname}%'】是错误的,SQL语句需要进行修改,方式有两种。

          方式1:使用CONCAT函数: like CONCAT('%',#{cname},'%')

          方式2:使用$符号:like '%${value}%'

        建议使用方式1

    JunitMybatisSelect.java

     1 package com.charles.junit;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 import org.junit.Test;
    12 
    13 import com.charles.dao.ClientMapper;
    14 import com.charles.entity.TblClient;
    15 import com.charles.util.MyBatisUtil;
    16 
    17 public class JunitMybatisSelect {
    18 
    19     @Test
    20     public void junitSelect() {
    21         SqlSession session = null;
    22         try {
    23             /** 1.获取mybatis-config.xml文件 **/
    24             String resource = "mybatis/mybatis-config.xml";
    25             InputStream is = Resources.getResourceAsStream(resource);
    26 
    27             /** 2.创建SQLSessionFactory对象 **/
    28             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    29 
    30             /** 3.创建SQLSession **/
    31             session = sqlSessionFactory.openSession();
    32 
    33             /** 4.输出SQLSession对象 **/
    34             System.out.println(session);
    35             String resoruce = "com.charles.dao.ClientMapper.getCount";
    36             int count = session.selectOne(resoruce);
    37             System.out.println(count);
    38             
    39         } catch (IOException e) {
    40             e.printStackTrace();
    41         } finally {
    42             if(null != session) {
    43                 session.close();
    44             }
    45         }
    46     }
    47     
    48     @Test
    49     public void junitSelectLike() {
    50         /** 1. 获取SQLSession **/
    51         SqlSession session = MyBatisUtil.getSqlSession();
    52         
    53         /** 2. 调度方法,从数据库中获取数据 **/
    54         List<TblClient> list = session.getMapper(ClientMapper.class).getClientByName("a");
    55          
    56         /** 3. 关闭SQLSession **/
    57         MyBatisUtil.closeSqlSession(session);
    58         
    59         for(TblClient client : list ) {
    60             System.out.println(client.getCid() + "	" + client.getCname() + "	" + client.getCaddress() + "	" + client.getCbirthday());
    61         }
    62     }
    63 }

    如有问题,欢迎纠正!!!

    如有转载,请标明源处:https://www.cnblogs.com/Charles-Yuan/p/9865581.html

     

  • 相关阅读:
    2016第17周四
    2016第17周三
    2016第17周二
    OSGI框架学习
    2016年第16周日
    2016第16周六
    如何培养技术洞见力
    2016第15周四
    深入浅出ClassLoader
    Linux智能小开关rfkill
  • 原文地址:https://www.cnblogs.com/Charles-Yuan/p/9865581.html
Copyright © 2011-2022 走看看