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
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: