前面的文章我们已经实现了根据id查询用户信息的功能,下面我们进行其他业务功能的实现。

一、根据用户名模糊查询用户列表

  查询使用的sql : select * from user where username like '%小明%'

方法一:

  1.1.1 在UserMapper.xml映射文件中添加如下信息:

 <!--如果返回多个结果,mybatis会自动把返回的结果放在list容器中  -->
<!--resultType的配置和返回一个结果的配置一样 -->
<!--实现功能 :根据用户名模糊查询用户列表 -->
<select id="findUserByUsername" parameterType="String" resultType="com.lwjnicole.pojo.User">
select * from user where username like #{username}
</select>

  1.2.1 在Test类中添加Junit测试方法:

 package mybatis_study;

 import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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.After;
import org.junit.Before; import com.lwjnicole.pojo.User; public class Test {
private SqlSessionFactory sqlSessionFactory = null;
private SqlSession session = null; @Before
public void before(){
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
InputStream inputStream = null;
try {
//加载SqlMapConfig.xml配置文件
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSessionFactory对象
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
} //根据用户名模糊查询用户列表
@org.junit.Test
public void findUserByUsername(){
//创建SqlSession对象
session = sqlSessionFactory.openSession();
//使用SqlSession对象执行查询sql,获得结果(查询多条数据,使用selectList方法)
List<User> userList = session.selectList("findUserByUsername", "%小明%");
//打印结果
for (User user : userList) {
System.out.println(user);
}
} @After
public void after(){
//释放资源
session.close();
}
}

  1.3.1 打印结果为:

方法二:

  2.1.1 在UserMapper.xml映射文件中添加如下信息:

     <!--如果返回多个结果,mybatis会自动把返回的结果放在list容器中  -->
<!--resultType的配置和返回一个结果的配置一样 -->
<!--实现功能 :根据用户名模糊查询用户列表 -->
<select id="findUserByUsername" parameterType="String" resultType="com.lwjnicole.pojo.User">
select * from user where username like '%${value}%'
</select>

  2.1.2 在Test类中添加Junit测试方法:

 package mybatis_study;

 import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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.After;
import org.junit.Before; import com.lwjnicole.pojo.User; public class Test {
private SqlSessionFactory sqlSessionFactory = null;
private SqlSession session = null; @Before
public void before(){
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
InputStream inputStream = null;
try {
//加载SqlMapConfig.xml配置文件
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSessionFactory对象
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
} //根据用户名模糊查询用户列表
@org.junit.Test
public void findUserByUsername(){
//创建SqlSession对象
session = sqlSessionFactory.openSession();
//使用SqlSession对象执行查询sql,获得结果(查询多条数据,使用selectList方法)
List<User> userList = session.selectList("findUserByUsername", "小明");
//打印结果
for (User user : userList) {
System.out.println(user);
}
} @After
public void after(){
//释放资源
session.close();
}
}

  2.1.3 打印结果:

二、总结

  2.1 #{} 和 ${} 的区别:

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

  ${} 表示拼接SQL串,通过 ${} 可以将 parameterType 中传入的内容拼接在sql 中且 不进行jdbc类型转换,${} 可以接收简单类型值和 pojo 属性值,如果 parameterType 传输单个简单类型值,#{} 括号中只能填写 value 。

  2.2 parameterType 和 resultType

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

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

  2.3 selectOne 方法 和 selectList 方法:

selectOne 方法:查询一条记录,如果使用 selectOne 查询多条记录,则会抛出异常:

    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

selectList  方法:可以查询一条或者多条记录。

mybatis的CRUD实例(三)的更多相关文章

  1. mybatis的CRUD实例(四)

    接下来我们来实现新增用户功能: 一.新增用户 这里我们使用的sql为:insert into user(username,birthday,sex,address) values ("lwj ...

  2. Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

    关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务 ...

  3. mybatis(CRUD)

    3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...

  4. C语言库函数大全及应用实例三

    原文:C语言库函数大全及应用实例三 [编程资料]C语言库函数大全及应用实例三 函数名: ecvt 功 能: 把一个浮点数转换为字符串 用 法: char ecvt(double value, int ...

  5. Springboot & Mybatis 构建restful 服务三

    Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...

  6. MyBatis:CRUD功能

    在前面已经自动生成了mapper和pojo,接下来我们实现mybatis的CRUD功能,先新建service.controller层的方法. 这里的sid是一个开源的id生成类,写完后,我们还需要在启 ...

  7. MyBatis基础入门《三》Select查询集合

    MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...

  8. Mybatis的CRUD案例

    一.Mybatis增删改查案例 上一节<Mybatis入门和简单Demo>讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作 ...

  9. Mybatis 实用篇(三)参数处理

    Mybatis 实用篇(三)参数处理 sql 语句中的参数 parameterType 可以省略不写. 一.参数封装 1.1 单个参数处理 public interface UserMapper { ...

随机推荐

  1. 最小生成树 prim

    1.算法思想: 图采用邻接矩阵存储,贪心找到目前情况下能连上的权值最小的边的另一端点,加入之,直到所有的顶点加入完毕. 2.算法实现步骤: 设图G =(V,E),其生成树的顶点集合为U. (1)把v0 ...

  2. Spring MVC @RequestMapping浅析

    简介:@RequestMappingRequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.RequestMapp ...

  3. 使用jQuery 取文本

    <html> <head> <meta charset="UTF-8"> <title>b</title> <sc ...

  4. SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系

    一般我们开发时,使用最多的还是@RequestMapping注解方式. @RequestMapping(value = "/", param = "role=guest& ...

  5. Android AIDL的用法

    一.什么是AIDL服务   一般创建的服务并不能被其他的应用程序访问.为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Cal ...

  6. Delphi 中调用JS文件中的方法

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. Android-Intent意图传递数据

    Intent意图传递基本数据类型: OuterActivity 激活启动 OneActivity 用Intent携带基本数据类型: /** * Intent意图传递数据到另外一个Activity */ ...

  8. C#连接MySql数据库代码

    之前学JAVA的时候,老师讲数据库的时候,讲到可以用一个类来连接数据库,叫做Dao层,今天要用C#做上位机,也有一些数据要写到数据库中去,我就想,能不能也给C#写一个这样的Dao层来连接数据库,我就去 ...

  9. VS 2015 IDE 不支持 MS SQL 2000 生成 dbml

    解决办法: 通过命令手动生成 然后把生成的ERendering.dbml 文件,通过工程项目-添加-现有项,加入项目.

  10. 2018-12-20 第一章初识JAVA-上机

    JAVA初体验之课后练习 一.请写出Java 程序执行过程与编译原理 答:①执行过程:创建.java文件——编译器(JDK环境里的javac.exe文件编译)——输出.class供计算机接受(只有cl ...