Java 模板引擎简介
Velocity
基本语法
- ”#”用来标识Velocity的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等,如:
#if($info.images)
<img src="$info.images">
#else
<img src="noPhoto.jpg">
#end- ”$”用来标识一个变量,如
$i
$msg.errorNum- ”!”用来强制把不存在的变量显示为空白
$!msg- 注释,如:
## 这是一行注释,不会输出
#* xxxx
多行注释
xxxx *#具体语法可参考[官网] (http://velocity.apache.org/engine/devel/user-guide.html)
语法详解
- 变量赋值输出
Welcome $name to halo9pan.cn!
today is $date.
tdday is $mydae.//未被定义的变量将当成字符串- 设置变量值,所有变量都以$开头
#set( $iAmVariable = "good!" )
Welcome $name to halo9pan.cn!
today is $date.
$iAmVariable- if,else判断
#set ($admin = "admin")
#set ($user = "user")
#if ($admin == $user)
Welcome admin!
#else
Welcome user!
#end- 迭代数据List ($velocityCount为列举序号,默认从1开始)
#foreach( $product in $allProducts )
<li>$velocityCount $product.title</li>
#end- 迭代数据get key
#foreach($key in $myProducts.keySet() )
$key `s value: $myProducts.get($key)
#end- 导入其它文件,可输入多个
#parse("vm_a.vm")
#parse("vm_b.vm")- 简单遍历多个div
#foreach( $i in [1,2,3,4] )
<div>$i</div>
#end- 双引号与单引号
#set ($var="helo")
test"$var" 返回testhello
test'$var' 返回test'$var'可以通过设置 stringliterals.interpolate=false改变默认处理方式
- Range
#foreach( $foo in [1..5] )- 定义宏macros,相当于函数
#macro( d )
<tr><td></td></tr>
#end
调用
#d() - 带参数的宏
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#endFreemarker
基础语法
- 变量
data = {
"user": "halo9pan"
}- 模板
<h1>Hello ${user}</h1>- 字符串链接
${"Hello,${user}!"}
${"Hello,"+user+"!"};${..}只能用于文本部分,下面的代码是错误的:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>应该写成:
<#if isBig>Wow!</#if>具体语法可参考[官网] (http://freemarker.incubator.apache.org/docs/index.html)
内建函数
- html:对字符串进行HTML编码
- cap_first:将字符串第一个字母成大写
- lower_case:将字符串转换成小写
- upper_case:将字符串转换成大写
- trim: 去掉字符串前后的空白字符
- size: 获得序列中元素的数目
- int 取得数字的整数部分
指令
- if
data = {
"user": "halo9pan",
"isNewGuys": true
}<h1><#if user == "halo9pan">Your are hero.</#if></h1>
<p>
<#if isNewGuys>
new guys!
<#else>
old
</#if>
</p>- list
data = [
{
"user": "halo9pan",
"gender": "male"
},
{
"user": "panhao",
"gender": "male"
}
]<ul>
<#list data as item
<li>name:${item.user};Gender:${item.gender}</li>
</#list>
</ul>- include
<#include "/xxx.html">- 空值的处理
<h1>Welcome ${user!"default"}!</h1>如果user不存在或者为null,最后模板会输出 default这个值
反之,输出user的真实值!
<#if user??><h1>hello ${user}</h1></#if>如果,user 存在则输出包括的内容!
反之,则忽略整条模板内容!
MySQL 简介
安装
初始化
my.cnf/my.ini
[client]
user = root
password = XXXXXXXX
port = 11806
socket = F:/Eris/mysql/socket
default-character-set = utf8
# The MySQL server
[mysqld]
basedir = F:/Luna/mysql/
datadir = F:/Eris/mysql/data
port = 11806
socket = F:/Eris/mariadb/socket
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
skip-external-locking
character-set-server = utf8
collation-server = utf8_unicode_ci
lower_case_table_names = 1
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id = 1
# Uncomment the following if you want to log updates
#log-bin=mysql-bin
# binary logging format - mixed recommended
#binlog_format=mixed
# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = F:/Eris/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = F:/Eris/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
# innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set = utf8初始化root密码
mysqladmin -u root -p flush-privileges password "new_pwd"
mysqladmin -u root -p flush-privileges password执行SQL
mysql -u root -p -e ""更新root密码
SELECT User,Host FROM mysql.user;
SET PASSWORD FOR 'root'@'127.0.0.1' PASSWORD('new_pwd');
SET PASSWORD FOR 'root'@'localhost' PASSWORD('new_pwd');root本地登录、移除匿名用户
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'%';
DROP USER ''@'localhost';创建用户
GRANT USAGE ON *.*
TO 'hello'@'localhost'
IDENTIFIED BY 'pass9USE';
GRANT SELECT ON *.* TO 'hello'@'localhost';
SHOW GRANTS FOR 'hello'@'localhost' \g
GRANT ALL ON *.* TO 'hello'@'localhost';常用命令
SHOW DATABASES;CREATE TABLE test.hello (hello_id INT, word TEXT);
SHOW TABLES FROM test;
USE test;
SHOW TABLES;
DESCRIBE hello;INSERT INTO hello VALUES(100, 'World');
INSERT INTO hello VALUES(101, 'Welt');
INSERT INTO hello VALUES(102, 'Monde');
--INSERT INTO hello VALUES(101, '世界');SOURCE ???.sql数据库创建
CREATE DATABASE hello;
DROP DATABASE hello;
CREATE DATABASE hello
CHARACTER SET utf8
COLLATE utf8_unicode_ci;创建表
CREATE TABLE guest (
id INT AUTO_INCREMENT PRIMARY KEY,
nick_name CHAR(64) UNIQUE,
visit_time INT);
DESCRIBE guest;
SHOW CREATE TABLE guest \gCREATE TABLE vocabulary (
id BIGINT DEFAULT 0,
word CHAR(16) UNIQUE,
emotion_joy SMALLINT DEFAULT 0,
emotion_sad SMALLINT DEFAULT 0,
emotion_anger SMALLINT DEFAULT 0,
emotion_fear SMALLINT DEFAULT 0,
emotion_trust SMALLINT DEFAULT 0,
emotion_suspect SMALLINT DEFAULT 0,
emotion_expect SMALLINT DEFAULT 0,
emotion_surprised SMALLINT DEFAULT 0,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
DESCRIBE vocabulary;
SHOW CREATE TABLE vocabulary \gCREATE TABLE guest_isam (
id INT AUTO_INCREMENT PRIMARY KEY,
nick_name CHAR(64) UNIQUE,
visit_time INT NOT NULL DEFAULT 0
) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci;SHOW FULL COLUMNS
FROM guest LIKE 'nick' \g备份数据
mysqldump --user='hello' -p hello guest > hello-guest.sql
mysqldump --user='hello' -p hello > hello.sqlmysqldump --single-transaction --user='hello' -p hello > hello.sql还原数据
mysql --user='hello' -p hello guest < hello-guest.sql
mysql --user='hello' -p hello < hello.sql修改表
ALTER TABLE guest
ADD COLUMN description TEXT;
DESCRIBE guest;
ALTER TABLE vocabulary
ADD COLUMN description VARCHAR(255);
DESCRIBE vocabulary;CREATE TABLE guest_like LIKE guest;
DESCRIBE guest_like;
INSERT INTO guest_like
SELECT * FROM guest;
SELECT * FROM guest_like;
DROP TABLE guest_like;
CREATE TABLE guest_create
SELECT * FROM guest;
DESCRIBE guest_create;
SELECT * FROM guest_create;
DROP TABLE guest_create;ALTER TABLE guest
DROP COLUMN description;
DESCRIBE guest;ALTER TABLE guest
ADD COLUMN nick_type CHAR(2) AFTER nick_name;
DESCRIBE guest;ALTER TABLE guest
CHANGE COLUMN nick_type nick_type CHAR(4);
DESCRIBE guest;ALTER TABLE guest
MODIFY COLUMN nick_type
ENUM('Auto','Manual')
AFTER nick_name;
DESCRIBE guest;UPDATE guest SET visit_time=0 WHERE visit_time IS NULL;
ALTER TABLE guest MODIFY COLUMN visit_time INT NOT NULL DEFAULT 0;
DESCRIBE guest;ALTER TABLE guest
AUTO_INCREMENT = 100;
INSERT INTO guest (nick_name, visit_time)
VALUES ('Garnett', 1),
('Messi', 3);
INSERT INTO guest (nick_name)
VALUES ('Ronaldo ');
SELECT * FROM guest;数据操作
插入数据
INSERT INTO guest (nick_name)
VALUES ('Ada'),
('David'),
('Robbie');
INSERT INTO guest (nick_name, visit_time)
VALUES ('Johnson', 1),
('John', 0),
('James', 0);
SELECT * FROM guest;CREATE TABLE guest_new LIKE guest;
DESCRIBE guest_new;
ALTER TABLE guest_new
ADD COLUMN nick_name_new VARCHAR(127);
INSERT IGNORE INTO guest_new
(nick_name, nick_name_new, visit_time)
SELECT nick_name, nick_name, visit_time FROM guest;
SELECT * FROM guest_new;REPLACE INTO guest (nick_name)
VALUES ('Ada'),
('David'),
('Robbie');
REPLACE INTO guest (nick_name, visit_time)
VALUES ('Johnson', 101),
('John', 100),
('James', 100);
REPLACE INTO guest (nick_name, nick_type)
VALUES ('Ada', 1),
('David', 1),
('Robbie',1 );
SELECT * FROM guest;INSERT LOW_PRIORITY INTO guest (nick_name)
VALUES ('Aaric'),
('Aart'),
('Abbeygail');
-- INSERT DELAYED INTO guest (nick_name)
-- VALUES ('Abbot'), ('Abbott'), ('Abeodan');
INSERT INTO guest (nick_name) VALUES ('Aaric')
ON DUPLICATE KEY UPDATE nick_name = CONCAT('!', nick_name);
SELECT * FROM guest;
DELETE FROM guest WHERE nick_name LIKE '!%';
SELECT * FROM guest;ALTER TABLE guest
ADD COLUMN nick_name_used SMALLINT NOT NULL DEFAULT 1;
DESCRIBE guest;
INSERT INTO guest (nick_name) VALUES ('Aaric')
ON DUPLICATE KEY UPDATE nick_name_used = nick_name_used + 1;
SELECT * FROM guest;查询数据
SELECT * FROM guest;
SELECT * FROM guest WHERE visit_time=1;
SELECT * FROM guest WHERE visit_time IN (1, 100);
SELECT * FROM guest WHERE nick_name LIKE 'A%';
SELECT * FROM guest WHERE nick_name REGEXP 'i|o';
SELECT * FROM guest WHERE nick_name NOT REGEXP 'i|o';
SELECT * FROM guest WHERE visit_time=1 AND nick_name LIKE 'A%';
SELECT * FROM guest WHERE visit_time=1 OR nick_name LIKE 'A%';
SELECT * FROM guest ORDER BY visit_time;
SELECT * FROM guest WHERE visit_time>=1 ORDER BY visit_time LIMIT 5;
SELECT * FROM guest WHERE visit_time>=1 ORDER BY visit_time DESC LIMIT 2;
SELECT COUNT(*) FROM guest;
SELECT * FROM guest GROUP BY visit_time;
SELECT nick_name, visit_time FROM guest;
SELECT nick_name AS 'Nick Name', visit_time AS 'Visit Times' FROM guest;
SELECT visit_time AS 'Visit Times',
COUNT(*) AS 'Number'
FROM guest
GROUP BY visit_time;更新数据
SELECT * FROM guest;
UPDATE guest
SET visit_time = 10
WHERE nick_name_used > 1;
SELECT * FROM guest;删除数据
SELECT * FROM guest;
DELETE FROM guest
WHERE visit_time = 0
AND nick_name_used = 1;
SELECT * FROM guest;联合查询
Backbone 简介
Model
Collection
Event
View
Router
Hibernate 简介
Christian Bauer
Gavin King
实体、映射
配置
SessionFactory 和Session
事务(Transactions)
表(Tables)
关联映射
- 一对一
- 一对多
- 多对多
- 组合
jQuery 简介
jQuery 使用场景
DOM Traversal and Manipulation
Get the <button> element with the class ‘continue’ and change its HTML to ‘Next Step…’
$( "button.continue" ).html( "Next Step..." )Event Handling
Show the #banner-message element that is hidden with display:none in its CSS when any button in #button-container is clicked.
var hiddenBox = $( "#banner-message" );
$( "#button-container button" ).on( "click", function( event ) {
hiddenBox.show();
});Ajax
Call a local script on the server /api/getWeather with the query parameter zipcode=97201 and replace the element #weather-temp’s html with the returned text.
$.ajax({
url: "/api/getWeather",
data: {
zipcode: 97201
},
success: function( data ) {
$( "#weather-temp" ).html( "<strong>" + data + "</strong> degrees" );
}
});CSS 选择器
| 选择器 | 例子 | 例子描述 | CSS |
|---|---|---|---|
| .class | .intro | 选择 class=”intro” 的所有元素 | 1 |
| #id | #firstname | 选择 id=”firstname” 的所有元素 | 1 |
| * | * | 选择所有元素 | 2 |
| element | p | 选择所有 <p> 元素 | 1 |
| element,element | div,p | 选择所有 <div> 元素和所有 <p> 元素 | 1 |
| element element | div p | 选择 <div> 元素内部的所有 <p> 元素 | 1 |
| element>element | div>p | 选择父元素为 <div> 元素的所有 <p> 元素 | 2 |
| element+element | div+p | 选择紧接在 <div> 元素之后的所有 <p> 元素 | 2 |
| [attribute] | [target] | 选择带有 target 属性所有元素 | 2 |
| [attribute=value] | [target=_blank] | 选择 target=”_blank” 的所有元素 | 2 |
| [attribute~=value] | [title~=flower] | 选择 title 属性包含单词 “flower” 的所有元素 | 2 |
| [attr|=value] | [lang|=en] | 选择 lang 属性值以 “en” 开头的所有元素 | 2 |
| :link | a:link | 选择所有未被访问的链接 | 1 |
| :visited | a:visited | 选择所有已被访问的链接 | 1 |
| :active | a:active | 选择活动链接 | 1 |
| :hover | a:hover | 选择鼠标指针位于其上的链接 | 1 |
| :focus | input:focus | 选择获得焦点的 input 元素 | 2 |
| :first-letter | p:first-letter | 选择每个 <p> 元素的首字母 | 1 |
| :first-line | p:first-line | 选择每个 <p> 元素的首行 | 1 |
| :first-child | p:first-child | 选择属于父元素的第一个子元素的每个 <p> 元素 | 2 |
| :before | p:before | 在每个 <p> 元素的内容之前插入内容 | 2 |
| :after | p:after | 在每个 <p> 元素的内容之后插入内容 | 2 |
| :lang(language) | p:lang(it) | 选择带有以 it 开头的 lang 属性值的每个 <p> 元素 | 2 |
| element1~element2 | p~ul | 选择前面有 <p> 元素的每个 <ul> 元素 | 3 |
| [attribute^=value] | a[src^=”https”] | 选择其 src 属性值以 “https” 开头的每个 <a> 元素 | 3 |
| [attribute$=value] | a[src$=”.pdf”] | 选择其 src 属性以 “.pdf” 结尾的所有 <a> 元素 | 3 |
| [attribute*=value] | a[src*=”abc”] | 选择其 src 属性中包含 “abc” 子串的每个 <a> 元素 | 3 |
| :first-of-type | p:first-of-type | 选择属于其父元素的首个 <p> 元素的每个 <p> 元素 | 3 |
| :last-of-type | p:last-of-type | 选择属于其父元素的最后 <p> 元素的每个 <p> 元素 | 3 |
| :only-of-type | p:only-of-type | 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素 | 3 |
| :only-child | p:only-child | 选择属于其父元素的唯一子元素的每个 <p> 元素 | 3 |
| :nth-child(n) | p:nth-child(2) | 选择属于其父元素的第二个子元素的每个 <p> 元素 | 3 |
| :nth-last-child(n) | p:nth-last-child(2) | 同上,从最后一个子元素开始计数 | 3 |
| :nth-of-type(n) | p:nth-of-type(2) | 选择属于其父元素第二个 <p> 元素的每个 <p> 元素 | 3 |
| :nth-last-of-type(n) | p:nth-last-of-type(2) | 同上,但是从最后一个子元素开始计数 | 3 |
| :last-child | p:last-child | 选择属于其父元素最后一个子元素每个 <p> 元素 | 3 |
| :root | :root | 选择文档的根元素 | 3 |
| :empty | p:empty | 选择没有子元素的每个 <p> 元素(包括文本节点) | 3 |
| :target | #news:target | 选择当前活动的 #news 元素 | 3 |
| :enabled | input:enabled | 选择每个启用的 <input> 元素 | 3 |
| :disabled | input:disabled | 选择每个禁用的 <input> 元素 | 3 |
| :checked | input:checked | 选择每个被选中的 <input> 元素 | 3 |
| :not(selector) | :not(p) | 选择非 <p> 元素的每个元素 | 3 |
| ::selection | ::selection | 选择被用户选取的元素部分 | 3 |
console.group("jQuery");
var allArticles = $('article[id^="post"]')
allArticles.each(function(index, article){
var content = $('header>h1>a', article).text().trim();
var href = $('header>h1>a', article).attr("href");
console.log("[%s](%s) ", content, href);
});
console.groupEnd();jQuery 选择器
Category: Selectors
[All Selector (“*”)](//api.jquery.com/all-selector/)
:animated Selector
Attribute Contains Prefix Selector [name|=”value”]
Attribute Contains Selector [name*=”value”]
Attribute Contains Word Selector [name~=”value”]
Attribute Ends With Selector [name$=”value”]
Attribute Equals Selector [name=”value”]
Attribute Not Equal Selector [name!=”value”]
Attribute Starts With Selector [name^=”value”]
:button Selector
:checkbox Selector
:checked Selector
Child Selector (“parent > child”)
Class Selector (“.class”)
:contains() Selector
Descendant Selector (“ancestor descendant”)
:disabled Selector
Element Selector (“element”)
:empty Selector
:enabled Selector
:eq() Selector
:even Selector
:file Selector
:first-child Selector
:first-of-type Selector
:first Selector
:focus Selector
:gt() Selector
Has Attribute Selector [name]
:has() Selector
:header Selector
:hidden Selector
ID Selector (“#id”)
:image Selector
:input Selector
:lang() Selector
:last-child Selector
:last-of-type Selector
:last Selector
:lt() Selector
Multiple Attribute Selector [name=”value”][name2=”value2″]
Multiple Selector (“selector1, selector2, selectorN”)
Next Adjacent Selector (“prev + next”)
Next Siblings Selector (“prev ~ siblings”)
:not() Selector
:nth-child() Selector
:nth-last-child() Selector
:nth-last-of-type() Selector
:nth-of-type() Selector
:odd Selector
:only-child Selector
:only-of-type Selector
:parent Selector
:password Selector
:radio Selector
:reset Selector
:root Selector
:selected Selector
:submit Selector
:target Selector
:text Selector
:visible Selector
jQuery 事件
.bind()
.blur()
.change()
.click()
.dblclick()
.delegate()
.die()
.error()
event.currentTarget
event.data
event.delegateTarget
event.isDefaultPrevented()
event.isImmediatePropagationStopped()
event.isPropagationStopped()
event.metaKey
event.namespace
event.pageX
event.pageY
event.preventDefault()
event.relatedTarget
event.result
event.stopImmediatePropagation()
event.stopPropagation()
event.target
event.timeStamp
event.type
event.which
.focus()
.focusin()
.focusout()
.hover()
jQuery.proxy()
.keydown()
.keypress()
.keyup()
.live()
.load()
.mousedown()
.mouseenter()
.mouseleave()
.mousemove()
.mouseout()
.mouseover()
.mouseup()
.off()
.on()
.one()
.ready()
.resize()
.scroll()
.select()
.submit()
.toggle()
.trigger()
.triggerHandler()
.unbind()
.undelegate()
.unload()
Ajax 请求
.ajaxComplete()
.ajaxError()
.ajaxSend()
.ajaxStart()
.ajaxStop()
.ajaxSuccess()
jQuery.ajax()
jQuery.ajaxPrefilter()
jQuery.ajaxSetup()
jQuery.ajaxTransport()
jQuery.get()
jQuery.getJSON()
jQuery.getScript()
jQuery.param()
jQuery.post()
.load()
.serialize()
.serializeArray()