MyBatis的查询

在上一个MyBatis的核心API中介绍了SqlSessionFactoryBuilder、SqlSessionFactory以及SqlSession是什么,它们都有什么作用,本章节将继续衔接上面的用MyBatis集合查询等

在Customer.xml中添加查询客户的sql语句

      <!--查询所有用户,不需要返回参数-->
<select id="queryAllCustomer" resultType="com.lqg.domain.Customer" >
select * from `customer`
</select>

在MyBatis中测试查询所有用户

  //查询所有用户
List<Customer> list = sqlSession.selectList("queryAllCustomer", customer);
for (Customer customer1:list) {
System.out.println(customer1);
}

效果如下:

根据用户名模糊查询客户方法一,使用特殊字符,下面会作详细的介绍

  <!--根据用户名模糊查询-->
<select id="queryAllByName" parameterType="String" resultType="com.lqg.domain.Customer">
select * from customer where cust_name like '%${value}%'
</select>

在测试类中根据姓名查询所有姓张的用户

 //根据名字进行模糊查询
List<Customer> list2 = sqlSession.selectList("queryAllByName", "张");
for(Customer customer2:list){
System.out.println(customer2);
}

根据用户名模糊查询客户方法一的效果如下

在Customer.xml中根据用户名模糊查询客户方法二

 <select id="queryAllName" parameterType="String" resultType="com.lqg.domain.Customer">
select * from customer where cust_name like #{customer}
</select>

在测试类中根据姓名查询所有姓张的用户

 //根据名字进行模糊查询方法二
List<Customer> queryAllByName = sqlSession.selectList("queryAllName", "%张%");
for(Customer customer3:queryAllByName){
System.out.println(customer3);
}

下面是Customer.xml和MyBatisTest的全部代码,包括根据id查询单个用户的信息,查询所有的信息,根据姓名进行模糊查询

Customer.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="Mytest">
<!--根据id查询用户-->
<select id="queryCustomerById" parameterType="Int" resultType="com.lqg.domain.Customer">
select * from `customer` where cust_id = #{cust_id}
</select>
<!--查询所有用户,不需要返回参数-->
<select id="queryAllCustomer" resultType="com.lqg.domain.Customer" >
select * from `customer`
</select>
<!-- &lt;!&ndash;根据用户名模糊查询&ndash;&gt;-->
<select id="queryAllByName" parameterType="String" resultType="com.lqg.domain.Customer">
select * from customer where cust_name like '%${value}%'
</select> <select id="queryAllName" parameterType="String" resultType="com.lqg.domain.Customer">
select * from customer where cust_name like #{customer}
</select>
</mapper>

MyBatisTest的全部代码:

 package com.lqg.test;

 import com.lqg.domain.Customer;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List; public class MyBatisTest {
@Test
public void test() throws IOException {
//1.创建一个SqlSessionFactoryBulider的类
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.加载SqlMapConfig.xml的配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//3.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//4.创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//5.用sqlSession对象执行查询
Customer customer = sqlSession.selectOne("queryCustomerById",1);
System.out.println(customer);
//查询所有用户
List<Customer> list = sqlSession.selectList("queryAllCustomer", customer);
for (Customer customer1:list) {
System.out.println(customer1);
}
//根据名字进行模糊查询方法一
List<Customer> list2 = sqlSession.selectList("queryAllByName", "张");
for(Customer customer2:list2){
System.out.println(customer2);
}
//根据名字进行模糊查询方法二
List<Customer> queryAllByName = sqlSession.selectList("queryAllName", "%张%");
for(Customer customer3:queryAllByName){
System.out.println(customer3);
} }
}

总结:

parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中

resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中

selectOne:

  • 查询一条记录
  • 如果使用selectOne查询多条记录则抛出异常

selectList:可以查询一条或多条记录

#{}和${}

#{}:

  • 表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值
  • 自动进行java类型和jdbc类型转换
  • #{}可以有效防止sql注入
  • #{}可以接收简单类型值或pojo属性值
  • 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称

${}:

  • 通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换
  • ${}可以接收简单类型值或pojo属性值
  • 如果parameterType传输单个简单类型值,${}括号中只能是value

MyBatis的查询的更多相关文章

  1. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  2. myBatis批量查询操作,xml中使用foreach案例

    使用场景:有一个订单表,实体类为OrderBase.java,订单有个状态为status值可能为"1,2,3,4,5,6",现在需要查询状态为"2,3,4"的订 ...

  3. MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

    先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...

  4. MyBatis基础:MyBatis关联查询(4)

    1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...

  5. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  6. Ibatis/Mybatis模糊查询

    Ibatis/Mybatis模糊查询 根据网络内容整理 Ibatis中 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入风险. Sql代码 select * from ...

  7. MyBatis一对一查询

    ---------------------siwuxie095                                 MyBatis 一对一查询         以订单和用户为例,即 相对订 ...

  8. MyBatis高级查询

    -------------------------siwuxie095 MyBatis 高级查询 1.MyBatis 作为一个 ORM 框架,也对 SQL 的高级查询做了支持, MyBatis 高级查 ...

  9. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

  10. 在数据库中添加数据以后,使用Mybatis进行查询结果为空

    在数据库中添加数据以后,使用Mybatis进行查询结果为空,这是因为数据库中添加数据忘记commit的缘故.

随机推荐

  1. vim 详解

    Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器. 它的作用是建立.编辑.显示文本文件. Vim的几种模式 正常模式: 可以使用快捷键命令,或按:输入命令行. 插入模 ...

  2. QueryList 内容过滤

    <?php require 'vendor/autoload.php'; use QL\QueryList; $html =<<<STR <div id="de ...

  3. Android中的Parcel机制(上)

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...

  4. 25 面向对象设计实例——基于PCL点云库的通用工具开发

    0 引言 问题背景:pcl中提供了大量工具,用于对点云和三角面片文件进行处理和显示.在研究中,存在很多简易的需求,比如点云坐标转换,点云的打开显示以及同步显示,点云的最小包络求解,点云的格式转换等等. ...

  5. lua执行的两种方式

    一.交互模式 二.脚本式 创建一个以lua结尾的文件,例如hello.lua文件内容 println("hello world")

  6. flutter 动态申请权限

    https://pub.flutter-io.cn/packages/permission_handler https://www.jianshu.com/p/fa68876fbdfd 例 Futur ...

  7. Mybatis笔记 - SqlMapConfig

    一.基本配置内容 1.基本格式 mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) typeAliases(类 ...

  8. The packaging for this project did not assign a file to the build artifact

    当进行mvn install时,遇到以下错误 The packaging for this project did not assign a file to the build artifact 在网 ...

  9. 【JUC】JDK1.8源码分析之ConcurrentHashMap

    一.前言 最近几天忙着做点别的东西,今天终于有时间分析源码了,看源码感觉很爽,并且发现ConcurrentHashMap在JDK1.8版本与之前的版本在并发控制上存在很大的差别,很有必要进行认真的分析 ...

  10. 剑指offer——01数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...