grails的criteria和hql查询

Grails Grails 与 Hibernate   Grails 与 Hibernate 如果 GORM (Grails Object Relational Mapping)没有你想象的那么足够灵活,作为选择,你可以使用Hibernate映射你的domain类. 要做到这点,需要在你项目的grails-app/conf/hibernate目录创建一个hibernate.cfg.xml文件并为你的domain类对应HBM映射文件 ... 阅读详情

grails在查询方面也保留了hibernate的hql和criteria查询功能,hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加方便了,这次就这两个特点分享下我这几天的所学

1.grails的criteria查询

先来个简单的,通过criteria来构造一个in条件查询

def  useCriteria2(){
        def c=CityInfo.createCriteria()
        def result=c.list{
           'in'("id",[1,2,3])
        }
        Iterator<CityInfo> it=result.iterator()
        def buf=new StringBuffer();
        while(it.hasNext()){
            CityInfo info=it.next()
            buf.append(info.getName()+"-")
        }
        render buf.toString()
    }

这里查询的是id在1,2,3这个集合里城市信息,来看看结果:

接下来弄个稍微复杂一点的,弄个范围查询和模糊查询综合起来的例子

def  useCriteria(){
        def c=CityInfo.createCriteria()
        def result=c.list{
             gt("id",3)
             and{
                 like("name","%兴%")
             }
        }
        Iterator<CityInfo> it=result.iterator()
        def buf=new StringBuffer();
        while(it.hasNext()){
            CityInfo info=it.next()
            buf.append(info.getName()+"-")
        }
        render buf.toString()
    }

and里面可以写多个条件,当然了如果是or条件也可以这样用,上面的程序运行效果如下:

2.grails的hql查询

def useHql(){
        def hql="from CityInfo where id>:id  and code in:code"
        def result=CityInfo.executeQuery(hql,["id":2,code:["NB","NJ"]])
        response.setHeader("Content-Type","text/html; charset=UTF-8")
        [result:result]
    }

这个查询相信大家都看得懂,这里我想稍微做下扩展,应为默认情况下grails使用gsp或者jsp作为视图页面,个人觉得学习gsp会增加学习成本,jsp的话也不是太方便,velocity用的也不多,因此打算使用freemarker来作为视图。

由于grails并没有默认支持freemarker,因此要在项目里添加这个插件,由于版本的差异安装插件的方式也有所不同

(1)grails 1.x的版本

使用命令:grails install-plugin  插件的路径

(2)grails 2.x的版本

打开BuildConfig.groovy,找到plugins节点,在花括号的最后加上 compile ":freemarker:0.1.1",如下所示:

图上的0.1.2是为了能让大家看到那个黄色的提示改的,用0.1.1版本就足够我们用了,加上之后点一下红色箭头所指的地方或者重启下项目,插件就安装成功了


接下来就是jar包了,我们要在lib下面加上freemarker的jar包,这个jar包到struts2里面可以找到,这步完成后如果freemarker插件文件有编译错误的话就要把freemarker的jar包引入构建路径,如下所示:


到这一步为止,我们就可以使用freemarker了,上面的useHql的视图页面如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>查询结果</title>
</head>
<body>
<#list result as item>
    ${item.id}, ${item.name}<br/>
</#list>
</body>
</html>


这里的result是返回的map对应的key,这样子数据就显示出来了

安装插件的时候要注意,如果版本选不对,那么一切工作都是徒劳。官网说的那个0.4版本我试过貌似用不成

17、数据库查询、迁移及服务相关技术详解 本博客详细介绍了在 Grails 应用中使用 HQL 和 Criteria 进行数据库查询的方法,以及通过原生 SQL 查询实现更灵活的数据库操作。同时,对数据库迁移工具 dbmigrate 和 LiquiBase 插件进行了对比分析,介绍了如何在非 Grails 环境中使用 GORM,以及服务的创建、调用和初始化方式,帮助开发者更好地管理业务逻辑和事务控制。 阅读详情

相关推荐

grails增删改查(初学者必备)

直接导入运行,带MYSQL数据库 我学GRAILS时候做的增删改查! 总共两个表一个是管理员的 一个是 用户表

面向初学者的Grails教程-HQL查询(executeQuery和executeUpdate)

该Grails教程将教授使用HQL的基础知识。 Grails支持动态查找器,这使执行简单的数据库查询变得很方便。 但是对于更复杂的情况,Grails提供了Criteria API和HQL。 本教程将重点讨论后者。 介绍 众所周知,Grails位于Spring和Hibernate(这是两种最受欢迎​​的Java框架)的顶部。 Hibernate用作Grails对象关系映射(GORM)的基础...

648

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1123

grails的criteria实现复合查询并实现结果分页

def index(Integer max) { params.max = Math.min(max ?: 10, 100) if (!params.max) params.max=10 if (!params.offset) params.offset=0 if (!params.sort) params.sort="id" if (!params.order) params.order="asc" def.

csdn学子 238

ZYNQ新手必看:5分钟搞定SD卡与QSPI Flash双启动模式配置(附常见问题排查)

本文为ZYNQ开发者提供了SD卡与QSPI Flash双启动模式的完整配置指南与深度排错方法。详细解析了从BootROM、FSBL到BOOT.bin的启动链条,并分步讲解了在Vivado/Vitis中的硬件配置、软件工程创建及BOOT.bin文件生成流程。针对SD卡格式化、文件放置以及QSPI Flash烧录中的常见陷阱(如版本差异、时钟配置)给出了具体解决方案和排查清单,帮助开发者快速实现可靠的产品启动与程序固化。

ll5678的博客 932

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

CentOS 7 下Oracle 11G RAC自动化部署实践指南

本文详细介绍了在CentOS 7操作系统上,通过静默安装方式自动化部署Oracle 11g RAC集群的完整实践指南。内容涵盖部署前的网络与存储规划、系统环境准备与调优、共享存储配置(UDEV/多路径)、Grid Infrastructure静默安装、数据库软件安装与集群数据库创建等核心步骤,并提供了关键的避坑指南,旨在帮助DBA高效、可靠地完成RAC集群的自动化搭建。

q6r7s8t9的博客 676

Grails实战教程-整合版

现如今,基于Java的网站开发明显过于复杂,远超实际工作需要。在Java领域中,大部分的网站开发框架也没有严格的遵循“可重用”原则。动态框架如Rails,Django和TurboGears等的出现,为Java网站开发提供了新思路,Grails就是基于这种新思路构建而成的。Grails大大降低了Java领域中网站开发的复杂度,它建立在已有技术如Spring和Hibernate之上。简单理解,Grails是一个框架,特点是整合先进技术,本质是专注抱大腿。哈哈,开个小玩笑,Grails可不是只有那么简单。Grails通过其核心技术及扩展插件使网站开发中的很多难题都得以解决,如果非要列一个清单的话,主要应包括:一个基于Hibernate且易于使用的对象关系映射(ORM)层一个被称作GSP的页面展示技术一个基于Spring MVC的控制器层一个基于Gradle的交互式命令行环境一个内嵌的且已配置为热部署的Tomcat服务器Spring的依赖注入技术使用Spring的MessageSource实现国际化(i18n)一个基于Spring事务抽象的事务层借助功能强大的Groovy编程语言,外加领域专用语言(DSLs)的广泛运用,你会惊喜的发现,做网站竟然也能如此简单。

UG\NX二次开发 分割曲线

分割曲线没有ufun函数?那就换一种思路实现。

王牌飞行员_里海的博客 1146

解决微信小程序长页面滚动到底部点击底部的输入框后输入框漂浮且页面滚动到顶部

一、问题描述 项目中有一个长页面上部展示部分信息下部为信息录入,页面长度为三屏幕(不同手机屏幕大小略有差异),当滚动到第二屏或者第三屏去填写信息时点击输入框后输入框漂浮起来了并且页面向上滚动了一段距离,回到了第一屏中展示的内容。效果如图。 滚动到第二屏,证件号输入。 点击输入框 可以看到证件号输入框漂浮了起来并且页面滚动到了第一屏展示的内容。 注意:小程序是2018年上线,在2020年4月份之前该页面从未出现过这种现象。推测:微信的后续更新中对微信小程序基础库进行了重构,导致点击输入框后页

仰望星空的代码 3260

Grails文档3.2.5 | 21章 - 22章

一个模型(Model)就是一个Map对象,模型(Model)的作用是,为视图(View)的渲染提供基础数据。在进行数据绑定时,会自动去除字符串前后空白,即trim操作。Grails常常用约定来代替配置,而在模型(Model)与视图(View)之间,就存在着一些约定。控制器,控制器Controller主要用于处理请求以及响应请求,响应请求的方式可以是直接响应(关键词render)或者间接响应(委托视图View)。因此,如果在预期位置没有找到GSP页面,但存在相应的JSP页面,那么,此JSP页面将被予以使用。

lcl417891235的博客 752

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2523

grails 教程_Grails初学者教程– Criteria API

grails 教程 本教程将展示如何使用Criteria API从数据库中搜索数据。 Criteria是功能强大的API,是HQL的优雅替代方案。 介绍 上一篇文章表明HQL是执行复杂查询的强大方法。 但是,如果HQL语句不固定并且需要连接,这不是很优雅。 例如:如果仅当参数不为null时才需要查询数据库,则我们的代码将如下所示: def hqlQueryString = "from P...

194

大模型性能压测全指南:从指标到实战

本文系统阐述大模型(LLM/多模态)私有化部署性能压测方案,涵盖核心指标(TTFT、TPOT、吞吐、并发、资源占用、错误率)、四类典型压测场景及工具选型(Locust、vLLM benchmark等)。强调环境隔离、参数固定与长尾延迟分析,提出瓶颈定位思路与标准化报告模板,结合伪代码示例实现流式接口精准打点,确保测试结果真实可信,助力优化模型服务稳定性与性能。

SmallBull的博客 56

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Grails GORM查询总结

GORM绝对是Grails框架的一大亮点。GORM基于Hibernate的ORM之上做二次封装,既有Hibernate强大的功能,又有使用简便的特点。本篇主要总结和类比在项目开发中用到的GORM查询方式。 GORM支持的查询方式 GORM底层使用Hibernate,所以支持Hibernate的所有查询方式,此外,还支持Dynamic fi...

weixin_33860528的博客 768

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

GORM或Hibernate查询或更新部分属性

若想查询一个POJO类的部分属性,如 @Entity class Captcha { String str String bak static constraints = { bak(nullable: true) } } 若只想查询str,不查bak。可以通过HQL或C...

weixin_34400525的博客 179

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

20130517-Grails In Action-4、让模型工作(06小节)

1、Criteria(条件查询) Criteria可以通过createCriteria 或者 withCriteria 方法来使用 1 def user = User.findByUserId(params.user) 2 def entries = Post.createCriteria().list { 3 and { 4 ...

该页无法显示 114

Hibernate many-to-many 查询写法

« TTServer Java 客户端 Tyrond用 HttpServletResponseWrapper 实现 Etag 过滤器 » Hibernate many-to-many 查询写法 发表于:2009年7月18日 | 分类:groovy &amp; grails | 标签: grails, hibernate, hql, many-to-many, query |...

rongdmmap的博客 363

GORM 开发实例

记录 GORM 开发实例

杨波的专栏 635

Groovy on rails 入门(M-2)

  grails的CRUD就真的是简单死了,基本上都是一句话搞定:   create save() read get(id) update save() ...

Star_of_Ice的专栏 261

探索Grails数据映射:一个经典ORM解决方案的重生

探索Grails数据映射:一个经典ORM解决方案的重生 项目介绍 在Java和Groovy的世界里,有一颗曾经由VMware, Inc.细心培育的璀璨明珠——Grails Data Mapping。虽然VMware已不再对其进行主动维护,但这并不意味着它的光芒消退。相反,这一宝贵的资源如今迁移到了更广阔的天地——Grails组织的怀抱之中,继续以其强大的功能服务开发者社区。这是一篇关于重新发现和探...

gitblog_00519的博客 984

Grails初学者教程– Criteria API

本教程将展示如何使用Criteria API从数据库中搜索数据。 Criteria是功能强大的API,是HQL的优雅替代方案。 介绍 上一篇文章表明HQL是执行复杂查询的强大方法。 但是,如果HQL语句不固定并且需要连接,这不是很优雅。 例如:如果仅当参数不为null时才需要查询数据库,则我们的代码将如下所示: def hqlQueryString = "from Person whe...

236

GRAILS 分页 查询

在做grails的查询分页的时候,发现一个问题,那就是输入的查询参数不能作为条件在分页之间传递,而且如果做分页查询的总数也不得而知,针对多条件criteria查询(也适用于HQL查询)做了如下实现,代码如下: 最主要的是蓝色标注的部分,创建新的criteria,用projection的rowCount()方法,统计总条数,查询条件要保持一致,然后制定参数传递给view。 def booking...

johsonwon的专栏 324

Grails GROM查询

前文已经介绍了如何对Domain Class进行持久化,然而光存不查,那是没有什么意义的。因此,本篇将介绍持久化操作的另一面:查询。最基本的查询有两种:罗列全部实例和获取单个实例,它们分别对应Domain Class的list和get方法。使用例子如下:列举全部:Book.list()分页并排序(这些参数不需要同时出现,按需使用即可):Book.list(offset:10, max:20, sort:"asc", order:"title")获取单个实例:Book.get(23)获取多个实例:Book.g

至今、的专栏 2119
上一篇: grails一对一关联关系
下一篇: grails过滤器和数据查询的几个重要方法
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值