• <nav id="dstbx"></nav>

    <nav id="dstbx"></nav>
    1. <form id="dstbx"></form>
    2. <small id="dstbx"></small>

      教育行業A股IPO第一股(股票代碼 003032)

      全國咨詢/投訴熱線:400-618-4000

      如何操作MyBatis框架查詢客戶?有幾種查詢方式?

      更新時間:2021年03月22日16時39分 來源:傳智教育 瀏覽次數:

      在實際開發中,查詢操作通常都會涉及到單條數據的精確查詢,以及多條數據的模糊查詢。那么使用MyBatis框架是如何進行這兩種查詢的呢?接下來,本小節將講解下如何使用MyBatis框架根據客戶編號查詢客戶信息,以及根據客戶名模糊查詢客戶信息。

      1.根據客戶編號查詢客戶信息

      根據客戶編號查詢客戶信息主要是通過查詢客戶表中的主鍵(這里表示唯一的客戶編號)來實現的,其具體實現步驟如下:

      (1)在MySQL數據庫中,創建一個名為mybatis的數據庫,在此數據庫中創建一個t_customer表,同時預先插入幾條數據。此操作所執行的SQL語句如下所示。

      # 創建一個名稱為mybatis的數據庫
      CREATE DATABASE mybatis;
      # 使用mybatis數據庫
      USE mybatis;
      # 創建一個名稱為t_customer的表
      CREATE TABLE t_customer (
          id int(32) PRIMARY KEY AUTO_INCREMENT,
          username varchar(50),
          jobs varchar(50),
          phone varchar(16)
      );
      # 插入3條數據
      INSERT INTO t_customer VALUES ('1', 'joy', 'doctor', '13745874578');
      INSERT INTO t_customer VALUES ('2', 'jack', 'teacher', '13521210112');
      INSERT INTO t_customer VALUES ('3', 'tom', 'worker', '15179405961');

      完成上述操作后,數據庫t_customer表中的數據如圖1所示。

      圖1 t_customer表

      (2)在Eclipse中,創建一個名為chapter06的Web項目,將MyBatis的核心JAR包、lib目錄中的依賴JAR包,以及MySQL數據庫的驅動JAR包一同添加到項目的lib目錄下, 并發布到類路徑中。添加后的lib目錄如圖2所示。

      圖2 MyBatis相關JAR

      (3)由于MyBatis默認使用log4j輸出日志信息,所以如果要查看控制臺的輸出SQL語句,那么就需要在classpath路徑下配置其日志文件。在項目的src目錄下創建log4j.properties文件,編輯后的內容如文件1所示。

      文件1 log4j.properties

      # Global logging configuration
      log4j.rootLogger=ERROR, stdout
      # MyBatis logging configuration...
      log4j.logger.com.itheima=DEBUG
      # Console output...
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

      在文件1中,包含了全局的日志配置、MyBatis的日志配置和控制臺輸出,其中MyBatis的日志配置用于將com.itheima包下所有類的日志記錄級別設置為DEBUG。

      由于log4j文件中的具體內容已經超出了本書范圍,所以這里不過多講解,讀者可自行查找資料學習。上述配置文件代碼也不需要讀者全部手寫,在MyBatis使用手冊中的Logging小節,可以找到如圖3所示的配置信息,只需將其復制到項目的log4j配置文件中,并對MyBatis的日志配置信息進行簡單修改即可使用。

      圖3 MyBatis使用手冊中的Logging配置

      (4)在src目錄下,創建一個com.itheima.po包,在該包下創建持久化類Customer,并在類中聲明id、username、jobs和phone屬性,及其對應的getter/setter方法,如文件2所示。

      文件2 Customer.java

           package com.itheima.po;
           /**
            * 客戶持久化類
            */
           public class Customer {
               private Integer id;       // 主鍵id
               private String username; // 客戶名稱
               private String jobs;      // 職業
               private String phone;     // 電話
               public Integer getId() {
                   return id;
               }
               public void setId(Integer id) {
                   this.id = id;
               }
               public String getUsername() {
                   return username;
               }
               public void setUsername(String username) {
                   this.username = username;
               }
               public String getJobs() {
                   return jobs;
               }
               public void setJobs(String jobs) {
                   this.jobs = jobs;
               }
               public String getPhone() {
                   return phone;
               }
               public void setPhone(String phone) {
                   this.phone = phone;
               }
               @Override
               public String toString() {
                   return "Customer [id=" + id + ", username=" + username + 
                                  ", jobs=" + jobs + ", phone=" + phone + "]";
               }
           }

      從上述代碼可以看出,持久化類Customer與普通的JavaBean并沒有什么區別,只是其屬性字段與數據庫中的表字段相對應。實際上,Customer就是一個POJO(普通Java對象),MyBatis就是采用POJO作為持久化類來完成對數據庫操作的。

      (5)在src目錄下,創建一個com.itheima.mapper包,并在包中創建映射文件CustomerMapper.xml,編輯后如文件3所示。

      文件3 CustomerMapper.xml

           <?xml version="1.0" encoding="UTF-8"?>
           <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
               "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
           <!-- namespace表示命名空間 -->
           <mapper namespace="com.itheima.mapper.CustomerMapper">
               <!--根據客戶編號獲取客戶信息 -->
               <select id="findCustomerById" parameterType="Integer"
                   resultType="com.itheima.po.Customer">
                   select * from t_customer where id = #{id}
               </select>
           </mapper>

      在文件3中,第2~3行是MyBatis的約束配置,第5~11行是需要程序員編寫的映射信息。其中,<mapper>元素是配置文件的根元素,它包含一個namespace屬性,該屬性為這個<mapper>指定了唯一的命名空間,通常會設置成“包名+SQL映射文件名”的形式。子元素<select>中的信息是用于執行查詢操作的配置,其id屬性是<select>元素在映射文件中的唯一標識;parameterType屬性用于指定傳入參數的類型,這里表示傳遞給執行SQL的是一個Integer類型的參數;resultType屬性用于指定返回結果的類型,這里表示返回的數據是Customer類型。在定義的查詢SQL語句中,“#{}”用來表示一個占位符,相當于“?”,而“#{id}”表示該占位符待接收參數的名稱為id。

      多學一招: 快速獲取配置文件的約束信息

      在MyBatis的映射文件中,包含了一些約束信息,初學者如果自己動手去編寫,不但浪費時間,還容易出錯。其實,在MyBatis使用手冊中,就可以找到這些約束信息,具體的獲取方法如下:

      打開MyBatis的使用手冊mybatis-3.4.2.pdf,在第2小節Getting started(入門指南)下的2.1.5小節Exploring Mapped SQL Statements中,即可找到映射文件的約束信息。如圖4所示。

      圖4 映射文件的約束信息

      在圖4中,方框處標注的文件信息就是MyBatis映射文件的約束信息。初學者只需將信息復制到項目創建的XML文件中即可。

      (6)在src目錄下,創建MyBatis的核心配置文件mybatis-config.xml,編輯后如文件4所示。

      文件4 mybatis-config.xml

           <?xml version="1.0" encoding="UTF-8" ?>
           <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
               "http://mybatis.org/dtd/mybatis-3-config.dtd">
           <configuration>
              <!--1.配置環境 ,默認的環境id為mysql-->
               <environments default="mysql">
                   <!--1.2.配置id為mysql的數據庫環境 -->
                   <environment id="mysql">
                       <!-- 使用JDBC的事務管理 -->
                       <transactionManager type="JDBC" />
                       <!--數據庫連接池 -->
                       <dataSource type="POOLED">
                         <property name="driver" value="com.mysql.jdbc.Driver" />
                         <property name="url" 
                                       value="jdbc:mysql://localhost:3306/mybatis" />
                         <property name="username" value="root" />
                         <property name="password" value="root" />
                       </dataSource>
                   </environment>
               </environments>
               <!--2.配置Mapper的位置 -->
               <mappers>
                   <mapper resource="com/itheima/mapper/CustomerMapper.xml" />
               </mappers>
           </configuration>

      在文件4中,第2~3行是MyBatis的配置文件的約束信息,下面<configuration>元素中的內容就是開發人員需要編寫的配置信息。這里按照<configuration>子元素的功能不同,將配置分為了兩個步驟:第1步配置了環境,第2步配置了Mapper的位置。關于上述代碼中各個元素的詳細配置信息將在下一章進行詳細講解,此案例中讀者只需要按照上述代碼配置即可。

      小提示:

      上述配置文件同樣不需要讀者完全手動編寫。在MyBatis使用手冊mybatis-3.4.2.pdf的2.1.2小節中,已經給出了配置模板(包含約束信息),讀者只需要復制過來,依照自己的項目需求修改即可。

      (7)在src目錄下,創建一個com.itheima.test包,在該包下創建測試類MybatisTest,并在類中編寫測試方法findCustomerByIdTest(),如文件5所示。

      文件5 MybatisTest.java

           package com.itheima.test;
           import java.io.InputStream;
           import org.apache.ibatis.io.Resources;
           import org.apache.ibatis.session.SqlSession;
           import org.apache.ibatis.session.SqlSessionFactory;
           import org.apache.ibatis.session.SqlSessionFactoryBuilder;
           import org.junit.Test;
           import com.itheima.po.Customer;
           /**
            * 入門程序測試類
            */
           public class MybatisTest {
               /**
                * 根據客戶編號查詢客戶信息
                */
               @Test
               public void findCustomerByIdTest() throws Exception {
                   // 1、讀取配置文件
                   String resource = "mybatis-config.xml";
                   InputStream inputStream = 
                                Resources.getResourceAsStream(resource);
                   // 2、根據配置文件構建SqlSessionFactory
                   SqlSessionFactory sqlSessionFactory = 
                                new SqlSessionFactoryBuilder().build(inputStream);
                   // 3、通過SqlSessionFactory創建SqlSession
                   SqlSession sqlSession = sqlSessionFactory.openSession();
                   // 4、SqlSession執行映射文件中定義的SQL,并返回映射結果
                   Customer customer = sqlSession.selectOne("com.itheima.mapper"
                             + ".CustomerMapper.findCustomerById", 1);
                   // 打印輸出結果
                   System.out.println(customer.toString());
                   // 5、關閉SqlSession
                   sqlSession.close();
               }
           }

      在文件5的findCustomerByIdTest()方法中,首先通過輸入流讀取了配置文件,然后根據配置文件構建了SqlSessionFactory對象。接下來通過SqlSessionFactory對象又創建了SqlSession對象,并通過SqlSession對象的selectOne()方法執行查詢操作。selectOne()方法的第1個參數表示映射SQL的標識字符串,它由CustomerMapper.xml中<mapper>元素的namespace屬性值+<select>元素的id屬性值組成;第2個參數表示查詢所需的參數,這里查詢的是客戶表中id為1的客戶。為了查看查詢結果,這里使用了輸出語句輸出查詢結果信息。最后,程序執行完畢時,關閉了SqlSession。

      使用JUnit4測試執行findCustomerByIdTest()方法后,控制臺的輸出結果如圖5所示。

      圖5 運行結果

      從圖5可以看出,使用MyBatis框架已經成功查詢出了id為1的客戶信息。

      2.根據客戶名模糊查詢客戶信息

      了解了如何使用MyBatis根據客戶編號查詢客戶信息后,接下來講解下如何根據客戶的名稱來模糊查詢相關的客戶信息。

      模糊查詢的實現非常簡單,只需在映射文件中通過<select>元素編寫相應的SQL語句,并通過sqlSession的查詢方法執行該SQL即可。其具體實現步驟如下:

      (1)在映射文件CustomerMapper.xml中,添加根據客戶名模糊查詢客戶信息列表的SQL語句,具體實現代碼如下。

      <!--根據客戶名模糊查詢客戶信息列表-->
      <select id="findCustomerByName" parameterType="String"
          resultType="com.itheima.po.Customer">
          select * from t_customer where username like '%${value}%'
      </select>

      與根據客戶編號查詢相比,上述配置代碼中的屬性id、parameterType和SQL語句都發生相應變化。其中,SQL語句中的“${}”用來表示拼接SQL的字符串,即不加解釋的原樣輸出。“${value}”表示要拼接的是簡單類型參數。

      腳下留心:防止SQL注入

      在使用“${}”進行SQL字符串拼接時,無法防止SQL注入問題。所以想要既能實現模糊查詢,又要防止SQL注入,可以對上述映射文件CustomerMapper.xml中模糊查詢的select語句進行修改,使用MySQL中的concat()函數進行字符串拼接。具體修改示例如下所示。

      select * from t_customer where username like concat('%',#{value},'%')

      (2)在測試類MybatisTest中,添加一個測試方法findCustomerByNameTest(),其代碼如下所示。

      /**
       * 根據用戶名稱來模糊查詢用戶信息列表
       */
      @Test
      public void findCustomerByNameTest() throws Exception{    
          // 1、讀取配置文件
          String resource = "mybatis-config.xml";
          InputStream inputStream = Resources.getResourceAsStream(resource);
          // 2、根據配置文件構建SqlSessionFactory
          SqlSessionFactory sqlSessionFactory = 
      new SqlSessionFactoryBuilder().build(inputStream);
          // 3、通過SqlSessionFactory創建SqlSession
          SqlSession sqlSession = sqlSessionFactory.openSession();
          // 4、SqlSession執行映射文件中定義的SQL,并返回映射結果
          List<Customer> customers = sqlSession.selectList("com.itheima.mapper"
                      + ".CustomerMapper.findCustomerByName", "j");
          for (Customer customer : customers) {
              //打印輸出結果集
              System.out.println(customer);
          }
          // 5、關閉SqlSession
          sqlSession.close();
      }

      從上述代碼可以看出,findCustomerByNameTest()方法只是在第4步時與根據客戶編號查詢的測試方法有所不同,其他步驟都一致。在第4步時,由于可能查詢出的是多條數據,所以調用的是SqlSession的selectList()方法來查詢返回結果的集合對象,并使用for循環輸出結果集對象。

      使用JUnit4執行findCustomerByNameTest()方法后,控制臺的輸出結果如圖6所示。

      圖6 運行結果

      從圖6可以看出,使用MyBatis框架已成功查詢出了客戶表中客戶名稱中帶有“j”的2條客戶信息。

      至此,MyBatis入門程序的查詢功能就已經講解完成。從上面兩個查詢方法中可以發現,MyBatis的操作大致可分為以下幾個步驟:

      1) 讀取配置文件。

      2) 根據配置文件構建SqlSessionFactory。

      3) 通過SqlSessionFactory創建SqlSession。

      4) 使用SqlSession對象操作數據庫(包括查詢、添加、修改、刪除,以及提交事務等)。

      5) 關閉SqlSession。




      猜你喜歡:

      Mybatis原理介紹:MyBatis如何操作數據庫?

      Spring Boot中使用MyBatis注解配置詳解

      Mybatis執行SQL命令是怎么實現的?

      MyBatis中使用#和$有什么區別?

      傳智教育Java培訓班

      神马影院我不卡,农村丰满肥熟老妇女,午夜电影网,2018日日摸夜夜添夜夜添 网站地图