05、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() + "\t" + client.getCname() + "\t" + client.getCaddress() + "\t" + client.getCbirthday());
61         }
62     }
63 }

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

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

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: