范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringBoot整合ORM开发框架MyBatis和JPA

  1、在使用Spring整合ORM组件的过程中,为了达到简化的目的,往往会进行大量的配置。利用SpringBoot可以进一步实现配置的简化。SpringBoot整合MyBatis开发框架,MyBatis是一款常用并且配置极为简单的ORM开发框架。其与Spring结合后,可以利用Spring的特征实现DAO接口的自动配置。在SpringBoot中,又对MyBatis框架的整合进行了进一步简化。
  修改pom.xml配置文件,在项目中引入mybatis-spring-boot- starter依赖支持库,切记也需要数据库链接池的支持的哦。   1 <?xml version="1.0" encoding="UTF-8"?>  2   6   7     4.0.0  8       9          10         org.springframework.boot 11         spring-boot-starter-parent 12         2.3.4.RELEASE 13           14      15  16     com.bie 17     springboot-01 18     0.0.1-SNAPSHOT 19     springboot-01 20     Demo project for Spring Boot 21  22      23         1.8 24         3.1.1 25      26  27      28          29             org.springframework.boot 30             spring-boot-starter-web 31          32  33          34             org.springframework.boot 35             spring-boot-starter-test 36             test 37              38                  39                     org.junit.vintage 40                     junit-vintage-engine 41                  42              43          44          45          46             mysql 47             mysql-connector-java 48              49          50          51             org.springframework.boot 52             spring-boot-configuration-processor 53             true 54          55  56          57          58             com.alibaba 59             druid 60             1.1.9 61          62          63          64             org.mybatis.spring.boot 65             mybatis-spring-boot-starter 66             1.3.1 67          68          69          70             org.mybatis 71             mybatis 72             3.4.6 73          74          75          76             org.mybatis.spring.boot 77             mybatis-spring-boot-starter 78             2.1.1 79          80          81             org.springframework.boot 82             spring-boot-starter-jdbc 83          84      85  86      87          88              89                 org.springframework.boot 90                 spring-boot-maven-plugin 91              92          93      94  95 
  数据表结构,如下所示:
  注意:如果数据表字段两个英文单词之间是下划线连接的,但是你的实体类是驼峰命名法,此时就需要进行配置,数据库字段是你下划线分隔,但是bean中的字段是驼峰命名的,如user_name和userName,导致无法匹配。如果是通过xml文件来配置的话,只需要开启驼峰命名转换,setting name="mapUnderscoreToCamelCase" value="true"/>,在/src/main/resources/mybatis/mybatis.cfg.xml里面配置即可。   1 /*  2  Navicat Premium Data Transfer  3   4  Source Server         : localhost  5  Source Server Type    : MySQL  6  Source Server Version : 50724  7  Source Host           : localhost:3306  8  Source Schema         : biehl  9  10  Target Server Type    : MySQL 11  Target Server Version : 50724 12  File Encoding         : 65001 13  14  Date: 15/11/2020 13:34:52 15 */ 16  17 SET NAMES utf8mb4; 18 SET FOREIGN_KEY_CHECKS = 0; 19  20 -- ---------------------------- 21 -- Table structure for user_info 22 -- ---------------------------- 23 DROP TABLE IF EXISTS `user_info`; 24 CREATE TABLE `user_info`  ( 25   `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT "用户编号", 26   `user_account` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户账号", 27   `user_pw` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户密码", 28   `user_number` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户手机号", 29   `user_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户姓名", 30   `user_age` int(11) DEFAULT NULL COMMENT "用户年龄", 31   `user_sex` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户性别", 32   `user_mark` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "用户标志", 33   `create_time` datetime(0) DEFAULT CURRENT_TIMESTAMP COMMENT "用户创建时间", 34   `is_sync` int(3) DEFAULT 0 COMMENT "用户标识", 35   `is_money` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT "是否缴纳押金", 36   PRIMARY KEY (`user_id`) USING BTREE, 37   INDEX `user_id`(`user_id`) USING BTREE 38 ) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "用户信息表" ROW_FORMAT = Dynamic; 39  40 SET FOREIGN_KEY_CHECKS = 1;
  创建一个po实体类,方便数据传输,如下所示:   1 package com.bie.po;  2   3 public class UserInfo {  4   5     private Integer userId;// 用户编号  6     private String userAccount;// 用户账号  7     private String userPw;// 用户密码  8     private String userNumber;// 用户学号  9     private String userName;// 用户姓名 10     private Integer userAge;// 用户年龄 11     private String userSex;// 用户性别 12     private String userMark;// 用户标识,可以使用一张表,完成管理员和用户 13  14     private String isMoney; 15  16     public Integer getUserId() { 17         return userId; 18     } 19  20     public void setUserId(Integer userId) { 21         this.userId = userId; 22     } 23  24     public String getUserAccount() { 25         return userAccount; 26     } 27  28     public void setUserAccount(String userAccount) { 29         this.userAccount = userAccount; 30     } 31  32     public String getUserPw() { 33         return userPw; 34     } 35  36     public void setUserPw(String userPw) { 37         this.userPw = userPw; 38     } 39  40     public String getUserNumber() { 41         return userNumber; 42     } 43  44     public void setUserNumber(String userNumber) { 45         this.userNumber = userNumber; 46     } 47  48     public String getUserName() { 49         return userName; 50     } 51  52     public void setUserName(String userName) { 53         this.userName = userName; 54     } 55  56     public Integer getUserAge() { 57         return userAge; 58     } 59  60     public void setUserAge(Integer userAge) { 61         this.userAge = userAge; 62     } 63  64     public String getUserSex() { 65         return userSex; 66     } 67  68     public void setUserSex(String userSex) { 69         this.userSex = userSex; 70     } 71  72     public String getUserMark() { 73         return userMark; 74     } 75  76     public void setUserMark(String userMark) { 77         this.userMark = userMark; 78     } 79  80     public String getIsMoney() { 81         return isMoney; 82     } 83  84     public void setIsMoney(String isMoney) { 85         this.isMoney = isMoney; 86     } 87  88     @Override 89     public String toString() { 90         return "UserInfo [userId=" + userId + ", userAccount=" + userAccount + ", userPw=" + userPw + ", userNumber=" 91                 + userNumber + ", userName=" + userName + ", userAge=" + userAge + ", userSex=" + userSex 92                 + ", userMark=" + userMark + ", isMoney=" + isMoney + "]"; 93     } 94  95 }
  在src/main/resources目录中创建mybatis/mybatis.cfg.xml配置文件。如果要开启驼峰命名转换,在这里开启即可,如下所示:
  如果在application.properties中开启转换的话,使用mybatis.configuration.map-underscore-to-camel-case=true配置即可。   1 <?xml version="1.0" encoding="UTF-8" ?>   2   4   5   6   7       8           9          10      11  12 
  或者搞个配置类,如果数据库表字段Column无法自动映射到相对应的实体类属性上,我们可以在config包下新建一个自动配置类MybatisConfig,开始驼峰命名规则。
  MyBatis配置文件开启驼峰命名映射   1 package com.bie.config;  2    3 import org.apache.ibatis.session.Configuration;  4 import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;  5 import org.springframework.context.annotation.Bean;  6    7   8 @Configuration  9 public class MybatisConfig { 10   11     //注册到容器中 12     @Bean 13     public ConfigurationCustomizer configurationCustomizer(){ 14         return new ConfigurationCustomizer(){ 15             @Override 16             public void customize(Configuration configuration) { 17                 //开启驼峰命名规则,是否启用下划线与驼峰式命名规则的映射 18                 configuration.setMapUnderscoreToCamelCase(true); 19   20             } 21         }; 22     } 23 }
  修改application.yml配置文件,追加MyBatis配置,如下所示:   1 # 配置当前要使用的数据源的操作类型  2 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource  3 # 配置Mysql的驱动程序类  4 spring.datasource.driver-class-name=com.mysql.jdbc.Driver  5 # 数据库连接地址  6 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/biehl?characterEncoding=UTF-8&serverTimezone=UTC  7 # 数据库用户名称  8 spring.datasource.username=root  9 # 数据库密码 10 spring.datasource.password=123456 11 # 进行数据库链接池的配置,数据库最小维持连接数 12 spring.datasource.dbcp2.min-idle=1 13 # 数据库初始化提供的连接数 14 spring.datasource.dbcp2.initial-size=1 15 # 数据库最大维持连接数 16 spring.datasource.dbcp2.max-total=100 17 # 等待连接获取的最大超时时间 18 spring.datasource.dbcp2.max-wait-millis=3000 19  20  21 # 后台打印sql语句 22 # mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 23 # 指定sql映射文件位置,mapper下的所有.xml文件都是映射文件 24 # mybatis.mapper-locations=classpath:mapper/*Mapper.xml 25 # Mybatis配置文件所在的路径 26 mybatis.config-location=classpath:mybatis/mybatis.cfg.xml 27 # 定义所有操作类的别名所在包 28 mybatis.type-aliases-package=com.bie.po
  搞几个Dao层、Service层、Controller层的接口或者类,如下所示:
  注意:如果不想每次都在mapper接口上添加@Mapper注解,可以在主启动类上通过添加@MapperScan注解来批量扫描指定包下的所有mapper接口。   1 package com.bie.dao;  2   3 import java.util.List;  4   5 import org.apache.ibatis.annotations.Mapper;  6 import org.apache.ibatis.annotations.Select;  7   8 import com.bie.po.UserInfo;  9  10 @Mapper // 需要引入Mybatis的依赖包 11 public interface UserInfoDao { 12  13     /** 14      * 查询全部用户信息 15      *  16      * @return 17      */ 18     @Select(value = " select * from user_info ") 19     public List findAll(); // 查询全部用户信息 20  21 }
  Service层的接口和实现类代码,如下所示:   1 package com.bie.service;  2   3 import java.util.List;  4   5 import com.bie.po.UserInfo;  6   7 public interface UserInfoService {  8       9     public List findAll(); 10 } 1 package com.bie.service.impl;  2   3 import java.util.List;  4   5 import org.springframework.beans.factory.annotation.Autowired;  6 import org.springframework.stereotype.Service;  7   8 import com.bie.dao.UserInfoDao;  9 import com.bie.po.UserInfo; 10 import com.bie.service.UserInfoService; 11  12 @Service 13 public class UserInfoServiceImpl implements UserInfoService { 14  15     @Autowired 16     private UserInfoDao userInfoDao; 17  18     @Override 19     public List findAll() { 20         return this.userInfoDao.findAll(); 21     } 22  23 }
  控制层的代码,如下所示:   1 package com.bie.controller;  2   3 import java.util.List;  4   5 import org.springframework.beans.factory.annotation.Autowired;  6 import org.springframework.stereotype.Controller;  7 import org.springframework.web.bind.annotation.RequestMapping;  8 import org.springframework.web.bind.annotation.ResponseBody;  9  10 import com.bie.po.UserInfo; 11 import com.bie.service.UserInfoService; 12  13 @Controller 14 public class UserInfoController { 15  16     @Autowired 17     private UserInfoService userInfoService; 18  19     @RequestMapping(value = "findAll") 20     @ResponseBody 21     public List findAll() { 22         List findAll = this.userInfoService.findAll(); 23         return findAll; 24     } 25  26 }
  项目启动类,如下所示:   1 package com.bie;  2   3 import org.mybatis.spring.annotation.MapperScan;  4 import org.springframework.boot.SpringApplication;  5 import org.springframework.boot.autoconfigure.SpringBootApplication;  6   7 @SpringBootApplication  8 @MapperScan(value = "com.bie.dao")  9 public class Springboot01Application { 10  11     public static void main(String[] args) { 12         SpringApplication.run(Springboot01Application.class, args); 13     } 14  15 }
  通过Postman测试一下,自己写的接口,看看好使不,如下所示:
  项目结构,如下所示:
  2、JPA是官方推出的Java持久层操作标准(现主要使用Hibernate实现),使用SpringData技术和JpaRepository接口技术,也可以达到简化数据层的目的。要在SpringBoot中使用SpringDataJPA,需要spring-boot-starter-data-jpa依赖库的支持。
  修改pom.xml配置文件,引入相关依赖包,如下所示:   1 <?xml version="1.0" encoding="UTF-8"?>  2   6     4.0.0  7       8         org.springframework.boot  9         spring-boot-starter-parent 10         2.3.5.RELEASE 11           12      13     com.example 14     demo 15     0.0.1-SNAPSHOT 16     demo 17     Demo project for Spring Boot 18  19      20         1.8 21         3.1.1 22      23  24      25          26             org.springframework.boot 27             spring-boot-starter-web 28          29  30          31             org.springframework.boot 32             spring-boot-starter-test 33             test 34              35                  36                     org.junit.vintage 37                     junit-vintage-engine 38                  39              40          41  42          43          44             mysql 45             mysql-connector-java 46          47  48          49          50             com.alibaba 51             druid 52             1.1.10 53          54  55          56             org.springframework.boot 57             spring-boot-starter-data-jpa 58          59          60             org.springframework.boot 61             spring-boot-starter-cache 62          63          64             org.hibernate 65             hibernate-ehcache 66          67      68  69      70          71              72                 org.springframework.boot 73                 spring-boot-maven-plugin 74              75          76          77              78                 src/main/resources 79                  80                     **/*.properties 81                     **/*.yml 82                     **/*.xml 83                     **/*.p12 84                     **/*.html 85                     **/*.jpg 86                     **/*.png 87                  88              89          90      91  92 
  创建UserInfo实体类,如下所示:    1 package com.demo.po;   2    3 import javax.persistence.Cacheable;   4 import javax.persistence.Column;   5 import javax.persistence.Entity;   6 import javax.persistence.GeneratedValue;   7 import javax.persistence.GenerationType;   8 import javax.persistence.Id;   9   10 @Cacheable()  11 @Entity(name = "user_info")  12 public class UserInfo {  13   14     @Id()  15     @Column(name = "user_id")  16     @GeneratedValue(strategy = GenerationType.IDENTITY) // 根据名称引用配置的主键生成器  17     private Integer userId;// 用户编号  18   19     @Column(name = "user_account")  20     private String userAccount;// 用户账号  21   22     @Column(name = "user_pw")  23     private String userPw;// 用户密码  24   25     @Column(name = "user_number")  26     private String userNumber;// 用户学号  27   28     @Column(name = "user_name")  29     private String userName;// 用户姓名  30   31     @Column(name = "user_age")  32     private Integer userAge;// 用户年龄  33   34     @Column(name = "user_sex")  35     private String userSex;// 用户性别  36   37     @Column(name = "user_mark")  38     private String userMark;// 用户标识,可以使用一张表,完成管理员和用户  39   40     @Column(name = "is_money")  41     private String isMoney;  42   43     public Integer getUserId() {  44         return userId;  45     }  46   47     public void setUserId(Integer userId) {  48         this.userId = userId;  49     }  50   51     public String getUserAccount() {  52         return userAccount;  53     }  54   55     public void setUserAccount(String userAccount) {  56         this.userAccount = userAccount;  57     }  58   59     public String getUserPw() {  60         return userPw;  61     }  62   63     public void setUserPw(String userPw) {  64         this.userPw = userPw;  65     }  66   67     public String getUserNumber() {  68         return userNumber;  69     }  70   71     public void setUserNumber(String userNumber) {  72         this.userNumber = userNumber;  73     }  74   75     public String getUserName() {  76         return userName;  77     }  78   79     public void setUserName(String userName) {  80         this.userName = userName;  81     }  82   83     public Integer getUserAge() {  84         return userAge;  85     }  86   87     public void setUserAge(Integer userAge) {  88         this.userAge = userAge;  89     }  90   91     public String getUserSex() {  92         return userSex;  93     }  94   95     public void setUserSex(String userSex) {  96         this.userSex = userSex;  97     }  98   99     public String getUserMark() { 100         return userMark; 101     } 102  103     public void setUserMark(String userMark) { 104         this.userMark = userMark; 105     } 106  107     public String getIsMoney() { 108         return isMoney; 109     } 110  111     public void setIsMoney(String isMoney) { 112         this.isMoney = isMoney; 113     } 114  115     @Override 116     public String toString() { 117         return "UserInfo [userId=" + userId + ", userAccount=" + userAccount + ", userPw=" + userPw + ", userNumber=" 118                 + userNumber + ", userName=" + userName + ", userAge=" + userAge + ", userSex=" + userSex 119                 + ", userMark=" + userMark + ", isMoney=" + isMoney + "]"; 120     } 121  122 }
  创建UserDao,然后继承JpaRepository,此时就可以使用写好的方法了,不用自己再额外写接口和实现,如下所示:   1 package com.demo.dao;  2   3 import org.springframework.data.jpa.repository.JpaRepository;  4   5 import com.demo.po.UserInfo;  6   7 /**  8  *   9  * @author 继承JpaRepository包含全部的基础CURD操作 10  * 11  */ 12 public interface UserDao extends JpaRepository { 13  14 }
  然后定义Service接口和Service接口实现,如下所示:   1 package com.demo.service;  2   3 import java.util.List;  4   5 import com.demo.po.UserInfo;  6   7 public interface UserService {  8   9     public List findAll(); 10 } 1 package com.demo.service.impl;  2   3 import java.util.List;  4   5 import org.springframework.beans.factory.annotation.Autowired;  6 import org.springframework.stereotype.Service;  7   8 import com.demo.dao.UserDao;  9 import com.demo.po.UserInfo; 10 import com.demo.service.UserService; 11  12 @Service 13 public class UserServiceImpl implements UserService { 14  15     @Autowired 16     private UserDao userDao; 17  18     @Override 19     public List findAll() { 20  21         return userDao.findAll(); 22     } 23  24 }
  然后搞一个Controller,作为接口访问的入口,如下所示:   1 package com.demo.controller;  2   3 import java.util.List;  4   5 import org.springframework.beans.factory.annotation.Autowired;  6 import org.springframework.stereotype.Controller;  7 import org.springframework.web.bind.annotation.RequestMapping;  8 import org.springframework.web.bind.annotation.ResponseBody;  9  10 import com.demo.po.UserInfo; 11 import com.demo.service.UserService; 12  13 @Controller 14 public class SpringBootController { 15  16     @Autowired 17     private UserService userService; 18  19     @RequestMapping(value = "/findAll") 20     @ResponseBody 21     public List findAll() { 22         List findAll = userService.findAll(); 23         return findAll; 24     } 25  26 }
  修改程序启动主类,追加Repository扫描配置。如果使用JpaRepository实现了DAO接口的自动实现。需要注意的是,如果想启用Repository配置,则需要在程序启动主类时使用@EnableJpaRepositories注解配置扫描包,而后才可以正常使用。   1 package com.demo;  2   3 import org.springframework.boot.SpringApplication;  4 import org.springframework.boot.autoconfigure.SpringBootApplication;  5 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;  6   7 @SpringBootApplication // 启动Springboot程序,而后自带子包扫描  8 @EnableJpaRepositories(basePackages = "com.demo.dao")  9 public class DemoApplication { 10  11     public static void main(String[] args) { 12         // 启动Springboot程序 13         SpringApplication.run(DemoApplication.class, args); 14     } 15  16 }
  修改application.properties,使用Druid作为数据源连接池,如下所示:   1 # mysql的数据库驱动  2 spring.datasource.driver-class-name=com.mysql.jdbc.Driver  3 # mysql的链接  4 spring.datasource.url=jdbc:mysql://localhost:3306/biehl  5 # mysql的账号  6 spring.datasource.username=root  7 # mysql的密码  8 spring.datasource.password=123456  9  10 # druid连接池的配置 11 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource 12  13 # Spring Data JPA,此配置可以在实体类中使用注解来创建数据表,开启正向工程 14 spring.jpa.hibernate.ddl-auto=update 15 # 在控制台打印sql语句 16 spring.jpa.show-sql=true
  使用postman进行接口调用,如下所示:
  最主要的是给自己增加知识的储备,有备无患。最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(666)领取,祝大家更上一层楼!!!

600元入魅蓝note6,试用半天,整体不错,这个价位还要什么自行车备用机用了半年的红米4高配,有点腻了,就想换一个魅蓝note6或者坚果pro用用。在闲鱼看了两天,终于以600元买下一部99新的332g的魅蓝note6。或许很多人会说现在二手不值让你爱上吹头发的,不只是戴森追觅HairArtist高速吹风机体验写在前面现在提及吹风机,不少人的第一反应就是戴森。在众多时尚博主网红的宣传追捧下,戴森吹风机几乎和女生最好的礼物划上等号了,不过其2000多米的售价对于我们这些精打细算追求性价比的教你如何用手机拍星空星轨仲夏之夜,浩瀚星空是多么令人心驰神往。相信这个暑假很多小伙伴都会出门旅游,遇到好看的夜空,却吐槽没有单反不能记录下来。其实是错的,现在的主流手机拍照素质那是相当不错,拍摄星空绰绰有比汉兰达还大,丰田皇冠SUV陆放车长超5米油耗5。3L,预售28万起对于丰田皇冠,很多人并不陌生,在90年代的中国市场,它曾经是一度与奥迪A6齐名的豪华品牌,虽然目前早已因各种原因退出市场,我们只能从二手车市场上找寻昔日的情怀。不过丰田在中国市场完为什么XRV能成为小型SUV标杆?看完这几点就知道了近年来,汽车市场由快速增长期步入平稳增长期,由增量时代进入存量时代,怎样获取新客户,已经成为了汽车行业争夺的焦点。尤其是热度较高的小型SUV领域,曾经的那片蓝海也早已消失不见,各家小米手环3,上手体验半个月,说说感受小米手环2出来的时候,就一直想买了,但是觉得功能不多,自己又有手表,所以迟迟没有下手。小米手环3发布后,下定决心一定要买一个。可惜抢了两次都没抢到。逛街无意中小米之家问了一下,现货欧拉好猫GT将上市,酷似小版保时捷Macan,最低续航超400公里对于欧拉这个品牌,很多人并不陌生,在十几年前,长城汽车就推出了概念版欧拉电动车,但迟迟未上市,直到三年前的成都车展上,也就是2018年8月份欧拉旗下首款车型iQ才正式上市,也是在同要抢宏光MINIEV的饭碗,3。98万起的雷丁芒果来了,这次能火吗对于五菱宏光MINIEV这款车,估计很多人都不陌生吧,虽然它是在2020年下半年推出的一款新车,但上市后,以席卷残云之势迅速占领了新能源汽车市场,上市后月销量迅速过万,很快成为新能手机拍照王者的较量,iPhoneXS与华为P20Pro下面的图均为开启了HDR的,看到底是iPhonexs的smartHDR厉害,还是华为p20pro更牛X呢?下面我直接放图,不说哪款是哪部机型,大家看哪张图更优秀。其中上图都是同一部韩系家轿天花板?全新一代起亚K3对比现代全新伊兰特10万元买什么车是太多家庭都曾纠结过的选车经历,通常这种纠结还会伴随着宽泛的品牌区间笼统的配置需求以及多家庭成员间的需求有所差别。但是有一类车,见证了老三样新三样的岁月更迭,也成功预算15万打算购买合资SUV,东风本田XRV和日产逍客怎么选?NBA目前已进入休赛期,但对于各大球队来说,这段空档期也是一个选拔人才的好时候,一方面球队可以通过选秀来找寻新的核心,另一方面可以通过交易得到球队即战力(即战力指无论何时何地,即刻
程维销声匿迹两个月,他能为滴滴做些什么?距离滴滴下架已经快两个月了,这款曾经火遍大江南北的APP逐渐没了消息。这两个月内谁最急?那还得是程维,据说程维在部委约谈的时候都哭了,一个大男人,当众落泪,这个时候流出眼泪,是不是VIVO投资49亿元建人才房?小米花7亿建公寓,巨头们想干啥?vivo芯片研发中心成立,年薪百万招芯片专家8月24日消息,据界面新闻报道,总投资超49亿元的vivo人才房目前已开始动工。来自东莞滨海湾新区公布的项目介绍显示,8月20日,滨海湾加密货币资产或在5年内取代法定货币四大会计师事务所之一德勤(Deloitte)的一项调查发现,大多数金融专业人士预计,数字资产将在10年内取代政府发行的货币,或至少提供一个可靠的替代货币。受访者表示,有鉴于此,金融特斯拉Cybertruck将成为马斯克的一场灾难?自2019年11月以来,特斯拉旗下最常被讨论的电动汽车是Cybertruck。马斯克的第一辆皮卡发布震惊了几乎所有收看直播活动的人,然而,尽管到目前为止cybertruck已经有超200元价位天花板无感佩戴超低延迟,双设备同联竟然还有APP防丢真无线蓝牙耳机的出现,让人们彻底摆脱了有线的束缚,使用起来更加方便,被越来越多的人们所接受和喜爱。随着市场的大火,各大小厂商纷纷推出各自的产品抢占份额。价格上从几十到上千,类型上从499元大师级调音小米高端智能音箱XiaomiSound体验2021年8月10日,小米发布了一款全新的智能音箱产品XiaomiSound,这款音箱从命名上也能看出与此前小米推出的小爱音箱是有区别的,XiaomiSound在音质方面有着更好的机海战术来袭,小米12和12Pro提前曝光,相机屏幕升级年底发布且不说小米下半年已经发布的新机,单单是已经曝光的新机已经达到了数款。最近官宣的有小米11T系列两款,红米10Prime一款,都是在9月份发布,这两个型号主要是面向海外市场。此前曝光XDM觉得手机屏幕尺寸多少最合适呢?手机现在承担的功能越来越多,所需的屏幕也越来越大,特别是12promax这个怪兽,78mm的宽度加直角边,220多克的重量,上手一会,立马放弃,对我的小拇指压力真的大啊,如果贴膜戴怎样才能把视频拍摄得美?近几年来,视频的流量超级大,在追求短平快的后疫情时代,社畜们的压力和焦虑排解口除了游戏,最多的也就是短视频和中视频了。如何把视频拍美?老于有几点小建议,从业20多年来,从胶卷时代到目前主流安卓手机有什么差异性吗?文小伊评科技当然还是有的。硬件同质化并不只是体现在手机行业,电视,冰箱,空调等各行各业其实都广泛存在,只不过由于这些商品存在一定的信息不对等,所以才会显得比较神秘。而手机则不一样,学软件开发需要有什么基础?欲知需要什么?最好先知道包含什么?从概念上来说,软件开发就是根据用户要求建造出软件系统或者系统中的某个软件部分的过程。也是一项包括需求捕捉需求分析设计编码测试和实施的系统工程。软件