MyBatis-查询
查询所有
修改 CustomerMapper.xml
文件,修改内容如下。
<!-- 查询所有 -->
<select id="queryAllCustomer" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer;
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllCustomer");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
根据某个字段模糊查询
我将介绍 两种方式
进行查询,首先来看第一种,修改 CustomerMapper.xml
内容如下。
<!-- 根据用户名模糊查询 -->
<select id="queryAllByName" parameterType="String" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer
WHERE cust_name LIKE '%${value}%';
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllByName", "剑");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
第二种方式,一样的修改 CustomerMapper.xml
内容如下。
<!-- 根据用户名模糊查询 -->
<select id="queryAllByName" parameterType="String" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer
WHERE cust_name LIKE #{value};
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllByName", "%剑%");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
总结
parameterType
- 指定输入参数的类型,mybatis 通过
ognl
从输入对象中获取参数值拼接在 sql 中。
resultType
- 指定输出结果的类型,mybatis 将 sql 查询结果的一行记录数据映射为 resultType 指定类型的对象。
- 如果有多条数据,则分别进行映射,并把对象放到容器 List 中。
selectOne
- 查询一条记录, mysql 中一行数据就是一条记录。
- 如果使用
selectOne
查询出了多条记录则会抛出异常
。
selectList
- 可以查询出一条或多条记录。
#{} 和 ${} 的区别
#{}
- 表示一个占位符号,通过
#{}
可以实现 preparedStatement 向占位符中设置值。 - 自动进行 Java 类型和 JDBC 类型的转换。
#{}
可以有效的防止 SQL 注入。#{}
可以接收简单类型的值或 POJO 属性值。- 如果 parameterType 传输单个简单类型值, #{} 括号中可以是 value 或其它名称来代码传递的值。
${}
- 表示拼接 SQL 串。
- 通过
${}
可以将 parameterType 传入的内容拼接在 SQL 中并且不会进行 JDBC 类型的转换。 ${}
可以接收简单类型的值或 POJO 属性值。- 如果 parameterType 传输单个简单类型值,${} 括号中只能是 value。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具