亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis-Plus?條件查詢器的實(shí)現(xiàn)

 更新時(shí)間:2022年07月24日 10:10:21   作者:@WAT  
本文主要介紹了MyBatis-Plus?條件查詢器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本篇的主要代碼依賴于之前的通用Mapper和通用Service篇

一、常用注解

在我們平時(shí)的日常開(kāi)發(fā)中,會(huì)經(jīng)常遇到我們的數(shù)據(jù)小伙伴們?cè)跀?shù)據(jù)庫(kù)中所創(chuàng)建的 表名要與我們Java開(kāi)發(fā)人員所建的domian層的類名有一個(gè)對(duì)應(yīng)關(guān)系,這往往在不同的公司都有著不同的要求。

打個(gè)比方:數(shù)據(jù)庫(kù)表名 t_user-------- 后臺(tái)domian的實(shí)體類名User。這樣很明顯會(huì)操做報(bào)錯(cuò)。

所以我們的MyBtais-Plus為我們提供了一系列的注解,下面我們來(lái)正式學(xué)習(xí)他們

1.1 @TableName

在實(shí)體類上加上注解@TableName("t_user"),標(biāo)識(shí)這個(gè)類所對(duì)應(yīng)的表名是t_user,這樣才可以成功映射到對(duì)應(yīng)的字段。

@TableName("t_user")
public class User {
	private Long id;
	private String userName;
	private Integer age;
	private String email;
}

以上是通過(guò)注解的方式完成,我們也可以通過(guò)配置文件來(lái)設(shè)置

mybatis-plus:
 configuration:
  # 配置MyBatis日志
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 global-config:
  db-config:
   # 配置MyBatis-Plus操作表的默認(rèn)前綴
   table-prefix: t_

通過(guò)table_prefix設(shè)置前綴只適用于數(shù)據(jù)庫(kù)表有前綴的,如果表名與實(shí)體類名差別甚遠(yuǎn),則建議使用注解

1.2 @TableId

MyBatis-Plus在實(shí)現(xiàn)CRUD時(shí),會(huì)默認(rèn)將id作為主鍵列,并在插入數(shù)據(jù)時(shí),默認(rèn)是基于雪花算法的策略生成idASSIGN_ID

【產(chǎn)生的問(wèn)題】

  • 若實(shí)體類和表中表示主鍵的不是id,而是其他字段 如何匹配
  • 怎樣實(shí)現(xiàn)數(shù)據(jù)庫(kù)中的自增策略

【對(duì)策】

在實(shí)體類中uid屬性上通過(guò)@TableId將其標(biāo)識(shí)為主鍵,即可成功執(zhí)行SQL語(yǔ)句

@TableName("t_user")
public class User {
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
	private String userName;
	private Integer age;
	private String email;
}

這里有必要說(shuō)下,idType,這個(gè)IdType是MyBatis-plus里面所提供的一種主鍵生成策略的枚舉類

【源碼】

@Getter
public enum IdType {
    /**
     * 數(shù)據(jù)庫(kù)ID自增
     * <p>該類型請(qǐng)確保數(shù)據(jù)庫(kù)設(shè)置了 ID自增 否則無(wú)效</p>
     */
    AUTO(0),
    /**
     * 該類型為未設(shè)置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
     */
    NONE(1),
    /**
     * 用戶輸入ID
     * <p>該類型可以通過(guò)自己注冊(cè)自動(dòng)填充插件進(jìn)行填充</p>
     */
    INPUT(2),

    /* 以下3種類型、只有當(dāng)插入對(duì)象ID 為空,才自動(dòng)填充。 */
    /**
     * 分配ID (主鍵類型為number或string),
     * 默認(rèn)實(shí)現(xiàn)類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主鍵類型為 string)
     * 默認(rèn)實(shí)現(xiàn)類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4);

    private final int key;

    IdType(int key) {
        this.key = key;
    }
}

也就是說(shuō)MP提供了5種測(cè)類,下面簡(jiǎn)要的介紹其中的某些:

  • AUTO: 數(shù)據(jù)庫(kù)自增策略,注意,該類型請(qǐng)確保數(shù)據(jù)庫(kù)設(shè)置了id自增, 否則無(wú)效
  • NONE:MP set主鍵,雪花算法實(shí)現(xiàn)。就是如果傳了id用傳的,否則默認(rèn)的雪花算法
  • INPUT:需要時(shí)開(kāi)發(fā)者手動(dòng)賦值,沒(méi)寫一樣雪花算法自動(dòng)生成
  • ASSIGN_ID: 雪花算法,默認(rèn),與數(shù)據(jù)庫(kù)id是否設(shè)置了自增無(wú)關(guān)

1.3 @TableField

TableField與TableId的區(qū)別就是:

  • TableField適用于解決非主鍵字段不匹配的情況,而且TableField還可以指定那個(gè)字段查詢的時(shí)候不顯示
  • TableId主要解決主鍵不匹配的情況
@TableName("t_user")
public class User {

	// 處理主鍵相關(guān)的字段名不一致 以及設(shè)置主鍵自增策略
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;

	// 在mp種默認(rèn)的設(shè)置可以將數(shù)據(jù)庫(kù)中的字段名xxx_xxx轉(zhuǎn)化為相應(yīng)的駝峰命名
	@TableField(value = "user_name")
	private String userName;

	@TableField(value = "age")
	private Integer age;

	// exist=false 表示查詢時(shí)候不顯示
	@TableField(exist = false)
	private String email;
	
}

當(dāng)我們使用了@TableField(exist = false)則在查詢的時(shí)候就不會(huì)顯示查詢出來(lái)的值

1.4 @TableLogic

邏輯刪除
在我們的日常開(kāi)發(fā)中,會(huì)經(jīng)常遇到這種邏輯刪除的操做,因?yàn)檫@樣仍然會(huì)在數(shù)據(jù)庫(kù)中保存這條數(shù)據(jù),防止后期如果還想用的話還可以找到。我們要時(shí)刻銘記,數(shù)據(jù)的CUD操做,一定要謹(jǐn)慎,謹(jǐn)慎,再謹(jǐn)慎?。?!

如果我們的業(yè)務(wù)對(duì)數(shù)據(jù)的要求是可以恢復(fù)的,我們就要使用邏輯刪除操做,一般我們就在數(shù)據(jù)庫(kù)種加一個(gè)字段is_deleted

  • 物理刪除:真實(shí)刪除,將對(duì)應(yīng)數(shù)據(jù)從數(shù)據(jù)庫(kù)中刪除,之后查詢不到此條被刪除的數(shù)據(jù)
  • 邏輯刪除:假刪除,將對(duì)應(yīng)數(shù)據(jù)中代表是否被刪除字段的狀態(tài)修改為“被刪除狀態(tài)”,之后在數(shù)據(jù)庫(kù)中仍舊能看到此條數(shù)據(jù)記錄
  • 使用場(chǎng)景:可以進(jìn)行數(shù)據(jù)恢復(fù)
@TableName("t_user")
public class User {

	// 處理主鍵相關(guān)的字段名不一致 以及設(shè)置主鍵自增策略
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;

	// 在mp種默認(rèn)的設(shè)置可以將數(shù)據(jù)庫(kù)中的字段名xxx_xxx轉(zhuǎn)化為相應(yīng)的駝峰命名
	@TableField(value = "user_name")
	private String userName;

	@TableField(value = "age")
	private Integer age;

	@TableField(value = "email")
	private String email;
	
	// 邏輯刪除 0 標(biāo)識(shí)未刪除 1表示刪除了
	@TableLogic
	private Integer isDeleted;

}

注意:當(dāng)我們使用了邏輯刪除則刪除操作就變成了修改操作

測(cè)試刪除功能,真正執(zhí)行的是修改

UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0

測(cè)試查詢功能,被邏輯刪除的數(shù)據(jù)默認(rèn)不會(huì)被查詢

SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

二、條件構(gòu)造器Wrapper

Wrapper在MyBatis-plus里面主要分為兩種:一種適用于查詢的 QueryWrapper;一種是用于修改的UpdateWrapper

【繼承關(guān)系】

Wrapper : 條件構(gòu)造抽象類,最頂端父類

  • AbstractWrapper : 用于查詢條件封裝,生成 sql 的 where 條件
    • QueryWrapper : 查詢條件封裝
    • UpdateWrapper : Update 條件封裝
    • AbstractLambdaWrapper : 使用Lambda 語(yǔ)法
      • LambdaQueryWrapper :用于Lambda語(yǔ)法使用的查詢Wrapper
      • LambdaUpdateWrapper : Lambda 更新封裝Wrapper

這里主要就是介紹QueryWrapper和UpdateWrapper

2.1 QueryWrapper

上圖是BaseMapper里面的關(guān)于參數(shù)是Warpper的方法,下面我們一一介紹:

2.1.1 組裝查詢條件selectCount

/**
	 * 測(cè)試wraper封裝查詢條件1
	 * 
	 * @throws Exception
	 */
	@Test
	public void testQuery5() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		// sql: SELECT COUNT( * ) FROM t_user WHERE is_deleted=0 AND (age BETWEEN ? AND
		// ?)
		queryWrapper.between("age", 18, 23);
		Long list = userMapper.selectCount(queryWrapper);
		System.out.println(list);
	}

2.1.2 組裝查詢條件selectList

/**
	 * 測(cè)試wraper封裝查詢條件2
	 * 
	 * @throws Exception
	 */
	@Test
	public void testQuery9() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		// SELECT id,user_name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND
		// (email IS NOT NULL AND email LIKE ?)
		queryWrapper.isNotNull("email").like("email", "163.com");
		List<User> list = userMapper.selectList(queryWrapper);
		list.forEach(System.out::println);
	}

2.1.3 組裝查詢參數(shù)selectMaps

/**
	 * 測(cè)試wraper封裝查詢條件3
	 * 
	 * @throws Exception
	 */
	@Test
	public void testQuery10() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		// SELECT age,email,user_name FROM t_user WHERE is_deleted=0
		queryWrapper.select("age", "email", "user_name");
		List<Map<String, Object>> list = userMapper.selectMaps(queryWrapper);
		list.forEach(System.out::println);
	}

2.1.4 組裝查詢selectOne

/**
	 * 測(cè)試wraper封裝查詢條件4
	 * 
	 * @throws Exception
	 */
	@Test
	public void testQuery11() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		// SELECT age,email,user_name FROM t_user WHERE is_deleted=0 AND (user_name = ?)
		queryWrapper.select("age", "email", "user_name");
		queryWrapper.eq("user_name", "test");
		User list = userMapper.selectOne(queryWrapper);
		System.out.println(list);
	}

根據(jù)上述的方法,我們可以很輕松地觀察到,querywrapper里面封裝了許多的方法就是用于設(shè)置我們的查詢條件,而且比較通俗易懂,比如ge大于等于,between介于等等,這里只演示這些,剩下的自己在開(kāi)發(fā)中用到繼續(xù)摸索。

2.1.5 調(diào)整條件優(yōu)先級(jí)

注意:
這里說(shuō)明下如何調(diào)整參數(shù)的優(yōu)先級(jí),我們都知道在sql中可以通過(guò)()完成查詢條件的優(yōu)先級(jí)提升,那么在MP中如何操做???

【代碼演示】
通過(guò)and方法,利用lambda表達(dá)式實(shí)現(xiàn)

@Test
	public void testQuery7() throws Exception {
		User user = new User();
		// 將用戶名中包含有a并且(年齡大于20或郵箱為null)的用戶信息修改
		user.setEmail("modifyTest@gogel.com");
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		// UPDATE t_user SET age=?, email=? WHERE (user_name LIKE ? AND (age > ? OR email IS NULL))
		queryWrapper.like("user_name", "a")
					.and(
							i -> i.ge("age", 20)
								  .or()
								  .isNull("email"));
		List<User> list = userMapper.selectList(queryWrapper);

		list.forEach(System.out::println);
	}

2.1.6 實(shí)現(xiàn)子查詢inSql

@GetMapping("/queryZI")
	public List<User> queryZI() {
		// SELECT id,user_name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (id IN ( SELECT id FROM t_user WHERE id <=100))
		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
		queryWrapper.inSql("id", " SELECT id FROM t_user WHERE id <=100");
		List<User> maps = userMapper.selectList(queryWrapper);
		return maps;
	}

2.2 UpdateWrapper

2.2.1 組裝修改條件update

@Test
	public void testUpdate2() throws Exception {
		User user = new User();
		user.setEmail("modifyTest@gogel.com");
		UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
		updateWrapper.ge("age", 20).like("user_name", "a").or().isNull("email");
		/**
		 * 根據(jù) whereEntity 條件,更新記錄
		 *
		 * @param entity        實(shí)體對(duì)象 (set 條件值,可以為 null) 修改的參數(shù)
		 * @param updateWrapper 實(shí)體對(duì)象封裝操作類(可以為 null,里面的 entity 用于生成 where 語(yǔ)句)條件參數(shù)
		 */
		int row = userMapper.update(user, updateWrapper);

		log.info("刪除數(shù)據(jù)={}條", row);
	}

三、MyBatis-Plus分頁(yè)插件

MyBatis Plus自帶分頁(yè)插件,只要簡(jiǎn)單的配置即可實(shí)現(xiàn)分頁(yè)功能

3.1 實(shí)現(xiàn)步驟

1??添加配置類

/**
 * MybatisPlus的分頁(yè)插件配置類
 * @author wangruoxian
 *
 */
@Configuration
@MapperScan("com.wei.mapper")
public class MyBatisPlusPageConfig {
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		return interceptor;
	}
}

2?? 測(cè)試

@GetMapping("/page")
	public IPage<User> pageList(){
		Page<User> page = new Page<User>(1,3);
//		QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//		// 當(dāng)前頁(yè)碼
//		page.setCurrent(1);
//		// 每頁(yè)顯示的條數(shù)
//		page.setSize(5);
		IPage<User> selectPage = userMapper.selectPage(page, null);
		log.info("當(dāng)前頁(yè)數(shù)={}",selectPage.getCurrent());
		log.info("總頁(yè)數(shù)={}",selectPage.getPages());
		selectPage.getRecords().forEach(System.out::println);
		log.info("每頁(yè)大小={}",selectPage.getSize());
		log.info("總數(shù)據(jù)條數(shù)={}",selectPage.getTotal());
		return selectPage;
	}

四、通用枚舉

表中的有些字段值是固定的,例如性別(男或女),此時(shí)我們可以使用MyBatis-Plus的通用枚舉來(lái)實(shí)現(xiàn)

4.1 數(shù)據(jù)庫(kù)表添加字段sex

4.2 配置掃描通用枚舉

# 配置掃描通用枚舉
type-enums-package: com.wei.enums

4.3 新建枚舉類

@Getter
public enum SexEnum {
	MALE(0,"男"),
	FEMALE(1,"女");
	
	@EnumValue
	private Integer sexCode;
	
	private String sexValue;
	
	private SexEnum(Integer sexCode, String sexValue) {
		this.sexCode = sexCode;
		this.sexValue = sexValue;
	}
}

4.3.1 @EnumValue注解

通用的枚舉類注解,將數(shù)據(jù)庫(kù)字段映射成實(shí)體類的枚舉類型成員變量

將枚舉改成成員變量和數(shù)據(jù)庫(kù)的字段映射起來(lái),根據(jù)數(shù)據(jù)庫(kù)字段的值找到對(duì)應(yīng)枚舉的對(duì)象

4.4 測(cè)試

五、多數(shù)據(jù)源

適用于多種場(chǎng)景:純粹多庫(kù)、 讀寫分離、 一主多從、 混合模式等,目前我們就來(lái)模擬一個(gè)純粹多庫(kù)的一個(gè)場(chǎng)景,其他場(chǎng)景類似

場(chǎng)景說(shuō)明:
我們創(chuàng)建兩個(gè)庫(kù),分別為:mybatis_plus(以前的庫(kù)不動(dòng))與mybatis_plus_1(新建),將
mybatis_plus庫(kù)的product表移動(dòng)到mybatis_plus_1庫(kù),這樣每個(gè)庫(kù)一張表,通過(guò)一個(gè)測(cè)試用例
分別獲取用戶數(shù)據(jù)與商品數(shù)據(jù),如果獲取到說(shuō)明多庫(kù)模擬成功

5.1 創(chuàng)建數(shù)據(jù)庫(kù)及表

CREATE DATABASE `mybatis_plus_slave` 
use `mybatis_plus_slave`;

CREATE TABLE t_product
(
id BIGINT(20) NOT NULL COMMENT '主鍵ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名稱',
price INT(11) DEFAULT 0 COMMENT '價(jià)格',
version INT(11) DEFAULT 0 COMMENT '樂(lè)觀鎖版本號(hào)',
PRIMARY KEY (id)
);

INSERT INTO product (id, NAME, price) VALUES (1, '外星人筆記本', 100);

5.2 引入依賴

<!-- 引入依賴 多數(shù)據(jù)源 -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
			<version>3.3.1</version>
		</dependency>

5.3 配置多數(shù)據(jù)源

注意 注釋掉之前的配置 ,也可以新建一個(gè)項(xiàng)目進(jìn)行測(cè)試

spring:
 # 配置數(shù)據(jù)源信息
 datasource:
  dynamic:
   # 設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
   primary: master
   # 嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false.true未匹配到指定數(shù)據(jù)源時(shí)拋異常,false使用默認(rèn)數(shù)據(jù)源
   strict: false
   datasource:
    master:
     url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
     driver-class-name: com.mysql.cj.jdbc.Driver
     username: root
     password: 123456
    slave_1:
     url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
     driver-class-name: com.mysql.cj.jdbc.Driver
     username: root
     password: 123456

5.4 創(chuàng)建新庫(kù)中Product對(duì)應(yīng)的類

此處省略domain,mapper,service,serviceImpl的創(chuàng)建
【controller層】

@RestController
@RequestMapping("/product")
@Api(value = "測(cè)試 ProductController 的接口", tags = "產(chǎn)品管理相關(guān)的接口", description = "product產(chǎn)品測(cè)試接口")
public class ProductController {
	
	@Autowired
	private IProductService IProductService;

	@GetMapping("/list")
//	@ApiOperation("查詢所有商品的接口")
	public List<Product> queryAllProduct(){
		return IProductService.list();
	}
}

 到此這篇關(guān)于MyBatis-Plus 條件查詢器的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis-Plus 條件查詢器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?精煉解讀類和對(duì)象原理

    Java?精煉解讀類和對(duì)象原理

    面向?qū)ο竽耸荍ava語(yǔ)言的核心,是程序設(shè)計(jì)的思想。Java語(yǔ)言的面向?qū)ο蠹夹g(shù)包括了面向?qū)ο蠛兔嫦蜻^(guò)程的基本概念,面向?qū)ο蟮奶卣?,Java語(yǔ)言的類,對(duì)象,修飾符,抽象類等一系列的知識(shí)點(diǎn)
    2022-03-03
  • 深入探究Bean生命周期的擴(kuò)展點(diǎn)Bean Post Processor

    深入探究Bean生命周期的擴(kuò)展點(diǎn)Bean Post Processor

    在Spring框架中,Bean生命周期的管理是非常重要的一部分,在Bean的創(chuàng)建、初始化和銷毀過(guò)程中,Spring提供了一系列的擴(kuò)展點(diǎn),其中,Bean Post Processor(后處理器)是一個(gè)重要的擴(kuò)展點(diǎn),它能夠在Bean的初始化前后做一些額外的處理,本文就和大家一起深入探究
    2023-07-07
  • 代碼詳解java里的“==”和“equels”區(qū)別

    代碼詳解java里的“==”和“equels”區(qū)別

    本篇文章通過(guò)實(shí)例代碼給大家詳細(xì)解釋了java里的“==”和“equels”區(qū)別,對(duì)此有興趣的朋友跟著小編一起學(xué)習(xí)下。
    2018-02-02
  • Java IO流和文件操作實(shí)現(xiàn)過(guò)程解析

    Java IO流和文件操作實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Java IO流和文件操作實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù)的方法

    SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù)的方法

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    本文主要介紹了MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java Scanner 類的使用小結(jié)

    Java Scanner 類的使用小結(jié)

    在筆試編程過(guò)程中,關(guān)于數(shù)據(jù)的讀取如果迷迷糊糊,那后來(lái)的編程即使想法很對(duì),實(shí)現(xiàn)很好,也是徒勞,于是在這里認(rèn)真總結(jié)了Java Scanner 類的使用,需要的朋友可以參考下
    2018-10-10
  • Java SPI的簡(jiǎn)單小實(shí)例

    Java SPI的簡(jiǎn)單小實(shí)例

    這篇文章主要介紹了Java SPI的簡(jiǎn)單小實(shí)例,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • java實(shí)現(xiàn)的正則工具類

    java實(shí)現(xiàn)的正則工具類

    這篇文章主要介紹了java實(shí)現(xiàn)的正則工具類,可用于針對(duì)電話號(hào)碼、郵箱、QQ號(hào)碼、QQ密碼、手機(jī)號(hào)的正則驗(yàn)證功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Spring超詳細(xì)講解創(chuàng)建BeanDefinition流程

    Spring超詳細(xì)講解創(chuàng)建BeanDefinition流程

    Spring在初始化過(guò)程中,將xml中定義的對(duì)象解析到了BeanDefinition對(duì)象中,我們有必要了解一下BeanDefinition的內(nèi)部結(jié)構(gòu),有助于我們理解Spring的初始化流程
    2022-06-06

最新評(píng)論