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

 package com.charles.dao;

 import java.util.List;
import com.charles.entity.TblClient; public interface ClientMapper { /***
* 注意这个名字,必须要和ClientMapper.xml文件中的select标签id属性值一样。
* @return List<TblClient> 集合
*/
public List<TblClient> getClientAll(); /***
* 根据用户名称进行筛选数据
* @param name
* @return List<TblClient> 集合
*/
public List<TblClient> getClientByName(String name);
}

ClientMapper.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.charles.dao.ClientMapper"> <resultMap type="com.charles.entity.TblClient" id="tblClientID">
<id property="cid" column="id" />
<result property="cname" column="client_name"/>
<result property="caddress" column="client_address"/>
<result property="cbirthday" column="client_birthday"/>
</resultMap> <!-- 查询数据库 -->
<select id="getCount" resultType="int">
SELECT COUNT(*) FROM tbl_client
</select> <!--
#########################################################################################################
实体类:TbClient.java 中的属性和数据库中表字段的属性不一样,所以需要进行手动配置映射关系。 如果实体类:TbClient.java中的属性和数据库中表字段的属性是一样的,那就不需要进行配置了,
执行使用 resultType="com.charles.entity.TbClient"即可,有点类似方式二,从数据库中查询出来的列名刚好就是
实体类TbClient.java中的属性名
#########################################################################################################
--> <!--
查询所有的用户. 方式1
使用此方式需要使用resultMap标签进行定义实体类属性和数据库中表字段之间的映射关系。
-->
<!-- <select id="getClientAll" resultMap="tblClientID"> -->
<!-- SELECT * FROM tbl_client -->
<!-- </select> --> <!-- 查询所有的用户. 方式2 -->
<!-- <select id="getClientAll" resultType="com.charles.entity.TblClient"> -->
<!-- SELECT -->
<!-- id as cid, -->
<!-- client_name as cname, -->
<!-- client_address as caddress, -->
<!-- client_birthday as cbirthday -->
<!-- FROM tbl_client -->
<!-- </select> --> <!--
查询所有的用户. 方式3
使用此方式需注意两点:
1. 需要在 mybatis-config.xml文件中,配置别名baitang
2. SQL 语句需要使用别名 对应 实体类TbClient.java 中的属性名
-->
<select id="getClientAll" resultType="baitang">
SELECT
id as cid,
client_name as cname,
client_address as caddress,
client_birthday as cbirthday
FROM tbl_client
</select> <!-- 根据用户的名称进行模糊查询数据 -->
<select id="getClientByName" parameterType="java.lang.String" resultType="baitang">
SELECT
id as cid,
client_name as cname,
client_address as caddress,
client_birthday as cbirthday
FROM tbl_client WHERE client_name like CONCAT('%',#{cname},'%')
</select> </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

 package com.charles.junit;

 import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.charles.dao.ClientMapper;
import com.charles.entity.TblClient;
import com.charles.util.MyBatisUtil; public class JunitMybatisSelect { @Test
public void junitSelect() {
SqlSession session = null;
try {
/** 1.获取mybatis-config.xml文件 **/
String resource = "mybatis/mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource); /** 2.创建SQLSessionFactory对象 **/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); /** 3.创建SQLSession **/
session = sqlSessionFactory.openSession(); /** 4.输出SQLSession对象 **/
System.out.println(session);
String resoruce = "com.charles.dao.ClientMapper.getCount";
int count = session.selectOne(resoruce);
System.out.println(count); } catch (IOException e) {
e.printStackTrace();
} finally {
if(null != session) {
session.close();
}
}
} @Test
public void junitSelectLike() {
/** 1. 获取SQLSession **/
SqlSession session = MyBatisUtil.getSqlSession(); /** 2. 调度方法,从数据库中获取数据 **/
List<TblClient> list = session.getMapper(ClientMapper.class).getClientByName("a"); /** 3. 关闭SQLSession **/
MyBatisUtil.closeSqlSession(session); for(TblClient client : list ) {
System.out.println(client.getCid() + "\t" + client.getCname() + "\t" + client.getCaddress() + "\t" + client.getCbirthday());
}
}
}

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

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

MyBatis基础入门《六》Like模糊查询的更多相关文章

  1. MyBatis基础入门《八》查询参数传入Map

    MyBatis基础入门<八>查询参数传入Map 描述: 在执行select查询数据的时候,方法传入的参数是java.util.Map类型. 接口方法: xml文件 注意: 书写SQL语句的 ...

  2. MyBatis基础入门《七》查询参数传入对象

    MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持 ...

  3. MyBatis基础入门《十六》缓存

    MyBatis基础入门<十六>缓存 >> 一级缓存 >> 二级缓存 >> MyBatis的全局cache配置 >> 在Mapper XML文 ...

  4. MyBatis基础入门《四》接口方式.Select查询集合

    MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...

  5. MyBatis基础入门《三》Select查询集合

    MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...

  6. MyBatis基础入门《二》Select查询

    MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...

  7. Mybatis基础入门学习

    Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...

  8. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

  9. MyBatis基础入门《十七》动态SQL

    MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...

随机推荐

  1. Java代理和动态代理机制分析和应用

    本博文中项目代码已开源下载地址:GitHub Java代理和动态代理机制分析和应用 概述 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息 ...

  2. WinForm将一个窗体的值传到另一个窗体的listbox控件,C#

    做arcgisengine二次开发,读取当前图层文件的字段值,别名,类型.  读取文件是在有地图图层的窗体(假设为Form1),由于窗体有限,所以想把读取的数据在另一个窗体(假设为Form2)显示出来 ...

  3. 初识jmeter(2)

    1.层级关系: 聚合报告1记录HTTP请求1的结果: 聚合报告2记录HTTP请求2的结果: 聚合报告记录所有线程组中HTTP请求的结果. 2.线程同时启动(并发) 一是可以在把线程组里面的 Ramp- ...

  4. linux查找大文件命令

    测试服务器用久了,如果没有运行自动清除日志的脚本,会导致硬盘空间不足,应用.数据库.环境等启动不了: 如果你对系统不是特别熟悉,就无法知道那些占用空间的日志或缓存文件在哪里,这时,我们就可以利用查找大 ...

  5. 如何使用List<HashMap<String, String>>详细讲解

    场景:要循环界面Table数据源与导出Excel数据源作对比. 说明: List<HashMap<String,String>>  List中每一项都是一个HashMap Ha ...

  6. 陌生的 metaclass(转)

    add by zhj:这是我见过的对metaclass解释最清楚的文章了,例子很好,真是一例胜千言 原文:http://wiki.jikexueyuan.com/project/explore-pyt ...

  7. 20170720 Celery 异步任务处理到Sql Server 发生死锁

    -- 1.  异常提示情况如下: 需要解决为什么引起死锁 -- 叹气 原因: 在使用Celery 启用了 配置参数 CELERYD_CONCURRENCY = 10  表示开了10块线程池. 有好处, ...

  8. Hadoop 尝试

    一. 使用环境Ubuntu 安装Hadoop需要的软件 命令: $ sudo apt-get install ssh $ sudo apt-get install rsync 提示错误: 错误原因: ...

  9. 数据库 - Navicat与pymysql模块

    一.Nabicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时, 可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:htt ...

  10. 008-Centos 7.x安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群

    1.安装环境说明 安装前先安装好 Centos 7.2, jdk-8u91, mysql5.7.13 一共有3台机器,一个是主节点192.168.111.10,两个是从:192.168.111.11, ...