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 @ 2021-02-05 15:32  BNTang  阅读(155)  评论(0编辑  收藏  举报