中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

什么網(wǎng)站可以免費(fèi)做兼職網(wǎng)絡(luò)推廣的方式有哪些?

什么網(wǎng)站可以免費(fèi)做兼職,網(wǎng)絡(luò)推廣的方式有哪些?,有個人做網(wǎng)站的嗎,沈陽婦科檢查去哪個醫(yī)院較好1. MyBatis 關(guān)于查詢語句上配置的詳細(xì)內(nèi)容 文章目錄 1. MyBatis 關(guān)于查詢語句上配置的詳細(xì)內(nèi)容2. 準(zhǔn)備工作3. SQL查詢結(jié)果&#xff0c;返回為POJO實(shí)體類型4. SQL查詢結(jié)果&#xff0c;返回為List<POJO\> 集合類型5. SQL查詢結(jié)果&#xff0c;返回為Map 集合6. SQL查詢結(jié)果&…

1. MyBatis 關(guān)于查詢語句上配置的詳細(xì)內(nèi)容

文章目錄

  • 1. MyBatis 關(guān)于查詢語句上配置的詳細(xì)內(nèi)容
  • 2. 準(zhǔn)備工作
  • 3. SQL查詢結(jié)果,返回為POJO實(shí)體類型
  • 4. SQL查詢結(jié)果,返回為List<POJO\> 集合類型
  • 5. SQL查詢結(jié)果,返回為Map 集合
  • 6. SQL查詢結(jié)果,返回為List<Map\>集合
  • 7. SQL查詢結(jié)果,返回為Map<String,Map>
  • 8. SQL查詢結(jié)果,返回總記錄條數(shù)
  • 9. SQL查詢,resultMap 結(jié)果映射
    • 9.1 第二種方式:使用 resultMap 進(jìn)行結(jié)果映射
    • 9.2 第三種方式:開啟駝峰命名自動映射
  • 10. 總結(jié):
  • 11. 最后:


2. 準(zhǔn)備工作

數(shù)據(jù)表結(jié)構(gòu)的設(shè)計(jì),數(shù)據(jù)表名為:t_car

在這里插入圖片描述

t_car 表中的數(shù)據(jù)信息:
在這里插入圖片描述

pom.xml 文件當(dāng)中配置相關(guān)的依賴的 jar 包如下:

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rainbowsea</groupId><artifactId>mybatis-005-crud-blog</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!--        mybatis 的依賴--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><!--        mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--        引入 logback的依賴,這個日志框架實(shí)現(xiàn)了slf4j 規(guī)范--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency></dependencies></project>

配置 logback 的配置文件,用于打印顯示,我們的日志信息,方便我們查看我們的運(yùn)行過程,效果。

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"><!-- 控制臺輸出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!--mybatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- 日志輸出級別,logback日志級別包括五個:TRACE < DEBUG < INFO < WARN < ERROR --><root level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root></configuration>

配置 MyBatis 的核心配置文件,

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--  使用 <package>	還可以將這個包下的所有的類的全部自動起別名,別名就是簡名,不區(qū)分大小寫 --><package name="com.rainbowsea.mybatis.pojo"/></typeAliases><environments default="mybatis"><environment id="mybatis"><!--            MANAGED 沒有用第三框架管理的話,都是會被提交的,沒有事務(wù)上的管理了 --><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="MySQL123"/></dataSource></environment></environments><mappers><!-- 這里也是可以使用 package 包名掃描,但是同樣的:對應(yīng)接口路徑要一致,接口名一致--><package name="com.rainbowsea.mybatis.mapper"></package></mappers>
</configuration>

對照 t_car 創(chuàng)建的ORM 映射的 Car 類

注意:在MyBatis 當(dāng)中對應(yīng)的ORM ,一般在框架里對應(yīng)的 Bean實(shí)體類,一定要實(shí)現(xiàn)該 set 和 get 方法以及無參數(shù)構(gòu)造方法,無法框架無法使用反射機(jī)制,進(jìn)行操作 。

建議用包裝類,這樣可以防止 Null的問題,因?yàn)?#xff08;簡單類型 int num = null ,是不可以賦值為 null)的編譯無法通過

在這里插入圖片描述

package com.rainbowsea.mybatis.pojo;public class Car {// 數(shù)據(jù)庫表當(dāng)中的字段應(yīng)該和pojo類的屬性一一對應(yīng)// 建議使用包裝類,這樣可以防止null的問題private Long id;private String carNum;private String brand;private Double guidePrice;private String produceTime;private String carType;public Car() {}public Car(Long id, String carNum, String brand, Double guidePrice, String produceTime, String carType) {this.id = id;this.carNum = carNum;this.brand = brand;this.guidePrice = guidePrice;this.produceTime = produceTime;this.carType = carType;}@Overridepublic String toString() {return "Car{" +"id=" + id +", carNum='" + carNum + '\'' +", brand='" + brand + '\'' +", guidePrice=" + guidePrice +", produceTime='" + produceTime + '\'' +", catType='" + carType + '\'' +'}';}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getCarNum() {return carNum;}public void setCarNum(String carNum) {this.carNum = carNum;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public Double getGuidePrice() {return guidePrice;}public void setGuidePrice(Double guidePrice) {this.guidePrice = guidePrice;}public String getProduceTime() {return produceTime;}public void setProduceTime(String produceTime) {this.produceTime = produceTime;}public String getcarType() {return carType;}public void setcarType(String catType) {this.carType = catType;}
}

3. SQL查詢結(jié)果,返回為POJO實(shí)體類型

當(dāng)查詢的結(jié)果,有對應(yīng)的POJO 實(shí)體類,并且查詢結(jié)果只有一條時:

實(shí)操:

對應(yīng)的接口

在這里插入圖片描述

package com.rianbowsea.mybatis.mapper;import com.rianbowsea.mybatis.pojo.Car;public interface CarMapper {/*** 根據(jù) id 查詢 Car 的值* @param id* @return*/Car selectById(Long id);}

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    使用 as 別名,讓POJO實(shí)體類當(dāng)中的屬性名與數(shù)據(jù)庫的查詢結(jié)果保持一致--><select id="selectById" resultType="Car">SELECT id,car_num      as carNum,brand,guide_price  as guidePrice,produce_time as produceTime,car_type     as carTypeFROM `t_car`where id = #{id}</select></mapper>

運(yùn)行測試:

查詢id為 118 的記錄結(jié)果:

在這里插入圖片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;public class CarMapperTest {@Testpublic void testSelectById() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);Car car = mapper.selectById(118L);System.out.println(car);}
}

4. SQL查詢結(jié)果,返回為List<POJO> 集合類型

當(dāng)查詢的記錄條數(shù)是多條的時候,必須使用集合接收。如果使用單個實(shí)體類接收會出現(xiàn)異常。

在這里插入圖片描述

import com.rainbowsea.mybatis.pojo.Car;import java.util.List;public interface CarMapper {/*** 獲取所有的Car* @return*/List<Car> selectAll();}

注意:對于查詢結(jié)果返回多條記錄時,resultType的值是(集合/數(shù)組存儲的元素的類型(除了Map集合是放Map集合本身))

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    使用 as 別名,讓POJO實(shí)體類當(dāng)中的屬性名與數(shù)據(jù)庫的查詢結(jié)果保持一致--><!--    注意:對于查詢結(jié)果返回多條記錄時,resultType的值是(集合/數(shù)組存儲的元素的類型(除了Map集合是放Map集合本身))--><select id="selectAll" resultType="Car">SELECT id,car_num      as carNum,brand,guide_price  as guidePrice,produce_time as produceTime,car_type     as carTypeFROM t_car</select></mapper>

運(yùn)行測試:

查詢t_car 數(shù)據(jù)表中所有的記錄內(nèi)容:

在這里插入圖片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;public class CarMapperTest {@Testpublic void testSelectAll() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Car> cars = mapper.selectAll();cars.forEach(car -> {System.out.println(car);});sqlSession.close();}}

如果返回多條記錄,采用單個實(shí)體類接收會怎樣 ?

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

查詢結(jié)果是一條的話可以使用List集合接收嗎?當(dāng)然可以。

就是List 集合當(dāng)中,只會存儲一個記錄的內(nèi)容POJO

5. SQL查詢結(jié)果,返回為Map 集合

當(dāng)返回的數(shù)據(jù),沒有合適的實(shí)體類POJO對應(yīng)的時候,可以采用Map集合進(jìn)行接受,字段名做 : key ,字段值做:value ,查詢結(jié)果可以保證只有一條數(shù)據(jù),則返回一個Map集合。

注意:只有返回的是單個記錄的時候,才可以用單個Map集合存儲接受

Mybatis 在 查詢結(jié)果放到 Map 集合中存放的方式是:

     * Map<String,     Object>*      key          value*     "id"        	 131*     "car_num"      999*     "brand"     	 小米su7*     查詢數(shù)據(jù)庫中的字段名          對于單個對應(yīng)字段的值

? 在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

import com.rainbowsea.mybatis.pojo.Car;import java.util.List;
import java.util.Map;public interface CarMapper {/***  Mybatis 在 查詢結(jié)果放到 Map 集合中存放的方式是:*  Map<String,     Object>*      k           v*     "id"         131*     "car_num"    999*     "brand"      小米su7*     查詢          對于單個對應(yīng)字段的值*     數(shù)據(jù)庫中*     的字段名*** @param id* @return*/Map<String,Object> selectByIdRetMap(Long id);
}

注意:對于查詢結(jié)果返回多條記錄時,resultType的值是(集合/數(shù)組存儲的元素的類型(除了Map集合是放Map集合本身))resultMap=“map”,這是因?yàn)閙ybatis內(nèi)置了很多別名?!緟⒁妋ybatis開發(fā)手冊】 https://mybatis.net.cn/

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    使用 as 別名,讓POJO實(shí)體類當(dāng)中的屬性名與數(shù)據(jù)庫的查詢結(jié)果保持一致--><!--    注意:對于查詢結(jié)果返回多條記錄時,resultType的值是(集合/數(shù)組存儲的元素的類型(除了Map集合是放Map集合本身))--><select id="selectByIdRetMap" resultType="Map">SELECT id,car_num      as carNum,brand,guide_price  as guidePrice,produce_time as produceTime,car_type     as carTypeFROM t_carwhere id = #{id}</select>
</mapper>

運(yùn)行測試:

查詢 id 為 118 的記錄

在這里插入圖片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectByIdRetMap() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);Map<String, Object> cars = mapper.selectByIdRetMap(118L);System.out.println(cars);sqlSession.close();}}

在這里插入圖片描述

注意:只有返回的是單個記錄的時候,才可以用單個Map集合存儲接受 ,如果是多個記錄的話,

可以將Map集合放到List集合中。

反過來,如果返回的不是一條記錄,是多條記錄的話,只采用單個Map集合接收,這樣同樣會出現(xiàn)之前的異常:TooManyResultsException

在這里插入圖片描述

6. SQL查詢結(jié)果,返回為List<Map>集合

查詢結(jié)果條數(shù)大于等于 1 條數(shù)據(jù)時,則可以返回一個存儲 Map 集合的 List 集合。List<Map> 等同于 List<Car>

在這里插入圖片描述

在這里插入圖片描述

注意: 這個 resultType 不是 List 是 map ,注意:除了單個特殊的 Map 集合的話(因?yàn)镸ap當(dāng)中存在多個元素類型,無法斷定用其中的那個存儲的),其他的都是數(shù)組/集合當(dāng)中存放的數(shù)據(jù)的元素類型

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    使用 as 別名,讓POJO實(shí)體類當(dāng)中的屬性名與數(shù)據(jù)庫的查詢結(jié)果保持一致--><!--    這個 resultType 不是List 是 map ,注意:除了單個特殊的 Map --><!--    這個 resultType 不是List 是 map ,注意:除了單個特殊的 Map 集合的話(因?yàn)镸ap當(dāng)中存在多個元素類型,無法斷定用其中的那個存儲的),其他的都是數(shù)組/集合當(dāng)中存放的數(shù)據(jù)的元素類型--><select id="selectAllRetListMap" resultType="map">SELECT id,car_num      as carNum,brand,guide_price  as guidePrice,produce_time as produceTime,car_type     as carTypeFROM `t_car` </select></mapper>

測試運(yùn)行程序:

在這里插入圖片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectAllRetListMap() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Map<String, Object>> cars = mapper.selectAllRetListMap();cars.forEach(car->{System.out.println(car);});sqlSession.close();}}

7. SQL查詢結(jié)果,返回為Map<String,Map>

這里我們拿Car的id做 最外面的Map 的key,以后取出對應(yīng)的Map集合時更方便。最外面里面包含一個小Map集合

在這里插入圖片描述

這里我們需要使用 @MapKey 注解,該注解的作用就是將:將查詢結(jié)果的 id 字段的值作為整個Map(最外面的那個Map)集合的key。

這里你想將查詢結(jié)果中的那個字段的值,賦值給“最外面的Map”集合的 key ,就填寫對應(yīng)上的查詢上的字段名即可

在這里插入圖片描述

在這里插入圖片描述

package com.rainbowsea.mybatis.mapper;import com.rainbowsea.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;import java.util.List;
import java.util.Map;public interface CarMapper {/*** 查詢所有的Car,返回一個Map集合* Map集合的key是每條記錄的主鍵值* Map集合的value是每條記錄* @return*/@MapKey("id") // 將查詢結(jié)果的id字段的值作為整個Map集合的key。Map<Long,Map<String,Object>> selectAllRetMap();}

注意:我們這里是一個Map中套裝一個Map,

Map集合比較特殊(存在兩個值:key,value) 所以要

繼續(xù)使用Map存儲查詢結(jié)果

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    使用 as 別名,讓POJO實(shí)體類當(dāng)中的屬性名與數(shù)據(jù)庫的查詢結(jié)果保持一致-->
<!--    注意:這里是用 Map集合進(jìn)行接受的--><select id="selectAllRetMap" resultType="Map">SELECT id,car_num      as carNum,brand,guide_price  as guidePrice,produce_time as produceTime,car_type     as carTypeFROM `t_car`</select></mapper>

運(yùn)行測試:

查詢t_car 數(shù)據(jù)表中的所有內(nèi)容。

在這里插入圖片描述

在這里插入圖片描述

package com.rainbowsea.mybatis.test;import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectAllRetMap() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);Map<Long,Map<String,Object>> cars = mapper.selectAllRetMap();System.out.println(cars);sqlSession.close();}}

8. SQL查詢結(jié)果,返回總記錄條數(shù)

在這里插入圖片描述

import com.rainbowsea.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;import java.util.List;
import java.util.Map;public interface CarMapper {/*** 獲取Car的總記錄條數(shù)* @return*/Long selectTotal();
}

需要注意的是: select count(具體某個字段的話,是不會記錄null值的個數(shù)的),所以我們可以用 select count(1) from t_car ,恒為真的方式,查詢(這樣就包括了為 null 的值的個數(shù)了)

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--    <select id="selectTotal" resultType="java.lang.Long"> ,也可以用別名--><select id="selectTotal" resultType="Long">select count(1)from t_car</select></mapper>

運(yùn)行測試:

查詢 t_car 數(shù)據(jù)表中的所有記錄條數(shù)。

在這里插入圖片描述

import java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectTotal() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);Long count = mapper.selectTotal();System.out.println("總記錄條數(shù)" + count);sqlSession.close();}
}

9. SQL查詢,resultMap 結(jié)果映射

我們知道,要將 select 查詢的結(jié)果集存儲到對應(yīng)的POJO實(shí)體類當(dāng)中的必須要將查詢的字段名和POJO實(shí)體類的屬性名兩者保持一致 ,但是我們的數(shù)據(jù)庫的命名規(guī)范是下劃線 ,而在Java當(dāng)中的命名規(guī)范是駝峰命名 方式,兩者是不一致的。而想要將這兩者在不修改自身的屬性名字也能達(dá)到一個兩者名字保持一致的方案有 ,如下三種方式:

  1. 第一種方式:使用 AS 關(guān)鍵字給列起別名
  2. 第二種方式:使用 resultMap 進(jìn)行結(jié)果映射
  3. 第三種方式:開啟MyBatis 的駝峰命名自動映射(配置 settings )

第一方式:我們上述的操作都是,使用的這種方式,下面就不多贅述了。

我們來學(xué)習(xí)一下,第二,三種方式。

9.1 第二種方式:使用 resultMap 進(jìn)行結(jié)果映射

在這里插入圖片描述

import com.rainbowsea.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;import java.util.List;
import java.util.Map;public interface CarMapper {/*** 查詢所有的Car信息,使用resultMap標(biāo)簽進(jìn)行結(jié)果映射* @return*/List<Car> selectAllByResultMap();
}

resultMap 1.專門定義一個結(jié)果映射,在這個結(jié)果映射當(dāng)中指定數(shù)據(jù)庫表的字段名和Java類的屬性名的對應(yīng)關(guān)系
type屬性,用來指定POJO類的類名
id屬性,指定resultMap的唯一標(biāo)識,這個id將來要在select標(biāo)簽中使用,啟用了別名機(jī)制, 也可以用別名

注意:resultMap屬性的值必須和resultMap標(biāo)簽中id屬性值一致

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper"><!--  resultMap  1.專門定義一個結(jié)果映射,在這個結(jié)果映射當(dāng)中指定數(shù)據(jù)庫表的字段名和Java類的屬性名的對應(yīng)關(guān)系2.type屬性,用來指定POJO類的類名3.id屬性,指定resultMap的唯一標(biāo)識,這個id將來要在select標(biāo)簽中使用--><!--    <resultMap id="carResultMap" type="com.rainbowsea.mybatis.pojo.Car">--><!--  啟用了別名機(jī)制,  也可以用別名--><resultMap id="carResultMap" type="Car"><!--        如果數(shù)據(jù)表中有主鍵,一般都是有主鍵的,要不然不符合數(shù)據(jù)庫設(shè)計(jì)第一范式--><!--        如果有主鍵,建議這里配置一個id的標(biāo)簽,注意:這不是必須的,但是官方的解釋是:這樣的配置可以讓mybatis 提高效率--><id property="id" column="id"></id><!--        property 后面填寫的值是:POJO類的屬性名--><!--        column 后面填寫數(shù)據(jù)庫表查詢顯示的的字段名(用了別名的話,是別名)--><result property="carNum" column="car_num"></result><!--當(dāng)屬性名和數(shù)據(jù)庫列名一致時,可以省略。但建議都寫上。--><!--javaType用來指定屬性類型。jdbcType用來指定列類型。一般可以省略。--><result property="brand" column="brand" javaType="string" jdbcType="VARCHAR"/><result property="guidePrice" column="guide_price"></result><result property="produceTime" column="produce_time"></result><result property="carType" column="car_type"></result></resultMap><!--    select標(biāo)簽的resultMap的屬性,用來指定使用哪個結(jié)果映射,resultMap后面的值是resultMap的id--><!--resultMap屬性的值必須和resultMap標(biāo)簽中id屬性值一致。--><select id="selectAllByResultMap" resultMap="carResultMap">SELECT id,car_num,brand,guide_price,produce_time,car_typeFROM `t_car`</select></mapper>

運(yùn)行測試:

查詢 t_car 數(shù)據(jù)表中的所有內(nèi)容。

在這里插入圖片描述


import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectAllByResultMap() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Car> cars = mapper.selectAllByResultMap();cars.forEach(car -> {System.out.println(car);});sqlSession.close();}
}

9.2 第三種方式:開啟駝峰命名自動映射

使用這種方式的前提是:屬性名遵循Java駝峰 命名規(guī)范,數(shù)據(jù)庫表列名遵循SQL的下劃線 命名規(guī)范。

  • Java命名規(guī)范:首字母小寫,后面每個單詞首字母大寫,遵循駝峰命名方式
  • SQL命名規(guī)范:全部小寫,單詞之間采用下劃線分割

比如以下的對應(yīng)關(guān)系:

比如以下的對應(yīng)關(guān)系:

POJO 實(shí)體類中的屬性名數(shù)據(jù)庫表的列名
carNumcar_num
carTypecar_type
produceTimeproduce_time

如何啟用該功能,在 mybatis-config.xml 文件中進(jìn)行配置:

注意:setting 標(biāo)簽方式的位置,可以根據(jù)錯誤提示進(jìn)行修正位置。

在這里插入圖片描述

<!--    mybatis 的全局設(shè)置--><settings>
<!--        是否開啟駝峰命名自動映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 映射到經(jīng)典 Java 屬性名 aColumn。 默認(rèn)是 false 不開啟,true 表示開啟--><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--    mybatis 的全局設(shè)置--><settings>
<!--        是否開啟駝峰命名自動映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 映射到經(jīng)典 Java 屬性名 aColumn。 默認(rèn)是 false 不開啟,true 表示開啟--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!--    起別名--><typeAliases><!--  使用 <package>	還可以將這個包下的所有的類的全部自動起別名,別名就是簡名,不區(qū)分大小寫 --><package name="com.rainbowsea.mybatis.pojo"/></typeAliases><environments default="mybatis"><environment id="mybatis"><!--            MANAGED 沒有用第三框架管理的話,都是會被提交的,沒有事務(wù)上的管理了 --><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="MySQL123"/></dataSource></environment></environments><mappers><!-- 這里也是可以使用 package 包名掃描,但是同樣的:對應(yīng)接口路徑要一致,接口名一致--><package name="com.rainbowsea.mybatis.mapper"></package></mappers>
</configuration>

開啟后運(yùn)行測試:

在這里插入圖片描述

import com.rainbowsea.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;import java.util.List;
import java.util.Map;public interface CarMapper {/*** mybatis 全局設(shè)置,駝峰命名映射* @return*/List<Car> selectAllByMapUnderscoreToCamelCase();}

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace 一定要是:對應(yīng)的接口的全限定類名-->
<mapper namespace="com.rainbowsea.mybatis.mapper.CarMapper">
<!--    啟用了 mybatis 全局設(shè)置,駝峰命名映射 --><select id="selectAllByMapUnderscoreToCamelCase" resultType="Car">SELECT id,car_num,brand,guide_price,produce_time,car_typeFROM `t_car`</select></mapper>

運(yùn)行測試:

查詢 t_car 數(shù)據(jù)表的所有記錄

在這里插入圖片描述


import com.rainbowsea.mybatis.mapper.CarMapper;
import com.rainbowsea.mybatis.pojo.Car;
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 java.io.IOException;
import java.util.List;
import java.util.Map;public class CarMapperTest {@Testpublic void testSelectAllByMapUnderscoreToCamelCase() throws IOException {SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");SqlSession sqlSession = sqlSessionFactory.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Car> cars = mapper.selectAllByMapUnderscoreToCamelCase();cars.forEach(car -> {System.out.println(car);});sqlSession.close();}
}

10. 總結(jié):

  1. 注意:對于查詢結(jié)果返回多條記錄時,resultType的值是(集合/數(shù)組存儲的元素的類型(除了Map集合是放Map集合本身))

  2. 注意:只有返回的是單個記錄的時候,才可以用單個Map集合存儲接受 ,如果是多個記錄的話,可以將Map集合放到List集合中。反過來,如果返回的不是一條記錄,是多條記錄的話,只采用單個Map集合接收,這樣同樣會出現(xiàn)之前的異常:TooManyResultsException

  3. 這里我們需要使用 @MapKey 注解,該注解的作用就是將:將查詢結(jié)果的 id 字段的值作為整個Map(最外面的那個Map)集合的key。

     這里你想將查詢結(jié)果中的那個字段的值,賦值給“最外面的Map”集合的 key ,就填寫對應(yīng)上的查詢上的字段名即可
    
  4. resultMap 結(jié)果映射: 注意:resultMap屬性的值必須和resultMap標(biāo)簽中id屬性值一致。property 后面填寫的值是:POJO類的屬性名;column 后面填寫數(shù)據(jù)庫表查詢顯示的的字段名(用了別名的話,是別名)

  5. 開啟駝峰命名自動映射。屬性名遵循Java駝峰 命名規(guī)范,數(shù)據(jù)庫表列名遵循SQL的下劃線 命名規(guī)范。,同時注意:注意:setting 標(biāo)簽方式的位置,可以根據(jù)錯誤提示進(jìn)行修正位置。

  6. 如果查詢的結(jié)果是一個數(shù)值,則可以用數(shù)值類型進(jìn)行接受。

11. 最后:

“在這個最后的篇章中,我要表達(dá)我對每一位讀者的感激之情。你們的關(guān)注和回復(fù)是我創(chuàng)作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續(xù)在其他的領(lǐng)域奮斗。感謝你們,我們總會在某個時刻再次相遇。”

在這里插入圖片描述

http://www.risenshineclean.com/news/42470.html

相關(guān)文章:

  • ui設(shè)計(jì)師培訓(xùn)騙局seo實(shí)戰(zhàn)培訓(xùn)
  • 大連做網(wǎng)站公司網(wǎng)站發(fā)布與推廣
  • 網(wǎng)站流量怎么做百度手機(jī)快速排名點(diǎn)擊軟件
  • 萊蕪信息港金點(diǎn)子招聘天津seo優(yōu)化公司
  • 廈門網(wǎng)站建設(shè)找維品競猜世界杯
  • 網(wǎng)站做全局搜索百度文庫賬號登錄入口
  • 網(wǎng)站模板 帝國 phpcms今日新聞播報
  • 制作營銷網(wǎng)站模板下載花都網(wǎng)站建設(shè)公司
  • 廣州工商注冊公司代辦專業(yè)全網(wǎng)優(yōu)化
  • 做網(wǎng)站視頻圖片加載不出來適合成人參加的培訓(xùn)班
  • seo如何做網(wǎng)站建設(shè)網(wǎng)站推廣去哪家比較好
  • 做網(wǎng)站 0元代理百度賬號登錄入口網(wǎng)頁版
  • 網(wǎng)站過期怎么找回來亞馬遜跨境電商開店流程及費(fèi)用
  • 門戶網(wǎng)站建設(shè)總結(jié)百度搜索次數(shù)統(tǒng)計(jì)
  • 網(wǎng)站下載到本地合肥seo按天收費(fèi)
  • 網(wǎng)站推廣渠道seo專業(yè)培訓(xùn)班
  • 重慶做網(wǎng)站的網(wǎng)絡(luò)公司域名注冊好了怎么弄網(wǎng)站
  • 哪個網(wǎng)站可以做水果銷售代理免費(fèi)seo快速排名工具
  • 有什么網(wǎng)站做熱圖代寫文章價格表
  • 做感恩網(wǎng)站的圖片廣州網(wǎng)頁seo排名
  • 一臺vps兩個wordpress網(wǎng)站營銷型網(wǎng)站建設(shè)套餐
  • 寧波網(wǎng)站建設(shè)設(shè)計(jì)公司信息上海百度公司總部
  • 建網(wǎng)站買空間seo高端培訓(xùn)
  • 做視頻網(wǎng)站的備案要求優(yōu)化服務(wù)是什么意思
  • 成都品牌網(wǎng)站建設(shè)域名注冊萬網(wǎng)
  • 坪山網(wǎng)站開發(fā)軟件外包公司有前途嗎
  • 中央最新指示停止核酸檢測東莞seo軟件
  • 很長的網(wǎng)站域名怎么做短注冊安全工程師
  • 電子商務(wù)是電商嗎seo服務(wù)商
  • 個人網(wǎng)站建設(shè)收費(fèi)標(biāo)準(zhǔn)營銷策略有哪幾種