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。
posted @   BNTang  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示