zoukankan      html  css  js  c++  java
  • MyBatis的查询

     MyBatis的查询

    在上一个MyBatis的核心API中介绍了SqlSessionFactoryBuilder、SqlSessionFactory以及SqlSession是什么,它们都有什么作用,本章节将继续衔接上面的用MyBatis集合查询等

    在Customer.xml中添加查询客户的sql语句

    10      <!--查询所有用户,不需要返回参数-->
    11     <select id="queryAllCustomer" resultType="com.lqg.domain.Customer" >
    12         select * from `customer`
    13     </select>

    在MyBatis中测试查询所有用户

    1  //查询所有用户
    2         List<Customer> list = sqlSession.selectList("queryAllCustomer", customer);
    3         for (Customer customer1:list) {
    4             System.out.println(customer1);
    5         }

    效果如下:

    根据用户名模糊查询客户方法一,使用特殊字符,下面会作详细的介绍

    1  <!--根据用户名模糊查询-->
    2     <select id="queryAllByName" parameterType="String" resultType="com.lqg.domain.Customer">
    3         select * from customer where cust_name like '%${value}%'
    4     </select>

    在测试类中根据姓名查询所有姓张的用户

    1 //根据名字进行模糊查询
    2         List<Customer> list2 = sqlSession.selectList("queryAllByName", "张");
    3         for(Customer customer2:list){
    4             System.out.println(customer2);
    5         }

    根据用户名模糊查询客户方法一的效果如下

    在Customer.xml中根据用户名模糊查询客户方法二

    1 <select id="queryAllName" parameterType="String" resultType="com.lqg.domain.Customer">
    2         select * from customer where cust_name like #{customer}
    3 </select>

    在测试类中根据姓名查询所有姓张的用户

    1 //根据名字进行模糊查询方法二
    2         List<Customer> queryAllByName = sqlSession.selectList("queryAllName", "%张%");
    3         for(Customer customer3:queryAllByName){
    4             System.out.println(customer3);
    5         }

    下面是Customer.xml和MyBatisTest的全部代码,包括根据id查询单个用户的信息,查询所有的信息,根据姓名进行模糊查询

    Customer.xml的全部代码

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="Mytest">
     6     <!--根据id查询用户-->
     7     <select id="queryCustomerById" parameterType="Int" resultType="com.lqg.domain.Customer">
     8         select * from `customer` where cust_id = #{cust_id}
     9     </select>
    10      <!--查询所有用户,不需要返回参数-->
    11     <select id="queryAllCustomer" resultType="com.lqg.domain.Customer" >
    12         select * from `customer`
    13     </select>
    14    <!-- &lt;!&ndash;根据用户名模糊查询&ndash;&gt;-->
    15     <select id="queryAllByName" parameterType="String" resultType="com.lqg.domain.Customer">
    16         select * from customer where cust_name like '%${value}%'
    17     </select>
    18 
    19     <select id="queryAllName" parameterType="String" resultType="com.lqg.domain.Customer">
    20         select * from customer where cust_name like #{customer}
    21     </select>
    22 </mapper>

    MyBatisTest的全部代码:

     1 package com.lqg.test;
     2 
     3 import com.lqg.domain.Customer;
     4 import org.apache.ibatis.io.Resources;
     5 import org.apache.ibatis.session.SqlSession;
     6 import org.apache.ibatis.session.SqlSessionFactory;
     7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     8 import org.junit.Test;
     9 
    10 import java.io.IOException;
    11 import java.io.InputStream;
    12 import java.util.List;
    13 
    14 public class MyBatisTest {
    15     @Test
    16     public void test() throws IOException {
    17         //1.创建一个SqlSessionFactoryBulider的类
    18         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    19         //2.加载SqlMapConfig.xml的配置文件
    20         InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    21         //3.创建SqlSessionFactory对象
    22         SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    23        //4.创建SqlSession对象
    24         SqlSession sqlSession = sqlSessionFactory.openSession();
    25         //5.用sqlSession对象执行查询
    26         Customer customer = sqlSession.selectOne("queryCustomerById",1);
    27         System.out.println(customer);
    28         //查询所有用户
    29         List<Customer> list = sqlSession.selectList("queryAllCustomer", customer);
    30         for (Customer customer1:list) {
    31             System.out.println(customer1);
    32         }
    33         //根据名字进行模糊查询方法一
    34         List<Customer> list2 = sqlSession.selectList("queryAllByName", "张");
    35         for(Customer customer2:list2){
    36             System.out.println(customer2);
    37         }
    38         //根据名字进行模糊查询方法二
    39         List<Customer> queryAllByName = sqlSession.selectList("queryAllName", "%张%");
    40         for(Customer customer3:queryAllByName){
    41             System.out.println(customer3);
    42         }
    43 
    44     }
    45 }

    总结:

    parameterType指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中

    resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中

    selectOne

    • 查询一条记录
    • 如果使用selectOne查询多条记录则抛出异常

    selectList:可以查询一条或多条记录

    #{}和${}

    #{}

    • 表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值
    • 自动进行java类型jdbc类型转换
    • #{}可以有效防止sql注入
    • #{}可以接收简单类型值或pojo属性值
    • 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称

    ${}:

    • 通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换
    • ${}可以接收简单类型值或pojo属性值
    • 如果parameterType传输单个简单类型值,${}括号中只能是value
  • 相关阅读:
    JAVA多态
    JAVA中的继承
    Nginx配置中root和alisa指定文件路径的区别
    NGINX配置详解
    Jenkins填坑之邮件模板分享
    jenkins填坑之HTML报告样式问题
    Jenkins填坑之仅获取本次构建的HTML报告作为附件发送邮件
    Jenkins填坑之发送邮件无法获取HTML报告作为附件
    jenkins填坑之邮件模板中的变量无法正常获取值
    Jenkins填坑之构建ant项目时,执行结果提示input file xxx.jtl does not exist
  • 原文地址:https://www.cnblogs.com/lqgcn/p/10823824.html
Copyright © 2011-2022 走看看