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