前面的文章我们已经实现了根据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. EZOJ #227

    传送门 分析 我们发现第一段数和最后一段数对答案的贡献系数为1/-1,其余为0/2/-2 而且对于相邻两段不能系数均非0 于是可以dp 代码 #include<iostream> #inc ...

  2. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  3. mysqli_query(“set nams utf8”)为FALSE

    经过过测试: mysqli_query("set nams  utf8")必须在所有语句的执行之前,否则会返回FALSE. 看手册,说不建议用mysqli_query来设置编码,用 ...

  4. JS和DOM的关系

    DOM对象 DOM实际上是以面向对象方式描述的文档模型.DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系. 根据W3C DOM规范,DOM是HTML与XML的应用编程接 ...

  5. funk_SVD 个人理解

    目标函数: $ J = \frac{1}{2} \left\| R - PQ \right\|^{2} + \lambda \left( \left\|P \right\|^{2} +\left\| ...

  6. Actor模型文章收集

    参与者模式——维基百科 Akka.Net——github开源项目 Actor原理——比较深入的文章

  7. C# JSON使用过程中开发的小工具

    我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...

  8. 深入理解java虚拟机(十四)正确利用 JVM 的方法内联

    在IntelliJ IDEA里面Ctrl+Alt+M用来拆分方法.选中一段代码,敲下这个组合,非常简单.Eclipse也用类似的快捷键,使用 Alt+Shift+M.我讨厌长的方法,提起这个下面这个方 ...

  9. 哇,两门学考都是A(〃'▽'〃)

    看来只要拼命去搞,两个月也是可以搞出来的啊~

  10. 修改TomCat端口实现多实例

      TomCat默认的端口是8080,还会占用8005,8009和8443端口.如果已经启动了tomcat,再启动一个tomcat会发现这些端口已经被占用了,这个时候就需要修改端口号.   以apac ...