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
posted @ 2019-05-07 10:13  凌枫zoz  阅读(404)  评论(0编辑  收藏  举报