首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,676 阅读
2
Mac打印机设置黑白打印
5,156 阅读
3
修改elementUI中el-table树形结构图标
4,970 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,722 阅读
5
intelliJ Idea 2022.2.X破解
4,668 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Mac
Spring Cloud
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
MySQL
.Net
Spring Cloud Alibaba
Mybatis-Plus
Typecho
jQuery
Java Script
IntelliJ IDEA
微信小程序
Laughing
累计撰写
630
篇文章
累计收到
1,421
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
630
篇与
的结果
2021-11-14
java类型转换的一些问题及处理
最近在项目上被类型转换坑了不少。特以此文做一下记录。问题出在哪以前在项目开发的时候,在数据访问层,基本上是使用MyBatis,偶尔使用JPA,不管哪种方式,我们数据访问都是建立在实体之上的(极少数情况下也会使用Map,但是这种情况是比较特殊的。目前公司的开发平台,数据访问层,统一通过平台封装的BQL进行,问题就出现在这个封装的BQL上,它返回的数据类型是List<Map<String,Object>>类型,这个东西看似灵活(因为是Map,另外还是Object的泛型),既然返回的是Object类型,那就涉及到类型转换的问题。这种Object的弱类型,也给我们创建实体制作了障碍,比如我们一个实体可能有Integer类型、String类型等等。但是,我们总不能把实体全部创建层Object类型的。进一步的问题截止到目前,我们发现的第一个问题就是Object需要转换成具体的类型。紧接着,我们面临着第二个问题,就是我们通过BQL这个东西建表的时候,我们选择的比如是Integer类型(整型),我们会发现,在postgre数据库中,创建的类型确实是Integer,但是在Oracle中创建的是Number类型,然后我们在用BQL取数的时候,在postgre数据库中,取出的Object是Integer,但是在Oracle中取出的Object确实BigDecimal类型,这就让人比较懵逼了。我在创建实体的时候,到底是用Integer还是用BigDecimal呢。如何定义类型通过上面分析,我们可以确定的是,我们需要的是Integer而不是BigDecimal。所以,我们在创建实体时,创建的是一个Integer类型的。如何进行类型转换以上,便引出了我们如何进行类型转换的话题。在Java中如何进行类型转换呢,我们以Integer类型为例,常见的方式可能就以下三种。(Integer)obj:将obj转换成Integer类型,这种obj可以是Object类型。Integer.parseInt(obj):将字符串类型的obj转成对应的数值。Integer.valueOf(obj):将字符串类型的obj转成对应的数值。那么这三种方法有啥区别呢,我们以以下代码为例Object str123 = new BigDecimal("123"); int int123 = (int) str123; int parseInt = Integer.parseInt(str123.toString()); Integer valueOf = Integer.valueOf(str123.toString()); System.out.println(int123); System.out.println(parseInt); System.out.println(valueOf);以上代码,idea不会给出任何的错误提示但是我们运行时,会发现int int123 = (int) str123;这行代码会报错因为str123实际是BigDecimal类型所以(Integer)报错了。区别一:(Integer)只能转换相同的类型,否则会报错。我们跳转代码,可以查看Integer.parseInt()和Integer.valueOf()通过上面截图,我们可以看到Integer.parseInt()和Integer.valueOf()的区别。Integer.parseInt()返回的是基本类型int,Integer.valueOf()返回的是对象类型Integer。区别二:Integer.parseInt()返回的是基本类型int,Integer.valueOf()返回的是对象类型Integer。
2021年11月14日
862 阅读
0 评论
1 点赞
2021-11-13
java object转成Map
/** * object转成Map * * @param obj 对象 * @return Map */ private Map<String, Object> obj2Map(Object obj) { Map<String, Object> map = new HashMap<>(); // System.out.println(obj.getClass()); // 获取f对象对应类中的所有属性域 Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String varName = field.getName(); varName = varName.toUpperCase();//将key置为小写,默认为对象的属性 try { // 获取原来的访问控制权限 boolean accessFlag = field.isAccessible(); // 修改访问控制权限 field.setAccessible(true); // 获取在对象f中属性fields[i]对应的对象中的变量 Object o = field.get(obj); if (o != null) map.put(varName, o.toString()); // System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o); // 恢复访问控制权限 field.setAccessible(accessFlag); } catch (IllegalArgumentException | IllegalAccessException ex) { ex.printStackTrace(); } } return map; }
2021年11月13日
1,096 阅读
0 评论
0 点赞
2021-10-25
一文搞懂maven的scope属性
在SpringBoot开发时,我们一般使用maven作为项目的管理和构建工具。一般情况下,我们都是通过以下方式引入一个依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency>以上三个依赖有没有发现,有些有scope属性,有些没有scope属性,而且scope属性的值也不一样。概述Maven中使用scope来指定当前包的依赖范围和依赖的传递性。常见的可选值有:compile,provided,runtime,test,system 等。所谓依赖范围,可以理解为项目的阶段,比如是在编译、测试、运行、打包哪个阶段有效。所谓传递性,是指项目依赖关系的传递。比如当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?属性值编译调试运行打包传递性示例备注compile是是是是是无无test否是否否否junit测试代码的编译和执行,不会被打包runtime否是是是是JDBC驱动无provided是是是否否lombokprovided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供system是是是否是本地jar包同provided,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。不推荐使用system依赖。import否否否否否无无scope各种取值详解compile默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效。provided在编译、测试时有效,但是在运行时无效。provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了。runtime在运行、测试时有效,但是在编译代码时无效。说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。test只在测试时有效,包括测试代码的编译,执行。例如:JUnit。PS: test表示只能在src下的test文件夹下面才可以使用,你如果在a项目中引入了这个依赖,在b项目引入了a项目作为依赖,在b项目中这个注解不会生效,因为scope为test时无法传递依赖。system在编译、测试时有效,但是在运行时无效。和provided的区别是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。scope的依赖传递当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是:当C是test或者provided时,C直接被丢弃,A不依赖C; 否则A依赖C,C的scope继承于B的scope。
2021年10月25日
1,064 阅读
0 评论
1 点赞
2021-10-24
零基础学HTML5+CSS3---图片热区链接
<area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面。图像热区链接的定义方式1.设置图片首先需要在图像文件中设置映射图像名。在添加图像的<img>标记中使用usemap属性添加图像要引用的映射图像的名称。<img src="图像地址" usemap="#映射图像名称">2.定义热区图像及热区的链接<map name = "映射图像名称" id = "映射图像名称"> <area shape="热区形状" coords="热区坐标" href="链接地址" title="标题"> </map>表示设定热点的形状为矩形,左上角顶点坐标为(X1,y1),右下角顶点坐标为(X2,y2)。表示设定热点的形状为圆形,圆心坐标为(X1,y1),半径为r。表示设定热点的形状为多边形,各顶点坐标依次为(X1,y1)、(X2,y2)、(x3,y3)...示例 <img src="img/main.jpeg" usemap="#beauty"> <map name="beauty" id="beauty"> <area shape="rect" coords="0,0,60,60" href="img/topleft.jpeg" title="美女"> </map>
2021年10月24日
905 阅读
0 评论
0 点赞
2021-10-24
零基础学HTML5+CSS3---字体
斜体、下划线、删除线说明<em>文字斜体标记<u>文字下划线标记<strike>文字删除线标记示例代码<body style="color: mediumvioletred;"> <h3>书名:<em>《山海经》</em></h3> <h4>出版日期:<u>古代</u></h4> <h4>原价:<strike>200</strike> 促销价:300</h4> </body>文字的上标与下标说明<sup>上标标记内容<sub>下标标记内容示例代码<body style="color: mediumvioletred;"> <h2>数学公式</h2> 2X+4<sup>2</sup>=16 <h2>化学符号</h2> 水:H<sub>2</sub>O </body>特殊符号说明一般情况下,特殊符号由前缀&、字符名称和后缀分号;组成。常见特殊符号如下表:特殊符号实体名称含义''"引号<<左尖括号>>右尖括号✖️×乘号©©居右 居右原格式标记说明<pre>原格式标记,保留代码中的原始格式。示例代码 <pre> ^_^ </pre><pre>标签中如果有html标签,仍然会被渲染水平线说明水平线用于段落与段落之间的分隔。通过<hr>来创建水平线。示例代码 <hr style="margin-top: 20px;border: 1px solid royalblue;"> <pre> ^_^ </pre> <hr>
2021年10月24日
1,037 阅读
0 评论
1 点赞
2021-10-23
java PreDestroy注解使用
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。比如我们可以通过此注解实现:程序停止时做一些清理工作。 @PreDestroy public void destroy(){ log.info("PreDestroy"); }当我们停止程序,会输出以下信息
2021年10月23日
927 阅读
0 评论
0 点赞
2021-10-23
删除Mac启动台的Steam游戏图标
在Mac上安装Steam游戏后,会发现启动台(Launchpad)上会有相关的Steam游戏图标,然而,当我们把这个Steam游戏卸载后,却发现启动台(Launchpad)上的图标依然存在,那么,如何将这个图标删除呢? 方法很简单,打开访达(Finder),前往 - 前往文件夹(或快捷键Shift+Command+G),输入路径:/Users/你的用户名/Applications,打开应用程序文件夹(Applications),选中里面的Steam游戏,点击右键,将图标移到废纸篓即可。 Steam平台给Mac用户带来了很多优秀好玩的游戏,很多的游戏在Mac上有不俗的表现,但是,Mac比较适合玩小游戏,不太适合玩大型游戏,大型游戏还是建议使用PS4或者PC来玩更好一些。
2021年10月23日
1,305 阅读
0 评论
3 点赞
2021-10-23
Mac 安装Xmind 破解版教程
官网下载最新的安装包我这里下载的是XMind8,切记不要从App Store下载,App Store下载的无法激活。XMind官网下载破解包 XMindCrack.jar链接: https://pan.baidu.com/s/1jqpodMvKQTNQyenAIy0Y3w 密码: rzxq链接:https://pan.baidu.com/s/1to4gjwJ1LRa_SuCQ50fqzw 密码:a7pg安装成功后,查看xmind.app包内容打开包之后,Contents/Eclipse/将XMindCrack.jar放在这个包里面。修改XMind.ini文件,在后面添加-javaagent:/Applications/XMind.app/Contents/Eclipse/XMindCrack.jar打开xmind输入邮箱和序列号邮箱:随便填写序列号:XAka34A2rVRYJ4XBIU35UZMUEEF64CMMIYZCK2FZZUQNODEKUHGJLFMSLI QMQUCUBXRENLK6NZL37JXP4PZXQFILMQ2RG5R7G4QNDO3PSOEUBOCDRYSSXZGR ARV6MGA33TN2AMUBHEL4FXMWYTTJDEINJXUAV4BAYKBDCZQWVF3LWYXSDCXY5 46U3NBGOI3ZPAP2SO3CSQFNB7VVIY123456789012345
2021年10月23日
1,733 阅读
0 评论
4 点赞
2021-10-23
Spring PostConstruct注解的使用
一、基本介绍@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注解的方法)二、用途@PostConstruct主要用于处理一些初始化工作。比如下面代码@RestController @RequestMapping(value = "book") @Slf4j public class BookController { @Resource private IBookService bookService; /** * 构造函数 */ public BookController() { log.info("构造函数,此时bookService :" + bookService); } @PostConstruct public void init() { log.info("PostConstruct,此时bookService :" + bookService); } @GetMapping(value = "search") public List<Book> search() { return bookService.search(); } }看下控制台可以看到,构造函数里面,Bean还没有初始化,@PostConstruct里面已经完成初始化,所以,我们可以通过@PostConstruct完成一些初始化后的操作。
2021年10月23日
1,180 阅读
0 评论
0 点赞
2021-10-22
java泛型反序列化
其实不管前后端交互还有API接口,我个人更倾向于使用实体(DTO、VO)啥的,但是,有时候也不得不用Map等进行数据交互。一般而言,前后端或者接口之间交互都是通过JSON进行的,而我们在使用Map的时候,一般都是使用的泛型类,而不是使用原始类型,比如Map<String,string>,那么我们来看下下面一段代码。Map<String,String> bookMap = new HashMap<>(); bookMap.put("author","张三"); bookMap.put("name","山海经"); String bookMapString = JSONObject.toJSONString(bookMap); log.info(bookMapString);我们创建一个Map<String,String>,并将其序列化成字符串,如果我们放过来,想将字符串在反序列化成Map,我们首先想到的可能就像下面这样。Map bookMapNew = JSONObject.parseObject(bookMapString); log.info(String.valueOf(bookMapNew));程序有错吗?当然没错,但是优雅嘛,肯定是不优雅。其实这个时候,idea会给我们一个提示Raw use of parameterized class 'Map',大概意思就是说这个类要使用泛型,如果不使用泛型,我们其实丢失了类型的安全性。这个时候,我们就想到了parseObject()的重载方法,通过第二个参数,传递进去类型,如果我们是普通的类,传递一个class进去是没问题的。比如我们改写一下上面反序列化的方法Map<String,String> bookMapNew = JSONObject.parseObject(bookMapString,Map.class);这个时候,idea又会给我们一个提示大意就是类型转换没有校验。那么有没有更加完美的方法呢,有的,那就是TypeReference类,我们继续改造代码如下Map<String,String> bookMapNew = JSONObject.parseObject(bookMapString,new TypeReference<Map<String,String>>(){});这回idea终于没有提示了运行一下,结果也是正确的
2021年10月22日
1,832 阅读
0 评论
1 点赞
2021-09-12
angular基础知识之路由
基本使用首先从@angular/router库中导入一些常量。修改我们的app.module.ts文件,增加以下内容import { RouterModule, Routes } from '@angular/router'; import { HashLocationStrategy, LocationStrategy, registerLocaleData } from '@angular/common';增加路由const routes: Routes = [ { path: '', redirectTo: 'home', pathMatch: 'full' }, { path: 'home', component: HomeComponent }, { path: 'about', component: AboutComponent } ]修改imports增加以下内容RouterModule.forRoot(routes),修改providers增加以下内容{ provide: LocationStrategy, useClass: HashLocationStrategy }安装路由器platformBrowserDynamic().bootstrapModule(AppModule)完整代码app.module.ts修改后,完整代码如下,请忽略无效内容import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpClientJsonpModule, HttpClientModule } from '@angular/common/http'; import { RouterModule, Routes } from '@angular/router'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { NZ_I18N } from 'ng-zorro-antd/i18n'; import { zh_CN } from 'ng-zorro-antd/i18n'; import { HashLocationStrategy, LocationStrategy, registerLocaleData } from '@angular/common'; import zh from '@angular/common/locales/zh'; import { FormsModule } from '@angular/forms'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; import { NzButtonModule } from 'ng-zorro-antd/button'; import { NzFormModule } from 'ng-zorro-antd/form'; import { NzInputModule } from 'ng-zorro-antd/input'; import { NzIconModule } from 'ng-zorro-antd/icon'; import { NzSelectModule } from 'ng-zorro-antd/select'; import { NzGridModule } from 'ng-zorro-antd/grid'; import { NzCardModule } from 'ng-zorro-antd/card'; import { SimpleHttpComponent } from './simple-http/simple-http.component'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { NzMenuModule } from 'ng-zorro-antd/menu'; import { AboutComponent } from './about/about.component'; import { HomeComponent } from './home/home.component'; registerLocaleData(zh); const routes: Routes = [ { path: '', redirectTo: 'home', pathMatch: 'full' }, { path: 'home', component: HomeComponent }, { path: 'about', component: AboutComponent } ] @NgModule({ declarations: [ AppComponent, SimpleHttpComponent, AboutComponent, HomeComponent ], imports: [ BrowserModule, AppRoutingModule, FormsModule, HttpClientModule, RouterModule.forRoot(routes), HttpClientJsonpModule, BrowserAnimationsModule, NzDatePickerModule, NzButtonModule, NzFormModule, NzInputModule, NzIconModule, NzSelectModule, NzGridModule, NzCardModule, NzMenuModule ], providers: [ { provide: NZ_I18N, useValue: zh_CN }, { provide: LocationStrategy, useClass: HashLocationStrategy } ], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule)创建模块我们创建两个模块,分别是Home、About修改App模板文件,配置路由<ul nz-menu nzMode="horizontal"> <li nz-submenu nzTitle="Home" nzIcon="mail" [routerLink]="['home']"></li> <li nz-submenu nzTitle="About" nzIcon="mail" [routerLink]="['about']"></li> </ul> <br /> <router-outlet></router-outlet><router-outlet>用于展示路由内容,[routerLink]用于配置节点的路由配置完成后,我们可以访问一下首页传递参数我们可能需要路由中传递参数,那么我们继续改造。修改路由参数修改about的路由,我们传递一个name属性。修改后如下const routes: Routes = [ { path: '', redirectTo: 'home', pathMatch: 'full' }, { path: 'home', component: HomeComponent }, { path: 'about/:name', component: AboutComponent }, { path: 'about', component: AboutComponent } ]修改模块import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'app-about', templateUrl: './about.component.html', styleUrls: ['./about.component.css'] }) export class AboutComponent implements OnInit { route: ActivatedRoute; name: string = ""; constructor(route: ActivatedRoute) { this.route = route route.params.subscribe( param => { this.name = param['name'] console.log(param) } ) } ngOnInit(): void { } }修改about模板<p>about works!</p> <br> {{name}}
2021年09月12日
1,187 阅读
0 评论
0 点赞
2021-09-12
angular HTTP请求
Angular有自己的HTTP库,我们可以用它来调用外部API。 在老的版本中HTTP模块位于@angular/http ,新的版本已经迁移到@angular/common/http。导入http模块在app.module.ts中,引入http模块import { HttpClientJsonpModule, HttpClientModule } from '@angular/common/http';然后注入模块@NgModule({ declarations: [ AppComponent, SimpleHttpComponent ], imports: [ HttpClientModule, HttpClientJsonpModule ], providers: [{ provide: NZ_I18N, useValue: zh_CN }], bootstrap: [AppComponent] })新建一个测试模块执行以下命令创建模块ng g c SimpleHttp引入HttpClient在新建模块的ts文件中,引入HttpClient模块,并在构造函数中注入。import { HttpClient } from '@angular/common/http'; private httpClient: HttpClient; constructor(httpClient: HttpClient) { this.httpClient = httpClient }使用let url = "http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1" this.httpClient.get(url).subscribe((response) => { console.log(response); }, (err) => { console.warn(err) })其他除了get方法,还有我们常用的post、put、delete、request等方法。传递参数当然我们可以给后台传递参数的,这里我模拟一个login请求。post处理请求时,我们可能需要传递头部还有返回值类型信息,不然会报错。后台用Spring Boot模拟登陆@RestController public class LoginController { @PostMapping("login") @CrossOrigin public String Login(@RequestBody LoginEntity loginEntity){ LoginEntity entity = loginEntity; return "success"; } }前端完整调用代码import { Component, OnInit } from '@angular/core'; import { HttpClient ,HttpHeaders} from '@angular/common/http'; @Component({ selector: 'app-simple-http', templateUrl: './simple-http.component.html', styleUrls: ['./simple-http.component.css'] }) export class SimpleHttpComponent implements OnInit { private httpClient: HttpClient; private headers = new HttpHeaders({'Content-Type': 'application/json'}); constructor(httpClient: HttpClient) { this.httpClient = httpClient } ngOnInit(): void { let url = "http://localhost:8080/login" let param = { userName:'张三' } this.httpClient.post(url,param,{headers:this.headers,responseType:'text'}).subscribe(function(response) { console.log('我取到数据了:'+response) }, function(err){ debugger console.log('报错了:'+err) }) } }
2021年09月12日
1,125 阅读
0 评论
1 点赞
1
...
18
19
20
...
53