Grails 3和Gorm的简介
1.概述
这是对 Grails 3 和 GORM 的快速介绍。 我们当然会使用 Groovy,并且——隐含地——该框架还使用 Hibernate 来实现 ORM,Spring 框架用于依赖注入,SiteMash 用于布局和主题等。
2.数据源配置
我们无需指定任何显式数据源配置即可开始——默认情况下,Grails 使用 HSQLDB 数据库作为开发和测试环境。 但是如果你想改变这些默认值,你可以在application.yml中定义你选择的数据源:
environments:
development:
dataSource:
driverClassName : "com.mysql.jdbc.Driver"
url : "jdbc:mysql://localhost:8080/test"
dialect : org.hibernate.dialect.MySQL5InnoDBDialect
同样,我们可以在这里创建多个环境,如果需要,可以在development旁边。
3. Domain
Grails 能够基于数据库配置中的dbCreate属性为我们的域类创建数据库结构。 让我们在这里定义这些域类之一:
Class User {
String userName
String password
String email
String age
static constraints = {
userName blank: false, unique: true
password size: 5..10, blank: false
email email: true, blank: true
}
}
请注意我们如何在模型中指定我们的验证约束,这使事情变得干净整洁,并且没有注释。 当实体被持久化时,这些约束将由 Grails 自动检查,如果这些约束中的任何一个被破坏,框架将抛出适当的验证异常。 我们还可以在模型的mapping属性中指定 GORM 映射:
static mapping = { sort "userName" }
现在,如果我们调用User.list() - 我们将返回按** User排序**的结果。 我们当然可以通过将排序传递给列表 API 来实现相同的结果:
User.list(sort: "userName")
4. CRUD 操作
当我们看 API 操作时,脚手架在开始时扮演着非常有趣的角色;它允许您为域类生成基本的 CRUD API,包括:
- 必要的视图
- 标准 CRUD 操作的控制器操作
- 两种类型:动态和静态 以下是动态脚手架的工作原理:
class UserController {
static scaffold = true
}
只需编写这一行代码,框架就会在运行时生成 7 个方法:show、edit、delete、create、save和update。这些将作为该特定域实体的 API 发布。
静态脚手架示例:
- 使用脚手架创建视图:grails generate-views User
- 使用脚手架创建控制器和视图:grails generate-controller User
- 要在一个命令中创建所有内容,请使用:grails generate-all User 这些命令将为该特定域对象自动生成必要的方法。 现在让我们快速了解如何使用这些操作——例如,对于我们的User域对象。 创建新的User记录:
def user = new User(username: "test", password: "test123", email: "[[email protected]](/cdn_cgi/l/email_protection)", age: 14)
user.save()
要获取单个记录:
def user = User.get(1)
此getAPI 将以可编辑域对象。对于只读模式,我们可以使用read API:
def user = User.read(1)
要更新现有记录:
def user = User.get(1)
user.userName = "testUpdate"
user.age = 20
user.save()
以及对现有记录的简单删除操作:
def user = User.get(1)
user.delete()
5. GORM 查询
5.1. find
让我们从find API 开始:
def user = User.find("from User as u where u.username = 'test' ")
我们还可以使用不同的语法来传递参数:
def user = User.find("from User as u where u.username?", ['test'])
我们还可以使用命名参数:
def user = User.find("from User as u where u.username=?", [username: 'test'])
5.2. findBy
Grails 提供了一个动态查找工具,它使用域属性在运行时执行查询并返回第一个匹配记录:
def user = User.findByUsername("test")
user = User.findByUsernameAndAge("test", 20)
user = User.findByUsernameLike("tes")
user = User.findByUsernameAndAgeNotEquals("test", "100")
你可以在这里 找到更多的表达方式。
5.3. Criteria
我们还可以使用一些灵活的标准检索数据:
def user = User.find { username == "test"}
def user = User.createCriteria()
def results = user.list {
like ("userName", "te%")
and
{
between("age", 10, 20)
}
order("userName", "desc")
}
这里有一个快速说明——当使用条件查询时,使用“{}”而不是“()”。
5.4. 执行Query/Update
GORM 还支持 HQL 查询语法——用于读取操作:
def user = User.executeQuery(
"select u.userName from User u where u.userName = ?", ['test'])
以及写操作:
def user = User.executeUpdate("delete User u where u.username =?", ['test'])