最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合MyBatis-Plus3.1教程詳解

 更新時間:2019年08月27日 10:34:46   作者:Java知音*  
這篇文章主要介紹了SpringBoot整合MyBatis-Plus3.1詳細教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

一.說明

Mybatis-Plus是一個Mybatis框架的增強插件,根據(jù)官方描述,MP只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑.并且只需簡單配置,即可快速進行 CRUD 操作,從而節(jié)省大量時間.代碼生成,分頁,性能分析等功能一應(yīng)俱全,最新已經(jīng)更新到了3.1.1版本了,3.X系列支持lambda語法,讓我在寫條件構(gòu)造的時候少了很多的"魔法值",從代碼結(jié)構(gòu)上更簡潔了.

二.項目環(huán)境

  • MyBatis-Plus版本: 3.1.0
  • SpringBoot版本:2.1.5
  • JDK版本:1.8

Maven依賴如下:

<dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
  <!-- mybatisPlus 核心庫 -->
  <dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.1.0</version>
  </dependency>
  <!-- 引入阿里數(shù)據(jù)庫連接池 -->
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.6</version>
  </dependency>
</dependencies>

配置如下:

# 配置端口
server:
 port: 8081
spring:
 # 配置數(shù)據(jù)源
 datasource:
 driver-class-name: com.mysql.cj.jdbc.Driver
 url: jdbc:mysql://localhost:3306/mp_student?useUnicode=true&characterEncoding=utf-8
 username: root
 password: root
 type: com.alibaba.druid.pool.DruidDataSource
# mybatis-plus相關(guān)配置
mybatis-plus:
 # xml掃描,多個目錄用逗號或者分號分隔(告訴 Mapper 所對應(yīng)的 XML 文件位置)
 mapper-locations: classpath:mapper/*.xml
 # 以下配置均有默認值,可以不設(shè)置
 global-config:
 db-config:
  #主鍵類型 AUTO:"數(shù)據(jù)庫ID自增" INPUT:"用戶輸入ID",ID_WORKER:"全局唯一ID (數(shù)字類型唯一ID)", UUID:"全局唯一ID UUID";
  id-type: auto
  #字段策略 IGNORED:"忽略判斷" NOT_NULL:"非 NULL 判斷") NOT_EMPTY:"非空判斷"
  field-strategy: NOT_EMPTY
  #數(shù)據(jù)庫類型
  db-type: MYSQL
 configuration:
 # 是否開啟自動駝峰命名規(guī)則映射:從數(shù)據(jù)庫列名到Java屬性駝峰命名的類似映射
 map-underscore-to-camel-case: true
 # 如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
 call-setters-on-nulls: true
 # 這個配置會將執(zhí)行的sql打印出來,在開發(fā)或測試的時候可以用
 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
表結(jié)構(gòu):

CREATE TABLE `user_info` (
 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `name` varchar(32) DEFAULT NULL COMMENT '姓名',
 `age` int(11) DEFAULT NULL COMMENT '年齡',
 `skill` varchar(32) DEFAULT NULL COMMENT '技能',
 `evaluate` varchar(64) DEFAULT NULL COMMENT '評價',
 `fraction` bigint(11) DEFAULT NULL COMMENT '分數(shù)',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COMMENT='學(xué)生信息表';
表數(shù)據(jù):

INSERT INTO `user_info` VALUES (1, '小明', 20, '畫畫', '該學(xué)生在畫畫方面有一定天賦', 89);
INSERT INTO `user_info` VALUES (2, '小蘭', 19, '游戲', '近期該學(xué)生由于游戲的原因?qū)е路謹?shù)降低了', 64);
INSERT INTO `user_info` VALUES (3, '張張', 18, '英語', '近期該學(xué)生參加英語比賽獲得二等獎', 90);
INSERT INTO `user_info` VALUES (4, '大黃', 20, '體育', '該學(xué)生近期由于參加籃球比賽,導(dǎo)致腳傷', 76);
INSERT INTO `user_info` VALUES (5, '大白', 17, '繪畫', '該學(xué)生參加美術(shù)大賽獲得三等獎', 77);
INSERT INTO `user_info` VALUES (7, '小龍', 18, 'JAVA', '該學(xué)生是一個在改BUG的碼農(nóng)', 59);
INSERT INTO `user_info` VALUES (9, 'Sans', 18, '睡覺', 'Sans是一個愛睡覺,并且身材較矮骨骼巨大的骷髏小胖子', 60);
INSERT INTO `user_info` VALUES (10, 'papyrus', 18, 'JAVA', 'Papyrus是一個講話大聲、個性張揚的骷髏,給人自信、有魅力的骷髏小瘦子', 58);
INSERT INTO `user_info` VALUES (11, '刪除數(shù)據(jù)1', 3, '畫肖像', NULL, 61);
INSERT INTO `user_info` VALUES (12, '刪除數(shù)據(jù)2', 3, NULL, NULL, 61);
INSERT INTO `user_info` VALUES (13, '刪除數(shù)據(jù)3', 3, NULL, NULL, 61);
INSERT INTO `user_info` VALUES (14, '刪除數(shù)據(jù)4', 5, '刪除', NULL, 10);
INSERT INTO `user_info` VALUES (15, '刪除數(shù)據(jù)5', 6, '刪除', NULL, 10);

三.編寫基礎(chǔ)類

在啟動類上添加掃描DAO的注解

@SpringBootApplication
@MapperScan(basePackages = {"com.mp.demo.dao"}) //掃描DAO
public class DemoApplication {
 public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
 }
}

編寫Config配置類

/**
 * @Description MybatisPlus配置類
 * @Author Sans
 * @CreateTime 2019/5/26 17:20
 */
@Configuration
public class MybatisPlusConfig {
 /**
  * mybatis-plus SQL執(zhí)行效率插件【生產(chǎn)環(huán)境可以關(guān)閉】
  */
 @Bean
 public PerformanceInterceptor performanceInterceptor() {
  return new PerformanceInterceptor();
 }
 /**
  * 分頁插件
  */
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  return new PaginationInterceptor();
 }
}

編寫Entity類

/**
 * @Description 學(xué)生信息實體類
 * @Author Sans
 * @CreateTime 2019/5/26 21:41
 */
@Data
@TableName("user_info")//@TableName中的值對應(yīng)著表名
public class UserInfoEntity {

 /**
  * 主鍵
  * @TableId中可以決定主鍵的類型,不寫會采取默認值,默認值可以在yml中配置
  * AUTO: 數(shù)據(jù)庫ID自增
  * INPUT: 用戶輸入ID
  * ID_WORKER: 全局唯一ID,Long類型的主鍵
  * ID_WORKER_STR: 字符串全局唯一ID
  * UUID: 全局唯一ID,UUID類型的主鍵
  * NONE: 該類型為未設(shè)置主鍵類型
  */
 @TableId(type = IdType.AUTO)
 private Long id;
 /**
  * 姓名
  */
 private String name;
 /**
  * 年齡
  */
 private Integer age;
 /**
  * 技能
  */
 private String skill;
 /**
  * 評價
  */
 private String evaluate;
 /**
  * 分數(shù)
  */
 private Long fraction;
}

編寫Dao類

/**
 * @Description 用戶信息DAO
 * @Author Sans
 * @CreateTime 2019/6/8 16:24
 */
public interface UserInfoDao extends BaseMapper<UserInfoEntity> {
}

編寫Service類

/**
 * @Description 用戶業(yè)務(wù)接口
 * @Author Sans
 * @CreateTime 2019/6/8 16:26
 */
public interface UserInfoService extends IService<UserInfoEntity> {
}

編寫ServiceImpl類

/**
 * @Description 用戶業(yè)務(wù)實現(xiàn)
 * @Author Sans
 * @CreateTime 2019/6/8 16:26
 */
@Service
@Transactional
public class UserInfoSerivceImpl extends ServiceImpl<UserInfoDao, UserInfoEntity> implements UserInfoService {
}

四.MyBatis-Plus基礎(chǔ)演示

這里我們看到,service中我們沒有寫任何方法,MyBatis-Plus官方封裝了許多基本CRUD的方法,可以直接使用大量節(jié)約時間,MP共通方法詳見IService,ServiceImpl,BaseMapper源碼,寫入操作在ServiceImpl中已有事務(wù)綁定,這里我們舉一些常用的方法演示.

/**
 * @Description UserInfoController
 * @Author Sans
 * @CreateTime 2019/6/8 16:27
 */
@RestController
@RequestMapping("/userInfo")
public class UserInfoController {

 @Autowired
 private UserInfoService userInfoService;

 /**
  * 根據(jù)ID獲取用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:34
  * @Param userId 用戶ID
  * @Return UserInfoEntity 用戶實體
  */
 @RequestMapping("/getInfo")
 public UserInfoEntity getInfo(String userId){
  UserInfoEntity userInfoEntity = userInfoService.getById(userId);
  return userInfoEntity;
 }
 /**
  * 查詢?nèi)啃畔?
  * @Author Sans
  * @CreateTime 2019/6/8 16:35
  * @Param userId 用戶ID
  * @Return List<UserInfoEntity> 用戶實體集合
  */
 @RequestMapping("/getList")
 public List<UserInfoEntity> getList(){
  List<UserInfoEntity> userInfoEntityList = userInfoService.list();
  return userInfoEntityList;
 }
 /**
  * 分頁查詢?nèi)繑?shù)據(jù)
  * @Author Sans
  * @CreateTime 2019/6/8 16:37
  * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù)
  */
 @RequestMapping("/getInfoListPage")
 public IPage<UserInfoEntity> getInfoListPage(){
  //需要在Config配置類中配置分頁插件
  IPage<UserInfoEntity> page = new Page<>();
  page.setCurrent(5); //當前頁
  page.setSize(1); //每頁條數(shù)
  page = userInfoService.page(page);
  return page;
 }
 /**
  * 根據(jù)指定字段查詢用戶信息集合
  * @Author Sans
  * @CreateTime 2019/6/8 16:39
  * @Return Collection<UserInfoEntity> 用戶實體集合
  */
 @RequestMapping("/getListMap")
 public Collection<UserInfoEntity> getListMap(){
  Map<String,Object> map = new HashMap<>();
  //kay是字段名 value是字段值
  map.put("age",20);
  Collection<UserInfoEntity> userInfoEntityList = userInfoService.listByMap(map);
  return userInfoEntityList;
 }
 /**
  * 新增用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:40
  */
 @RequestMapping("/saveInfo")
 public void saveInfo(){
  UserInfoEntity userInfoEntity = new UserInfoEntity();
  userInfoEntity.setName("小龍");
  userInfoEntity.setSkill("JAVA");
  userInfoEntity.setAge(18);
  userInfoEntity.setFraction(59L);
  userInfoEntity.setEvaluate("該學(xué)生是一個在改BUG的碼農(nóng)");
  userInfoService.save(userInfoEntity);
 }
 /**
  * 批量新增用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:42
  */
 @RequestMapping("/saveInfoList")
 public void saveInfoList(){
  //創(chuàng)建對象
  UserInfoEntity sans = new UserInfoEntity();
  sans.setName("Sans");
  sans.setSkill("睡覺");
  sans.setAge(18);
  sans.setFraction(60L);
  sans.setEvaluate("Sans是一個愛睡覺,并且身材較矮骨骼巨大的骷髏小胖子");
  UserInfoEntity papyrus = new UserInfoEntity();
  papyrus.setName("papyrus");
  papyrus.setSkill("JAVA");
  papyrus.setAge(18);
  papyrus.setFraction(58L);
  papyrus.setEvaluate("Papyrus是一個講話大聲、個性張揚的骷髏,給人自信、有魅力的骷髏小瘦子");
  //批量保存
  List<UserInfoEntity> list =new ArrayList<>();
  list.add(sans);
  list.add(papyrus);
  userInfoService.saveBatch(list);
 }
 /**
  * 更新用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:47
  */
 @RequestMapping("/updateInfo")
 public void updateInfo(){
  //根據(jù)實體中的ID去更新,其他字段如果值為null則不會更新該字段,參考yml配置文件
  UserInfoEntity userInfoEntity = new UserInfoEntity();
  userInfoEntity.setId(1L);
  userInfoEntity.setAge(19);
  userInfoService.updateById(userInfoEntity);
 }
 /**
  * 新增或者更新用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:50
  */
 @RequestMapping("/saveOrUpdateInfo")
 public void saveOrUpdate(){
  //傳入的實體類userInfoEntity中ID為null就會新增(ID自增)
  //實體類ID值存在,如果數(shù)據(jù)庫存在ID就會更新,如果不存在就會新增
  UserInfoEntity userInfoEntity = new UserInfoEntity();
  userInfoEntity.setId(1L);
  userInfoEntity.setAge(20);
  userInfoService.saveOrUpdate(userInfoEntity);
 }
 /**
  * 根據(jù)ID刪除用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:52
  */
 @RequestMapping("/deleteInfo")
 public void deleteInfo(String userId){
  userInfoService.removeById(userId);
 }
 /**
  * 根據(jù)ID批量刪除用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:55
  */
 @RequestMapping("/deleteInfoList")
 public void deleteInfoList(){
  List<String> userIdlist = new ArrayList<>();
  userIdlist.add("12");
  userIdlist.add("13");
  userInfoService.removeByIds(userIdlist);
 }
 /**
  * 根據(jù)指定字段刪除用戶信息
  * @Author Sans
  * @CreateTime 2019/6/8 16:57
  */
 @RequestMapping("/deleteInfoMap")
 public void deleteInfoMap(){
  //kay是字段名 value是字段值
  Map<String,Object> map = new HashMap<>();
  map.put("skill","刪除");
  map.put("fraction",10L);
  userInfoService.removeByMap(map);
 }
}

五.MyBatis-Plus的QueryWrapper條件構(gòu)造器

當查詢條件復(fù)雜的時候,我們可以使用MP的條件構(gòu)造器,請參考下面的QueryWrapper條件參數(shù)說明

下面我們來舉一些常見的示例

/**
 * @Description UserInfoPlusController
 * @Author Sans
 * @CreateTime 2019/6/9 14:52
 */
@RestController
@RequestMapping("/userInfoPlus")
public class UserInfoPlusController {

 @Autowired
 private UserInfoService userInfoService;

 /**
  * MP擴展演示
  * @Author Sans
  * @CreateTime 2019/6/8 16:37
  * @Return Map<String,Object> 返回數(shù)據(jù)
  */
 @RequestMapping("/getInfoListPlus")
 public Map<String,Object> getInfoListPage(){
  //初始化返回類
  Map<String,Object> result = new HashMap<>();
  //查詢年齡等于18歲的學(xué)生
  //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age = 18
  QueryWrapper<UserInfoEntity> queryWrapper1 = new QueryWrapper<>();
  queryWrapper1.lambda().eq(UserInfoEntity::getAge,18);
  List<UserInfoEntity> userInfoEntityList1 = userInfoService.list(queryWrapper1);
  result.put("studentAge18",userInfoEntityList1);
  //查詢年齡大于5歲的學(xué)生且小于等于18歲的學(xué)生
  //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age > 5 AND age <= 18
  QueryWrapper<UserInfoEntity> queryWrapper2 = new QueryWrapper<>();
  queryWrapper2.lambda().gt(UserInfoEntity::getAge,5);
  queryWrapper2.lambda().le(UserInfoEntity::getAge,18);
  List<UserInfoEntity> userInfoEntityList2 = userInfoService.list(queryWrapper2);
  result.put("studentAge5",userInfoEntityList2);
  //模糊查詢技能字段帶有"畫"的數(shù)據(jù),并按照年齡降序
  //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE skill LIKE '%畫%' ORDER BY age DESC
  QueryWrapper<UserInfoEntity> queryWrapper3 = new QueryWrapper<>();
  queryWrapper3.lambda().like(UserInfoEntity::getSkill,"畫");
  queryWrapper3.lambda().orderByDesc(UserInfoEntity::getAge);
  List<UserInfoEntity> userInfoEntityList3 = userInfoService.list(queryWrapper3);
  result.put("studentAgeSkill",userInfoEntityList3);
  //模糊查詢名字帶有"小"或者年齡大于18的學(xué)生
  //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE name LIKE '%小%' OR age > 18
  QueryWrapper<UserInfoEntity> queryWrapper4 = new QueryWrapper<>();
  queryWrapper4.lambda().like(UserInfoEntity::getName,"小");
  queryWrapper4.lambda().or().gt(UserInfoEntity::getAge,18);
  List<UserInfoEntity> userInfoEntityList4 = userInfoService.list(queryWrapper4);
  result.put("studentOr",userInfoEntityList4);
  //查詢評價不為null的學(xué)生,并且分頁
  //等價SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE evaluate IS NOT NULL LIMIT 0,5
  IPage<UserInfoEntity> page = new Page<>();
  page.setCurrent(1);
  page.setSize(5);
  QueryWrapper<UserInfoEntity> queryWrapper5 = new QueryWrapper<>();
  queryWrapper5.lambda().isNotNull(UserInfoEntity::getEvaluate);
  page = userInfoService.page(page,queryWrapper5);
  result.put("studentPage",page);
  return result;
 }
}

六.自定義SQL

引入Mybatis-Plus不會對項目現(xiàn)有的 Mybatis 構(gòu)架產(chǎn)生任何影響,而且Mybatis-Plus支持所有 Mybatis 原生的特性,這也是我喜歡使用它的原因之一,由于某些業(yè)務(wù)復(fù)雜,我們可能要自己去寫一些比較復(fù)雜的SQL語句,我們舉一個簡單的例子來演示自定義SQL.

示例:查詢大于設(shè)置分數(shù)的學(xué)生(分數(shù)為動態(tài)輸入,且有分頁)

編寫Mapper.xml文件

<mapper namespace="com.mp.demo.dao.UserInfoDao">
 <!-- Sans 2019/6/9 14:35 -->
 <select id="selectUserInfoByGtFraction" resultType="com.mp.demo.entity.UserInfoEntity" parameterType="long">
 SELECT * FROM user_info WHERE fraction > #{fraction}
 </select>
</mapper>

在DAO中加入方法

 /**
  * 查詢大于該分數(shù)的學(xué)生
  * @Author Sans
  * @CreateTime 2019/6/9 14:28
  * @Param page 分頁參數(shù)
  * @Param fraction 分數(shù)
  * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù)
  */
 IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page, Long fraction);

在service加入方法

 /**
  * 查詢大于該分數(shù)的學(xué)生
  * @Author Sans
  * @CreateTime 2019/6/9 14:27
  * @Param page 分頁參數(shù)
  * @Param fraction 分數(shù)
  * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù)
  */
 IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);

在serviceImpl加入方法

 /**
  * 查詢大于該分數(shù)的學(xué)生
  * @Author Sans
  * @CreateTime 2019/6/9 14:27
  * @Param page 分頁參數(shù)
  * @Param fraction 分數(shù)
  * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù)
  */
 @Override
 public IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page, Long fraction) {
  return this.baseMapper.selectUserInfoByGtFraction(page,fraction);
 }

在Controller中測試

 /**
  * MP自定義SQL
  * @Author Sans
  * @CreateTime 2019/6/9 14:37
  * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù)
  */
 @RequestMapping("/getInfoListSQL")
 public IPage<UserInfoEntity> getInfoListSQL(){
  //查詢大于60分以上的學(xué)生,并且分頁
  IPage<UserInfoEntity> page = new Page<>();
  page.setCurrent(1);
  page.setSize(5);
  page = userInfoService.selectUserInfoByGtFraction(page,60L);
  return page;
 }

七.項目源碼

項目源碼:

https://gitee.com/liselotte/spring-boot-mp-demo

個人確實很喜歡用MyBatis-Plus,不僅節(jié)約時間,代碼也簡潔干凈,它給了我那時候從SSM到SpringBoot過度的那種感覺

嗯,這玩意真香~

相關(guān)文章

  • MyBatis-Plus的apply用法小結(jié)

    MyBatis-Plus的apply用法小結(jié)

    apply方法是一個非常有用的功能,apply方法允許用戶直接在QueryWrapper或LambdaQueryWrapper中添加原生SQL片段,本文就詳細的介紹一下apply方法,感興趣的可以了解一下
    2024-10-10
  • Java中String對象的深入理解

    Java中String對象的深入理解

    String對象作為Java語言中重要的數(shù)據(jù)類型之一,是我們平時編碼最常用的對象之一,因此也是內(nèi)存中占據(jù)空間最大的一個對象,然而很多人對它是一知半解,今天我們就來好好聊一聊這個既熟悉又陌生的String,需要的朋友可以參考下
    2023-05-05
  • Opencv實現(xiàn)身份證OCR識別的示例詳解

    Opencv實現(xiàn)身份證OCR識別的示例詳解

    這篇文章主要為大家詳細介紹了如何使用Opencv實現(xiàn)身份證OCR識別功能,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-03-03
  • 帶你深入概括Java!六、方法和方法重載!(推薦)

    帶你深入概括Java!六、方法和方法重載!(推薦)

    這篇文章主要介紹了Java方法和方法重載,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java使用itextpdf實現(xiàn)PDF轉(zhuǎn)文本以及轉(zhuǎn)圖片

    Java使用itextpdf實現(xiàn)PDF轉(zhuǎn)文本以及轉(zhuǎn)圖片

    PDF轉(zhuǎn)文本的插件常用的有pdfbox ,itextpdf 和 spire.pdf,本文主要介紹如何使用itextpdf實現(xiàn)PDF轉(zhuǎn)文本以及轉(zhuǎn)圖片,需要的可以參考一下
    2025-01-01
  • java實現(xiàn)客戶信息管理系統(tǒng)

    java實現(xiàn)客戶信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)客戶信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 詳解Java如何通過Socket實現(xiàn)查詢IP

    詳解Java如何通過Socket實現(xiàn)查詢IP

    在本文中,我們來學(xué)習(xí)下如何找到連接到服務(wù)器的客戶端計算機的IP地址。我們將創(chuàng)建一個簡單的客戶端-服務(wù)器場景,讓我們探索用于TCP/IP通信的java.net?API,感興趣的可以了解一下
    2022-10-10
  • 詳解rabbitmq創(chuàng)建queue時arguments參數(shù)注釋

    詳解rabbitmq創(chuàng)建queue時arguments參數(shù)注釋

    這篇文章主要介紹了rabbitmq創(chuàng)建queue時arguments參數(shù)注釋,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot接口加密與解密的實現(xiàn)

    SpringBoot接口加密與解密的實現(xiàn)

    這篇文章主要介紹了SpringBoot接口加密與解密的實現(xiàn)
    2023-10-10
  • 如何獲取所有spring管理的bean

    如何獲取所有spring管理的bean

    這篇文章主要介紹了如何獲取所有spring管理的bean,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

永吉县| 永清县| 水富县| 曲松县| 高陵县| 阳原县| 东台市| 汾西县| 门头沟区| 南通市| 建阳市| 普洱| 绥滨县| 鹤峰县| 霍城县| 杭锦旗| 榆中县| 曲松县| 玉环县| 长白| 通城县| 阳江市| 五寨县| 旺苍县| 淄博市| 南华县| 连云港市| 久治县| 刚察县| 嘉鱼县| 镇宁| 威信县| 滦平县| 烟台市| 都匀市| 武安市| 来凤县| 资阳市| 岫岩| 保山市| 浦江县|