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
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模糊查询的更多相关文章
- MyBatis基础入门《八》查询参数传入Map
MyBatis基础入门<八>查询参数传入Map 描述: 在执行select查询数据的时候,方法传入的参数是java.util.Map类型. 接口方法: xml文件 注意: 书写SQL语句的 ...
- MyBatis基础入门《七》查询参数传入对象
MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持 ...
- MyBatis基础入门《十六》缓存
MyBatis基础入门<十六>缓存 >> 一级缓存 >> 二级缓存 >> MyBatis的全局cache配置 >> 在Mapper XML文 ...
- MyBatis基础入门《四》接口方式.Select查询集合
MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...
- MyBatis基础入门《三》Select查询集合
MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...
- MyBatis基础入门《二》Select查询
MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...
- Mybatis基础入门学习
Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
- MyBatis基础入门《十七》动态SQL
MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...
随机推荐
- vue 错误分析
1 点击事件发生的错误 原因是,重复触发事件函数导致 改为不一样的名字即可 2 提示 : “ vuex] Expects string as the type, but found undef ...
- 小心踩雷,一次Java内存泄漏排查实战
1.使用 jstack pid > jstack.log 保存了线程栈的现场,使用 jmap -dump:format=b,file=heap.log pid 保存了堆现场: https://m ...
- 【nginx,apache】thinkphp ,laravel,yii2开发运行环境搭建
缘由 经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考 Nginx Yii2 server ...
- 转:jquery的$(function(){})和$(document).ready(function(){}) 的区别
原文链接:https://www.cnblogs.com/slyzly/articles/7809935.html [转载]jquery的$(function(){})和$(document).rea ...
- 《HTTP - http报文》
还时推荐一首歌 - 那吾克热<纸飞机> 有没有突然想要个孩子的冲动,哈哈. 读 第三章<HTTP报文内的HTTP信息> 总结 1:用于HTTP协议交互叫做HTTP报文,请求端( ...
- Beanstalkd 基本概念和使用
1:什么是 Beanstalkd ? Beanstalkd 一个高性能.轻量级的分布式内存队列系统 简单来说,就是一个队列,相比于 数据库/redis 队列相比. 更专业.能完成的功能更多.就这么理解 ...
- jquery.axios无刷新机制删除
思路:无刷新机制就是不用的刷新动作 ,用前端html语法删除和后端的数据库删,同时删除达到效果 除操作,来实现无刷洗的方法
- 洛谷P4363 一双木棋chess [九省联考2018] 搜索+hash
正解:记搜+hash 解题报告: 传送门! 因为看到nm范围特别小,,,所以直接考虑爆搜(bushi 先考虑爆搜之后再想优化什么的嘛QwQ 首先对这种都要最优的,就可以直接把答案设为针对某一方,然后题 ...
- cuda9.0编译caffe报错nvcc fatal : Unsupported gpu architecture 'compute_70'
Tesla V100 cuda9.0 caffe编译的时候报上述错误,修改方法: CUDA_ARCH := #-gencode arch=compute_20,code=sm_20 \ #-genco ...
- TensorFlow安装之后导入报错:libcudnn.so.6:cannot open sharedobject file: No such file or directory
转载自:http://blog.csdn.net/silent56_th/article/details/77587792 系统环境:Ubuntu16.04 + GTX1060 目的:配置一下pyth ...