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的缘故.
随机推荐
- HIVE常用SQL语句及语法
HIVE建内部表语句 create table dll102.sougou (id string,pwd string,name string,count int,seqno int,address ...
- chkconfig 与 systemctl
chkconfig命令 主要用来更新(启动或停止)和查询系统服务(service)的运行级信息,用于维护/etc/rc[0-6].d目录的命令行工具. chkconfig -–add httpd 增加 ...
- UIWindow & UIWindowLevel笔记
一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...
- 堡垒机介绍及实现 (使用python django实现)(一)
堡垒机介绍及实现 (使用python django实现)(一) 堡垒机的功能 我们在使用服务器的时候,通常的方式是 ssh user@ip 然后输入password 多人同时使用,就需要多个账号.这时 ...
- 神经网络中使用Batch Normalization 解决梯度问题
BN本质上解决的是反向传播过程中的梯度问题. 详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有: 那么反向传播时便有: 那么考虑从l层传到k层的情况,有: 上面这个 便是问题所在.因为 ...
- JAVA发展历史!
前言 自1946年2月14日世界上首款计算机问世,第一代计算机语言“机器语言”便诞生了,它使用的是最原始的穿孔卡片,这种卡片上使用的语言只有专家才能理解,与人类语言差别极大.这种语言本质上是计算机能识 ...
- 【LGP5439】【XR-2】永恒
题目 是个傻题 显然枚举每一条路径经过了多少次,如果\(u,v\)在树上不是祖先关系的话经过\((u,v)\)这条路径的路径条数就是\(sum_u\times sum_v\) 于是我们子树大小映射到\ ...
- 【python】collections的使用
老师布置了一个课后作业. 统计文本中字母出现的次数并找到最大的那一个 首先是读取文本吧.和c里的也差不多,打开,关闭,读取. path = f = f.close() 然后就用到了这个黑科技.coll ...
- Unity中DoTween的使用
在Unity手游开发中,经常用到插值运算,我们可以使用Mathf.Lerp自行去实现效果,但是使用插件提高了我们的开发效率,这里归结一下DoTween的基本使用方式以及效果说明: 直接代码: usin ...
- list集合排序2
java根据List内对象的属性排序 原创 2016年12月07日 00:20:01 标签: java / 对象 / sort / compare 2625 方法一:实现Comparator接口,并重 ...