前面的文章我们已经实现了根据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. Mysql中自定义函数编程

    1.语法 1.1 新建函数 Create function function_name(参数列表) returns 返回值类型 函数体 (1)函数名,应该合法的标识符,并且不应该与已有的关键字冲突. ...

  2. hadoop错误:Does not contain a valid host:port authority

    hadoop环境部署完,执行hdfs zkfc -formatZK命令时,提示如上图所示错误 错误内容: [root@study_1_1 hadoop]# hdfs zkfc -formatZK Ex ...

  3. LWIP内存管理

    LWIP是一种TCP/IP协议栈,与嵌入式操作系统一样也提供了内存管理. 内存池里面有多个同样大小的内存,不同类型的内存池其里面的内存大小不一样.

  4. SDN网络工具

    TcpDump 根据使用者的定义对网络上的数据包进行截获的包分析工具. http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html ...

  5. php eval

    // Our PHP code inside a variable $phpCode = ' class Foo { private $name; public function __construc ...

  6. 白话浅说TCP/UDP面向连接,面向无连接的区别

    TCP是面向连接的UDP是面向无连接的就是这种关系了 TCP(Transmission Control Protocol,传输控制协议) UDP(User Datagram Protocol,用户数据 ...

  7. WCF 学习笔记

    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点 ...

  8. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

  9. arch+win7 双系统启动引导

    笔者的电脑之前已经安装了win7,安装完arch后电脑中存在两个系统,因此需要引导连个系统. 1. 在安装arch时,一般都会安装grub.如果没有安装,则参考arch wiki中 grub2一节安装 ...

  10. 学习python4

    文件系统实现文件的增删改查 UnicodeDecodeError: 'gbk' codec can't decode byte 0x9a in position 8: illegal multibyt ...