Spring太复杂了,配置这个东西简直就是浪费生命。尤其在没有什么并发压力,随便搞一个RESTful服务,让整个业务跑起来先的情况下,更是么有必要纠结在一堆的XML配置上。显然这么想的人是很多的,于是就有了Spring Boot。又由于Java 8太墨迹于是有了Kotlin。

数据源使用MySql。通过Spring Boot这个基本不怎么配置的,不怎么微的微框架的Spring Data JPA和Hibernate来访问数据。
处理依赖
这里使用Gradle来处理依赖。
首先下载官网给的初始项目:
git clone https://github.com/spring-guides/gs-accessing-data-jpa.git
然后跳转到gs-accessing-data-jpa/initial目录下。
用IntelliJ IDEA打开这个项目,选择使用Gradle管理依赖。
之后Gradle会自动下载依赖项。这会花一点时间。你可以去和妹子聊一会儿了。。
如果你觉得这样很麻烦的话,可以建立一个Gradle项目。之后根据上面的例子建立一个目录:
└── src
└── main
└── java
└── hello
但是无论是用上面的哪种方式,最后都需要在Gradle文件中添加依赖项。这个Gradle文件是build.gradle。添加完依赖项
之后是这样的:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
jar {
baseName = 'gs-spring-boot'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
// tag::jetty[]
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
// end::jetty[]
// tag::actuator[]
compile("org.springframework.boot:spring-boot-starter-actuator")
// end::actuator[]
compile('org.springframework.boot:spring-boot-starter-data-jpa:1.3.3.RELEASE')
compile('mysql:mysql-connector-java:5.1.13')
testCompile("junit:junit")
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
配置文件
在目录src/main/resources/application.properties下编辑配置文件。默认是没有这个文件和相应的目录的,自行创建。
spring.datasource.url = jdbc:mysql://localhost:3306/test spring.datasource.username = root spring.datasource.password = root #spring.datasource.driverClassName = com.mysql.jdbc.Driver # Specify the DBMS spring.jpa.database = MYSQL # Keep the connection alive if idle for a long time (needed in production) spring.datasource.testWhileIdle = true spring.datasource.validationQuery = SELECT 1 # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update # Naming strategy spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # Use spring.jpa.properties.* for Hibernate native properties (the prefix is # stripped before adding them to the entity manager) # The SQL dialect makes Hibernate generate better SQL for the chosen database spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
无需java的配置类,或者什么XML配置文件。
使用配置项hibernate.ddl-auto = true,项目所需的数据库和相关表、列会自动根据定义的实体类创建。点击这里,查看更多配置的说明。
创建一个简单地实体类
这里定义一个简单地实体类,并声明为JPA实体。这个类的文件存放在目录src\main\java\hello\Entities\下。
package hello.Entities
import javax.validation.constraints.NotNull
import java.io.Serializable;
import javax.persistence.*;
/**
* Created by Bruce on 2016/3/9.
*/
@Entity
@Table(name = "user")
data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) var id: Long? = 0,
@Column(nullable = false) var name: String? = null,
@Column(nullable = false) var email: String? = null) : Serializable {
protected constructor() : this(id = null, name = null, email = null) {
}
}
这里使用了Kotlin里的data class。data class最大的优点就是省去了定义getter和setter,以及toString()的时间。这些都已经默认实现。所以,在使用data class的对象的时候直接可以使用name、email当然还有id这样的属性直接访问。
无参数的构造函数是给JPA用的,所以访问级别设定为protected。主构造函数是用来创建和数据库操作相关的对象的。
整个的整个类被@Entity修饰,说明整个类是一个JPA的实体类。@Table声明用来表明整个类对应的数据库表是哪一个。
@Id修饰的User的属性id,会被JPA认为的对象的ID。同时@GeneratedValue(strategy = GenerationType.AUTO)的修饰说明这个ID是自动生成的。
另外的两个属性name和email被@Column(nullable = false)修饰。说明两个列都是不可以为空的,同时说明两个列的名字和属性的名字是相同的。如果不同可以这样@Column(nullable = false, name="XXXXXX")。
创建简单地查询,或者说Dao类
这个就更加的简单了。JPA会自动在运行时创建数据库需要的增删改查的实现。这个实现可以是根据我们给出的Repository
来实现的。
根据User类,我们来实现一个UserDao(Repository):
package hello.Entities
import org.springframework.data.repository.CrudRepository
import org.springframework.transaction.annotation.Transactional
@Transactional
interface UserDao : CrudRepository<User, Long> {
fun findByEmail(email: String): User?
}
泛型的类型参数分别是user和user的id的类型:User, Long。我们可以定义增删改查之外的Query。比如在上面的代码里我们定义了一个findByEmail()方法。具体的自定义查询时的命名规则可以查看这里。
用Controller测试一下
数据库,Rest服务和书库的连接都已经搞定。那么,我们就来测试一下。
我们在目录src\main\java\hello\Controllers创建一个UserController类来测试和数据库的数据存取。
package hello.Controllers
import hello.Entities.User
import hello.Entities.UserDao
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.ResponseBody
/**
* Created by Bruce on 2016/3/9.
*/
@RestController
class UserController {
@Autowired
private var userDao: UserDao? = null
@RequestMapping("/create")
@ResponseBody
public fun create(name: String, email: String): User? {
try {
var newUser = User(name = name, email = email)
userDao?.save(newUser)
return newUser
} catch(e: Exception) {
return null
}
}
@RequestMapping("/delete")
@ResponseBody
public fun delete(id: Long): String {
try {
var user = User(id)
userDao?.delete(user)
return id.toString() + "deleted"
} catch(e: Exception) {
return "delete error " + e.message.toString()
}
}
@RequestMapping("/get-by-email")
@ResponseBody
public fun getByEmail(email: String): User? {
try {
var user = userDao?.findByEmail(email)
if (user != null) {
return user
} else {
return null
}
} catch(e: Exception) {
return null
}
}
@RequestMapping("/update")
@ResponseBody
public fun updateUser(id: Long, name: String, email: String): User? {
try {
var user: User? = userDao?.findOne(id) ?: return null
user?.name = name
user?.email = email
userDao?.save(user)
return user
} catch(e: Exception) {
return null
}
}
}
测试URL可以是这样的:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# kotlin
# spring
# boot
# restful
# 关于Spring Boot和Kotlin的联合开发
# spring boot + jpa + kotlin入门实例详解
# 使用Spring boot + jQuery上传文件(kotlin)功能实例详解
# Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法
# Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法
# Kotlin + Spring Boot 请求参数验证的代码实例
# Spring Boot 与 Kotlin 使用Redis数据库的配置方法
# Spring Boot 与 Kotlin 上传文件的示例代码
# Spring Boot与Kotlin定时任务的示例(Scheduling Tasks)
# 利用Kotlin + Spring Boot实现后端开发
# 配置文件
# 是这样
# 实体类
# 建立一个
# 来实现
# 创建一个
# 自动生成
# 测试一下
# 都是
# 是一个
# 放在
# 你可以
# 多个
# 不可以
# 所需
# 没有什么
# 我们可以
# 人是
# 点击这里
# 自定义
相关文章:
黑客如何通过漏洞一步步攻陷网站服务器?
公司网站制作价格怎么算,公司办个官网需要多少钱?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
建站之星导航菜单设置与功能模块配置全攻略
如何快速搭建二级域名独立网站?
广州美橙建站如何快速搭建多端合一网站?
建站之星如何助力企业快速打造五合一网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
北京制作网站的公司,北京铁路集团官方网站?
如何零基础在云服务器搭建WordPress站点?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
移民网站制作流程,怎么看加拿大移民官网?
高防服务器租用指南:配置选择与快速部署攻略
如何彻底删除建站之星生成的Banner?
如何配置IIS站点权限与局域网访问?
建站主机如何选?高性价比方案全解析
高端企业智能建站程序:SEO优化与响应式模板定制开发
网页设计与网站制作内容,怎样注册网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
建站之星微信建站一键生成小程序+多端营销系统
如何快速搭建响应式可视化网站?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站之星备案流程有哪些注意事项?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
建站之星下载版如何获取与安装?
制作宣传网站的软件,小红书可以宣传网站吗?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站主机如何安装配置?新手必看操作指南
建站主机SSH密钥生成步骤及常见问题解答?
建站之星在线客服如何快速接入解答?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何选择PHP开源工具快速搭建网站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
淘宝制作网站有哪些,淘宝网官网主页?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何快速搭建高效WAP手机网站吸引移动用户?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何在万网开始建站?分步指南解析
h5在线制作网站电脑版下载,h5网页制作软件?
图册素材网站设计制作软件,图册的导出方式有几种?
如何快速搭建高效WAP手机网站?
建站之星如何助力网站排名飙升?揭秘高效技巧
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
,交易猫的商品怎么发布到网站上去?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
*请认真填写需求信息,我们会在24小时内与您取得联系。