解决Hibernate只执行8次数据库操作
嗯,原因是这样的,今天下午在写一个获取某个类别下文章数量的时候,需要为每个目录都执行查询,但是我发现一个问题,Hibernate只会执行8次操作,之后就停在那里了,也不会返回数据。
噢,真是恼火,最终在百度上找到了解决办法,原因是这样了,因为我每次执行操作的数据库查询的时候没有关闭Session,因此导致出现了问题。
同志你只要加上这样这样一句话:
1 | session.close(); |
好了,再试试,已经搞定了!
嗯,原因是这样的,今天下午在写一个获取某个类别下文章数量的时候,需要为每个目录都执行查询,但是我发现一个问题,Hibernate只会执行8次操作,之后就停在那里了,也不会返回数据。
噢,真是恼火,最终在百度上找到了解决办法,原因是这样了,因为我每次执行操作的数据库查询的时候没有关闭Session,因此导致出现了问题。
同志你只要加上这样这样一句话:
1 | session.close(); |
好了,再试试,已经搞定了!
今天要给大家介绍一下如何利用node.js的expressjademysql三个module实现获取form表单的内容以及通过数据库验证登录的正确性。请确保你已经下载好了前面三个module并且你的电脑里面已经安装好mysql。
首先看看运行页面:
再给大家看看整个小系统的目录结构吧:
请大家按照图中所示的目录结构建立好所有的文档吧。当然jquery你下载就可以了。
接下来,我们将建立数据库:
1 | create database receipts; #创建数据库 |
然后我们来书写我们所需要的login.jade。这里使用jade,我们需要创建一个简单的layout.jade(模板),在layout模板中我们将定义最基本的网页框架。设定大多数网页相同的部分。这里关于jade的语法我就不多讲了,jade的官网上很详细,直接给出layout的代码:
1 | !!! 5 |
注意,由于jade会对我们所写的代码进行重新编码,编码成linux的相关格式,这里建议大家使用类似notepad++、ultra editor等软件时将其编码为UTF-8 无DOM格式,并且请不要在文件中同时使用空格和Tab对文件分隔,会导致报错。这里强调一下比如上述 title=title,这里是把网页的标题赋值给一个变量叫做title,之后我们声明并赋值title。link后面不能添加空格。类似的也一样。
下面是我们的登录界面login.jade,代码如下:
1 | form(id='login',method='post',action='/login') |
大致是定义一个完整的表单。并且定义一个显示提示错误信息的地方。当然还有最重要的css代码。我将在后面提供源码给大家下载。
home.jade和index.jade这个程序里面我们用不到,因此内容可以不管它。
接下来,我们就开始写代码了。当然是使用express了。首先我们将写两个路由器在app.js中,一个是显示登录的页面并且作为首页,另外一个是验证登录的页面。
//首先添加配置信息
1 | app.set('view engine','jade'); //设置模板引擎 |
1 | style="padding-left: 30px;" |
//获取表单中数据
var user = req.body.username; //这样便可以获取到form表单中 name=”username”值,依赖于express.bodyParser()
创建mysql数据库连接。这里我们将做一个小小的封装。将封装的函数写入 user.js
1 | //连接mysql服务器 |
//接下来我们将从数据库获取数据,同样我们也做一个封装。因为要执行数据库操作。因此我们需要传入一个数据库连接对象client,并且传入用户名,以便查出该用户对应的密码。再则我们需要创建一个回调函数以便于,在获取到数据库中的值后,做出相关判断。按照常规长发很难获取值。应该闭包可以。(这个回调函数得感谢一个群里的大牛。),代码如下。
1 | //执行mysql查询操作。返回查询获取到的对象 |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
1 | style="padding-left: 30px;" |
从我自己现在学校node.js说了解的情况,我觉得node.js至少比Java简单不少。使用node.js的诸多第三方框架更是让node.js简单了不少。其实express 框架几天前我就看了一些。也写了一些例子。虽然没有完全掌握,但是我想在这里和大家一起分享我学到的知识,也算是一种记录。
首先,当然我们也得安装express 的module
1 | npm install express |
接下来我们就是可以开始写一个简单的程序了。
1 | var express = require('express'); //导入module |
运行程序,然后再浏览器中输入localhost:4000试试,是不是出现了hello world了。当然这只是一个最简单的程序。下面我们可以再多做一些。
这里需要说明一下。默认的,系统将在您的请求处理中,在此例里面即在app.get();里面为你添加下面两句话
1 | res.charset='utf-8'; //系统默认的res.send()和res.render()都默认采用utf-8编码 |
接下来,我们将通过链接中的地址获取请求内容
在程序中加入一段代码如下
1 | app.get('/hello/:name',function (req,res){ |
试试看看吧。成功了吧!
对不起,写着写着觉得很别扭。今天就写到这里吧。下次在继续吧。
10月27日更新,可以发送附件
今天晚上花了点时间试了一下使用node.js发送电子邮件,也挺简单的,不过有个问题一直没有解决,就是发送附件,我弄明白的时候,会补充资料的。
首先我们还是得安装node的第三方用户发送email的module 。
1 | npm install nodemailer |
安装好之后,还有一个问题需要注意,我们应该确保用来发送邮件的邮箱地址是打开只是IMAP 、SMTP功能的,这样才可以发送邮件成功。
接下来我们就开始写代码,其实很简单,官方网站也都已经说得很清楚了。
1 | var mail = require('nodemailer'); //包含发送邮件所需module |
这里我没有使用SSL进行发送,而且发送的是纯文本,也可以发送html,如果发送html则在send_mail函数里面加上:
1 | html: ' 你好。。邮件来自node.js', |
如果使用SSL进行发送我们则需要将mail.SMTP改为:
1 | mail.SMTP = { |
好了。现在你运行程序试试,是不是成功了。
我今天晚上遇到一个错误 :503 ERROR,need EHLO and AUTH first。就是因为没有添加use_authentication = true的缘故。加上之后,搞定。
———————————————————分割线———————-
发送附件的话。首先我们得使用
1 | var fs = require('fs'); //导入文件系统相关的包 |
饭后我们将文件读入内存,并将其发送。
1 | //读入文件 |
接下来我们需要在send_mail函数中加入发送附件即可
1 | mail.send_mail( |
附上Nodemailer的网址:http://www.nodemailer.org/
enjoy it!
最后还是感谢 andris9 大叔很快帮我解决了问题!
Javascript连接数据库可能很多同学之前都没有想到吧,不过现在使用node.js我们可以很容易地连接各种数据库。比如传统关系型数据库Mysql以及现在正火的非关系型数据库。这里讲一下如何连接mysql数据库其实官方的文档以及很详细了。
首先我们需要连接mysql所需的Module
1 | npm install mysql |
接下来就可以开始编程,连接数据库了。
1 | var mysql = require('mysql');//导入mysql Module |
这里我们使用的是client.query();执行sql语句,官方的API中client.query(sql,[params,cb])方法中还可以添加回调函数。
执行其他SQL语句也是使用client.query()函数。这里说一下插入语句
1 | client.query('insert into node_t values(?,?)',[1000,'Junv'] ); |
推荐这种参数化插入,而不是将值直接写在里面,可以防止sql注入。
注意:今天下午我最初尝试连接数据库的时候,它一直报错“Domain name not found”,只要我们加上
1 | client.host ='127.0.0.1'; |
将系统默认的host=localhost改成127.0.0.1即可。具体原因不明。
是不是很简单呢?接下来我会写关于express 和jade的博客了。一边学习一边写博客。哈哈。
学习Node.js当然安装其他开发者开发的各种各样的包一定是必须的,不知道在内地的童鞋发现一个问题没有,我们现在很难从npm.js直接去下载安装包了。笔者在电信和教育网连续试了几天都没有成功。
大概介绍一下npm.js吧。npm.js是node.js的一个包管理工具。通过你可以很方便的安装所有node.js的第三方包、类库,而不需要知道他们的地址、不需要再自己一次一次手动安装。
过程是这样的:(注:笔者只是在windows环境下测试过)
一般地我们会在cygwin里面使用” npm install 你需安装的包名”进行安装。但是我反反复复试过多次,均是很难成功,只有昨天夜里一点左右成功过一次。最初我认为我我们的网速太慢了,于是我在cygwin下面配置代理:
export http_proxy=http://127.0.0.1:8087 注:我使用的是go agent进行代理(具体安装请google一下)。
通过代理我成功地安装成功了npm 本身,但是当我转而通过 npm install …进行安装的时候就出现错误了,npm提示 Socket hang up。具体原因不明,总之npm 不能使用cygwin里面配置的代理,于是我使用 export -n http_proxy 删除代理设置。
随后我在网上又收到了另外一个解决方法。在npm里面设置打理
npm –proxy http://127.0.0.1:8087
不过设置好之后使用 npm install …,发现同样不成成功,npm 根本没有通过代理去发请求。
最后,我找到一个神器npmf。它的大致介绍是说npmf 是npm的一个复制,他可以永久保存那些包的每个版本。并且你通过npmf安装的包在你下次部署软件的时候依然可用。老实说后面一句话,我没有理解明白,到底是本地缓存,还是在网上缓存。
各位可以前往npmf网站一看究竟:http://npmfjs.org/
同时还有一个介绍npmf的网页:http://nodeknockout.com/teams/preservation-society
接下来就是见证奇迹的时刻了:
我们可以直接把npm 默认的registry 换成 npmf的:
npm config set registry http://npmfjs.org:9000
npm install 你需要安装的包
是不是发现很神奇,一个包可能10秒甚至更少就可以安装成功。如果你想把registry改成npm默认的
npm config set registry http://registry.npmjs.org
或者你可以临时使用npmf的registry的包,在你每次安装的包的时候都使用一下语句
npm –registry http://npmfjs.org:9000 install 你需要安装的包
告诉你们个秘密:通过上面的两种方法,可以使用代理哦。速度又提高了不少。哈哈。。。。。
总结:造成npmjs.org的速度很慢的原因我始终不太清楚。我想npmjs.org的网络应该比npmfjs.org好很多才对。怎么会反过来了。以前我在有人抱怨过说内地使用 npm安装包很难。但是我不知道这是个别现象还是大家都是这个样子。难道G*F*W故意把 registry.npmjs.org和谐了?哎,不管了,大家使用我这个方法来吧。欢迎各位留言
虽然平时也一直在使用Notepad++,但是并没有深入地了解它,没有去鼓捣它。今天中午看了一篇博文说另外一个文本编辑器多么多么强大。我下载使用了一下,发现里面比较好的功能就是函数花括号自动完成、可以更换主题、支持分屏、可以安装插件同时查看几个文件,不过有一点不好就是他是收费软件。于是我想,开源的notepad++是不是也有那些功能呢?在我搜索一番之后,于是就发现了notepad的惊天大秘密。
主题设置
依次点击面板上的settings——style configurator。系统默认提供十几种不同的风格,可供选择。用户还可以为不同的编程语言设置个性化的前、后景色,设置字体大小、种类。我个人使用的主题是Black Board.
分屏实现
据我发现目前notepad++没有快捷键可以开启分屏,而是用户右键点击某个打开的文档列表的Tab。选择Move to other view 或者 Copy to other view,即可以移动或者复制到分屏。此时屏幕编程两屏界面(好像notepad++目前只支持两屏)
字体的放缩
当光标在目前程序时,按住Ctrl键同时,滚动鼠标滚轮即可实现字体的大小改变。
函数自动补充
依次点击Settings—-preferences—Back up/Auto completion。勾选enable auto-completion on each input.下面有function completion 和word completion可供选择。
同样也可以勾选Function parameter hint on input。这个是函数暗示吧。需要注意的是,我发现在javascript 和html 下提示相对较好,但是都不会补充完全,都是部分补充。笔者在Java下面测试,大致只能提示类一级,不能提示其二级方法。如果你想拥有很好的提示还是使用eclipse吧。
插件安装:
notepad++支持两种方式安装插件(plugin):第一种,将插件的.dll文件复制到notepad++安装目录的plugin目录下。第二种方法是通过notepad++自带的插件plugin management 进行安装。点击即可实现自动安装插件。安装完成后重启即可工作。
这里推荐一些比较好的插件列表:http://my.oschina.net/hcom/blog/4429
Notepad++官方下载:http://notepad-plus-plus.org/
我也是今天才发现notepad的这些功能,希望可以和大家一起交流、讨论。
这学期在学习Java EE,也是我选择的方向。因此很感兴趣。前几天看了Struts2 实现国际化,于是今天下午便真实操作一遍。
首先我们要实现国际化,当然得建立相关语言的**.properties**文件。且该文件需放在classes目录下。即是eclipse的src的根目录。
struts2的命名规则是 “自定义名_语言_国别(英文字母为大写).properties”
比如:
中文简体:test_zh_CN.properties
美国英文:test_en_US.properties
其他国家的,请大家自己在网上搜索一下吧。
.properties 文件的内容形式为key=value
比如:
中文: username=用户名(这里中文要被转码为另外一种格式,才能使用。转换后为: u7528u6237u540D,eclise会自动帮你转换)
英文:username=username
写好properties文件之后。我们就需要修改struts.xml文件让其支持国际化属性,在struts标签下添加:
这里的value属性的值“test”为你的properties文件的最前面的自定义名。
然后再使用的时候,比如我想获取username的国际化属性:
<s:text name=”username” >或者 <s:property value=”getText(‘username’)”/> 均可以
当然还有另外一种方法不需要在struts.xml添加语句。在jsp需要使用国际化资源的时候,添加如下:
<s:i18n name=”test”>
<s:text name=”username” > 或者<s:property value=”getText(‘username’)”/>
这里的name标签的test和上面的一样。需要注意的是。你每使用一次国际化资源就需要添加一个<s:i18n>标签。
其他的使用就和一般的struts没有区别了。
然后我们可能需要手动切换语言,在jsp页面里面添加:
1 |
1 |
1 |
好累!好累!
我哪里错了嘛,就因为我说了一句话不太该说的话!
然后你就拂袖而去,纵使我再三挽留你,你却越来越凶,每次你这个样子,我真的不晓得应该怎么办!
我可以怎么办嘛?
我有这样凶过吗?在你面前,我不晓得脾气好了好多倍
你个性却却越来越不好。一摸到就生气,我每次都是在第一时间给你道歉,告诉你我错了。我不该这样做,但是不晓得你想过没有,难道真的每次错的都是我吗,我有那样吼过你吗?
我不是怕你,是因为我爱你,所以我在忍!我愿意接受这一切。但是你不能每次都这样啊。
好累,好烦。不晓得应该从哪里和你沟通,
今天明明不是因为我们的问题,你却说我偏向你寝室的同学,说我偏向漂亮的女生。
真的,大部分关于他们的印象我是从你那里得到的啊。我不喜欢太要强的女生,有啥子了不起嘛。我见多了。
你每次都说我是做错了不愿意道歉。但是你又晓得,很多次我真的觉得我没得错,但是我又在道歉。
在你面前我永远都是错的。
在你们寝室面前,我永远都是被最后考虑的。呼之即来挥之即去。。。。
你理解我一下嘛。你怎么就不理解人呢!
没人理解我,好累。好累!
这几天学校正在搞奖学金的评比,需要每个同学自己对自己的情况进行评估,你在上一学年所获得的将和其他证书这些都是获得加分,当然学习成绩也是分数中很重要的一部分。于是情况出现了。
能够得奖的人为了得更高的将,千方百计地去找分加,同时还要看看其他人是不是快要超过他了。其他人加分是不是正规的,其他人是不是在到处找关系盖章?
真他妈的恶心,在这个奖学金评比之中我看到了谄媚、欺诈、鬼鬼祟祟,说人家加分这样或者那样的不正常。
哎!真的是,钱让小人原形毕露了。
想想去年我也不是这个样子啊。看看有些人,把所有能够加的分都加到最高!你妹啊!
一个奖学金也是,得奖的人都是妈的一群水货,什么都不会,就是会考试、会讨好老师、会拍马屁、会装疯卖傻!
你们就潇洒吧!我又一次明白了,千里之堤,溃于蚁穴!