MyBatis的查询
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>
<!-- <!–根据用户名模糊查询–>-->
<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的查询的更多相关文章
- Mybatis关联查询和数据库不一致问题分析与解决
Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...
- myBatis批量查询操作,xml中使用foreach案例
使用场景:有一个订单表,实体类为OrderBase.java,订单有个状态为status值可能为"1,2,3,4,5,6",现在需要查询状态为"2,3,4"的订 ...
- MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射
先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- Ibatis/Mybatis模糊查询
Ibatis/Mybatis模糊查询 根据网络内容整理 Ibatis中 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入风险. Sql代码 select * from ...
- MyBatis一对一查询
---------------------siwuxie095 MyBatis 一对一查询 以订单和用户为例,即 相对订 ...
- MyBatis高级查询
-------------------------siwuxie095 MyBatis 高级查询 1.MyBatis 作为一个 ORM 框架,也对 SQL 的高级查询做了支持, MyBatis 高级查 ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- 在数据库中添加数据以后,使用Mybatis进行查询结果为空
在数据库中添加数据以后,使用Mybatis进行查询结果为空,这是因为数据库中添加数据忘记commit的缘故.
随机推荐
- 使用canvas绘制6X6调色盘
<canvas id="canvas" height="150" width="150"></canvas> var ...
- Dubbo从拜师到入坟
第一个Dubbo程序:Hello world 创建业务接口工程 我们将这个接口单独抽取出来,打成jar包被多个服务锁依赖 创建服务提供者Provider Provider工程的pom文件如下: < ...
- 最近工作中用到的Linux指定 PS Kill netstat解释
1.ps详解点击如下链接 https://jingyan.baidu.com/article/fec4bce2479f05f2618d8b80.html 2.kill kill命令用来删除执行中的程序 ...
- CM自动化安装CDH5.14.0详解
CDH5.14.0版本说明 CDH最早版本只包含hadoop.hive.hbase等基础组件,CDH5.14.0版本目前已经封装了spark.impala.kudu(CDH 5.13.x开始)等众多组 ...
- NOIp2018集训test-9-7(pm) (联考一day1)
又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...
- mysql数据库中的索引介绍与优化(转)
一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表 ...
- iOS开发UIResponder之NSUndoManager
1.简介 UIResponder有个属性:NSUndoManager @property(nullable, nonatomic,readonly) NSUndoManager *undoManage ...
- 『BASH』——Learn BashScript from Daniel Robbins——[001-002]
ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...
- Docker搭建Portainer可视化界面
为了解决上回说到的问题,在网上找了找 找到了一个 非常有好的可视化界面管理工具. Portainer 是什么东西 (开源轻量级) Portainer是Docker的图形化管理工具,提供状态显示面板.应 ...
- python实现一个简单木马!
一个简单的木马程序 绝大多数的木马程序都是基于Socket来实现的 废话少说直接上代码! 代码: client部分: # -*- coding: UTF-8 -*- import socketimpo ...