Reference

分支结构

Kotlin 提供了两种控制方式 if 和 when。if 和传统的一致,when 类似 switch。

when 分支

对于检查条件没有类型限制,

var score = 'B'
when (score){
'A' -> {
println("you got A")
println("you are good")
}
'B', 'C' -> println("you got B or C")
'D' -> println("you got D")
else -> println("you got nothing")
}
阅读全文 »

定义函数

fun 函数名(形参列表)[:(返回值类型列表)]{
//函数体
}
。下面定义了两个Int类型的参数,和一个Int类型的返回值

fun sum(a: Int, b: Int): Int {
return a + b
}
// 如果函数体是一个表达式的话,可以简写,返回类型自动推导
fun sum(a: Int, b: Int) = a + b

没有返回值的情况
省略[:返回值类型]部分,默认返回 Uint 类型,相当于 Java 的 void,和手动写上 :Uint 一样的

阅读全文 »

CrudRepository 接口提供 CRUD 操作,不需要写代码就可以实现增删改查

PagingAndSortingRepository 继承至 CrudRepository 提供额外的方法来实现分页和排序功能

JpaRepository 继承 PagingAndSortingRepository 增加了更多针对 JPA 的功能

@Id,@GeneratedValue

这两个是一起使用的。 @Id 是主键标识, @GeneratedValue 用于指定规则。
使用样例:

import javax.persistence.*

@Entity
@Table(name = "t_users")
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val f_id: Int,
val f_userName: String,
val f_cellPhone: String? = null)
规则 说明
TABLE 使用一个特定的数据库表格来保存主键。
SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY 主键由数据库自动生成(主要是自动增长型)
AUTO 主键由程序控制,默认的配置。
阅读全文 »

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。
InnoDB是默认的MySQL引擎。

67f65b9f.png

原文
我翻译的一篇文章。

概览

在本篇文章,我们将要研究一下 Kotlin 语言内置的 null 安全特性。 Kotlin 提供了可推测的,本地处理的可空字段 - 不需要额外的支持库。

Maven 依赖

<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.1.1</version>
</dependency>
阅读全文 »

目前开始系统的学习spring boot,第一个好奇的地方就是可以打包为 jar 或者 war。
那么有什么区别呢?选择的依据是什么呢?

先说结论

  1. 如果需要发布到已存在的Java EE Application Server (e.g. Tomcat)那就打WAR包
  2. 没有上面的需求的话可以打 JAR 包,打 JAR 包的时候使用的是内嵌的容器。
阅读全文 »

用来显示提示信息的,如果带有 data-dismiss=”alert” 那么关闭后就没了,无法再次打开。
下面是实际使用的例子。默认是隐藏的,需要的地方使用js设置消息并显示出来,

<div class="alert alert-danger alert-message" id="alertMsg" style="display:none;" role="alert">
information here.
<a class="close" href="#">×</a>
</div>

//js 处理
$('#alertMsg').html("<strong>警告!</strong>两次密码输入不一致" + '<a class="close" onclick="$(this).parent().hide();" href="#">×</a>');
$('#alertMsg').show();

自动关闭

function showAlert(msg, isSuccess) {
if (isSuccess) {
$('#alertMsg').removeClass("alert-danger");
$('#alertMsg').addClass("alert-success");
} else {
$('#alertMsg').removeClass("alert-success");
$('#alertMsg').addClass("alert-danger");
}
$('#alertMsg').html(msg + '<a class="close" onclick="$(this).parent().hide();" href="#">×</a>');
// $('#alertMsg').show();
$("#alertMsg").fadeTo(2000, 500).slideUp(500, function () {
$("#alertMsg").slideUp(500);
});
}

隐藏元素

<div style="display: none;" />

for

常规用法

for (语句 1; 语句 2; 语句 3)
{
被执行的代码块
}

for (i = 0; i < 5; i++) {
text += "数字是 " + i + "<br>";
}

效率最高的用法

使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。

for(j = 0,len=arr.length; j < len; j++) {

}

For/In 循环

var person={fname:"John",lname:"Doe",age:25};

for (x in person)
{
txt=txt + person[x];
}

遍历

for (let i = 0; i < arr.length; ++i)
arr.forEach((v, i) => { /* ... */ })
for (let i in arr)
for (const v of arr)