Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hel-developer-guide
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chenhao
hel-developer-guide
Commits
8af1ef6d
Commit
8af1ef6d
authored
Aug 05, 2017
by
custom
Browse files
Options
Browse Files
Download
Plain Diff
Merge origin/master into master
parents
d13519f4
4e445dbf
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
409 additions
and
19 deletions
+409
-19
codeStyle.md
codeStyle.md
+3
-3
project-create.md
project-create.md
+63
-16
头行保存.md
前端组件/头行保存.md
+188
-0
database-config.md
后端开发/database-config.md
+62
-0
database-init.md
后端开发/database-init.md
+92
-0
融租易开发手册.md
融租易开发手册.md
+1
-0
No files found.
codeStyle.md
View file @
8af1ef6d
...
@@ -67,9 +67,9 @@ if(user.getStatus() == EXPIRED_USER_STATUS){
...
@@ -67,9 +67,9 @@ if(user.getStatus() == EXPIRED_USER_STATUS){
-
**HlsClassName**
-
**HlsClassName**
-
**HlsNormalClass**
-
**HlsNormalClass**
2.
数据库实体类一般与数据表名称相同并改为Pascal命名规则,
以
**DTO**
结尾,
如:
2.
数据库实体类一般与数据表名称相同并改为Pascal命名规则,如:
-
**SysUser
DTO
**
-
**SysUser**
-
**SysRole
DTO
**
-
**SysRole**
3.
抽象类命名使用
**Abstract**
开头,接口一般以
**I**
开头,Mybatis的mapper对象可不用
**I**
开头但必须使用
**Mapper**
结尾,如:
3.
抽象类命名使用
**Abstract**
开头,接口一般以
**I**
开头,Mybatis的mapper对象可不用
**I**
开头但必须使用
**Mapper**
结尾,如:
-
**AbstractClass**
-
**AbstractClass**
...
...
project-create.md
View file @
8af1ef6d
...
@@ -2,18 +2,69 @@
...
@@ -2,18 +2,69 @@
本章节将引导您从零开始,创建一个可以运行的 Demo 工程。此工程基于HEL融租易标准版,包含一个 demo 实例。
本章节将引导您从零开始,创建一个可以运行的 Demo 工程。此工程基于HEL融租易标准版,包含一个 demo 实例。
## 后端项目
## 开发工具准备
-
JDK 1.8 及以上
-
IntelliJ IDEA 或 Eclipse
### 确定项目信息
-
Git
-
redis 3.0 及以上
-
maven 3.3 及以上
-
Tomcat 7+ (
**不支持 Tomcat 6**
)
-
数据库(任选)
-
Mysql server 5.6 及以上
-
SqlServer 2012 及以上
-
Oracle 9 以上
-
Navicat Premium(或其他)
### 软件安装
#### Java 安装
1.
在
[
Oracle 官网
](
https://nodejs.orghttp://www.oracle.com/technetwork/cn/java/javase/downloads/index.html
)
下载对应平台的 JDK 1.8 以上的环境。
2.
本地执行安装文件,安装 JDK 环境。
3.
Win 在环境变量系统变量中 path 配置 JDK 的环境变量指向 JDK 安装目录下
` JDK/bin `
。
4.
配置完成后打开 cmd 执行
` javac `
,有提示则说明环境安装成功。
> eclipse 中 JRE 的配置需要指定 JDK 目录,不能是 JRE。(maven 需要 JDK)
#### Git 安装
1.
在
[
Git 官网
](
https://git-scm.com/download/
)
下载对应平台的 Git。
2.
本地执行安装文件, 安装 Git 环境。
3.
Win 在环境变量中系统变量的 path 配置 Git 的环境变量指向 Git 安装目录下的
` /bin `
。
4.
配置完成后打开 cmd 执行
` git `
,有提示则说明环境安装成功。
[
Git简明教程
](
git_guide.md
)
> 对于 Windows,安装 Git 以后,你可以在任意目录右键,`Git Bash Here`
> 打开的 MINGW 命令窗口可以执行 **兼容 linux 系统** 的命令,如`rm`,`ls` 等
#### Maven 安装
1.
在
[
Maven 官网
](
http://mirror.bit.edu.cn/apache/maven/
)
下载对应平台的合适的 maven 版本的压缩包。
2.
本地解压压缩包。
3.
Win 在环境变量中系统变量的 path 配置 maven 的环境变量指向 maven 解压目录下的
` /bin `
。
4.
配置完成后打开 cmd 执行
` mvn -v `
,有提示则说明环境安装成功。
#### Redis 安装
1.
在
[
Redis win 官网
](
https://github.com/MSOpenTech/redis/releases
)
下载最新的 redis 版本的压缩包。
2.
本地解压压缩包。
3.
Win 在解压目录下打开 cmd 执行
` redis-server.exe redis.windows.conf `
,有提示则说明 Redis 已经启动。
4.
Win 平台下如果启动失败,修改 redis.windows.conf 文件中的 maxheap 为
` maxheap 1024000000 `
。
**注:**
开发需要依赖 Redis 环境,所以在启动后台程序时,请确保 Redis 已经启动,如redis需配置集群,
[
请参考Redis集群部署
](
/后端开发/redis.md
)
*
redis GUI 客户端下载 :http://redisdesktop.com/
*
redis 命令手册:http://doc.redisfans.com/
*
redis 清空缓存命令:flushall
> Mac, Linux 用户, 请到 http://redis.io 下载源码,编译安装
### 新建项目 (依赖融租易HEL1.0)
#### 确定项目信息
1.
groupId 本项目的代号,比如融租易项目,代号为 hel
1.
groupId 本项目的代号,比如融租易项目,代号为 hel
2.
artifactId 本项目的顶层目录名称,使用项目代号(第一个字母大写) +Parent,如 HelParent
2.
artifactId 本项目的顶层目录名称,使用项目代号(第一个字母大写) +Parent,如 HelParent
3.
package 包名称,使用项目代号 + core ,如 Hel.core
3.
package 包名称,使用项目代号 + core ,如 Hel.core
4.
archetypeVersion 是指模板项目的版本,可以使用以下版本号
4.
archetypeVersion 是指模板项目的版本,可以使用以下版本号
> 1.0-RELEASE
> 1.0-RELEASE
### 新建项目 (融租易HEL1.0)
确定上述信息后,可以使用如下命令新建项目:
确定上述信息后,可以使用如下命令新建项目:
`注意`
maven-archetype-plugin
`2.4`
及以下版本可以正常使用下面命令
`注意`
maven-archetype-plugin
`2.4`
及以下版本可以正常使用下面命令
...
@@ -78,10 +129,12 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
...
@@ -78,10 +129,12 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
### 确定本项目使用的数据库
### 确定本项目使用的数据库
> 目前已经测试过支持的数据库有Mysql,Oracle,SqlServer
> 目前已经测试过支持的数据库有Mysql,Oracle,SqlServer
> 按照[创建数据库](/后端开发/database-init.md)中的步骤创建数据库
> 请修改 `HelParent/core/src/main/java/hel/core/db/liquibase.groovy` 以适配不同的数据库
> 请修改 `HelParent/core/src/main/java/hel/core/db/liquibase.groovy` 以适配不同的数据库
确定好数据库后,按照
[
Oracle,MySql,Sqlserver数据库配置
](
database-config.md
)
修改项目配置文件。
### 修改项目配置文件
修改配置文件后,按照
[
创建数据库
](
database-init.md
)
中的步骤创建数据库
[
修改项目配置文件
](
/后端开发/database-config.md
)
### 编译整个项目
### 编译整个项目
...
@@ -90,8 +143,6 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
...
@@ -90,8 +143,6 @@ mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -D archetypeGr
mvn clean install -Dmaven.test.skip=true
mvn clean install -Dmaven.test.skip=true
```
```
<a
name=
"liquibase"
>
</a>
### 初始化数据库表结构及基础数据
### 初始化数据库表结构及基础数据
在 HelParent 项目录下执行:
在 HelParent 项目录下执行:
...
@@ -109,11 +160,7 @@ mvn clean install -Dmaven.test.skip=true
...
@@ -109,11 +160,7 @@ mvn clean install -Dmaven.test.skip=true
```
```
mvn eclipse:eclipse
mvn eclipse:eclipse
```
```
2.
将项目工程导入 IDE 工具(Eclipse,IntelliJ IDEA)中,并配置服务(tomcat等)后启动运行。
3.
将所有工程导入 IDE 工具(Eclipse,IntelliJ IDEA)中
4.
配置 Server ,配置 JNDI 数据源,参照
[
多数据库配置
](
chapter1.1.md
)
-
需要 Tomcat 7+, 不支持 Tomcat 6
5.
将 hel 工程发布到 tomcat/webapps,运行
### 更新HEL依赖
### 更新HEL依赖
...
...
前端组件/头行保存.md
0 → 100644
View file @
8af1ef6d
## 头行保存
头行保存在实用中经常用到,头行保存指的是头表和行表(一对多)的数据同时插入,如中途失败则这次事务不进行提交。
假设我们有两张表
**hls_person(头表)**
| pid | name | age |
|:---: | :---: | :---: |
| 1 | 张三 | 21 |
| 2 | 李四| 36 |
**hls_hobby(行表)**
| hid | pid | hobby | cause |
|:---: | :---: | :---: | :---:|
| 1 | 1 | 篮球 |因为篮球好玩|
| 2 | 1| 游泳 | 因为游泳好玩|
| 3 | 1 |动画片 | 最爱看大头儿子|
| 4 | 2 |画画| 梵高的画也不过如此|
需求是新增一个人的信息以及它的爱好(向hls_person和hls_hobby表新增记录)
下面是一个头行保存的列子:
```
javascript
<
script
><!
[
CDATA
[
//提交数据用到的容器
var
viewModel
=
kendo
.
observable
({
isEnabled
:
true
,
data
:{},
mySubmit
:
function
(
e
){
if
(
e
){
e
.
preventDefault
();
}
Hap
.
submitForm
({
url
:
'${base.contextPath}/hls/test/save'
,
formModel
:
viewModel
.
data
,
asArray
:
false
,
grid
:
{
"hobby"
:
$
(
"#grid"
)
},
success
:
function
(){
showInfoDialog
(
"保存成功!"
);
}
});
},
function
:
showInfoDialog
(
pMessage
){
kendo
.
ui
.
showInfoDialog
({
title
:
$l
(
'提示'
),
message
:
pMessage
});
}
});
//请求处理方法
function
parameterMap
(
options
,
type
){
if
(
type
!==
"read"
&&
options
.
models
)
{
var
datas
=
options
.
models
if
(
type
==
'create'
||
type
==
'update'
)
{
datas
=
options
.
models
.
map
(
function
(
data
)
{
data
[
'__status'
]
=
(
type
==
'create'
?
'add'
:
'update'
);
return
data
;
})
}
return
kendo
.
stringify
(
datas
);
}
else
if
(
type
===
"read"
)
{
var
map
=
{};
map
.
page
=
options
.
page
;
map
.
pagesize
=
options
.
pageSize
;
for
(
var
k
in
map
)
{
if
(
map
[
k
]
===
''
||
map
[
k
]
===
null
||
map
[
k
]
===
undefined
)
delete
map
[
k
]
}
return
Hap
.
prepareQueryParameter
(
viewModel
.
model
.
toJSON
(),
options
);
}
}
//属性列是否可编辑
function
dsEditable
(
field
){
return
true
;
}
]]
><
/script
>
```
```
xml
<!--头-->
<h:hlsForm
title=
"个人信息"
width=
"100%"
>
<h:hlsHBox>
<h:hlsMaskedTextBox
name=
"name"
id=
"name"
bind=
"enabled: isEnabled, value:model.name"
colspan=
"3"
prompt=
"姓名:"
required=
"true"
style=
"width:100%;"
/>
<h:hlsMaskedTextBox
name=
"age"
id=
"age"
bind=
"enabled: isEnabled, value:model.age"
colspan=
"3"
prompt=
"年龄:"
required=
"true"
style=
"width:100%;"
/>
</h:hlsHBox>
</h:hlsForm>
<!--行-->
<h:dataSource
id=
"dataSource"
batch=
"true"
pageSize=
"10"
serverPaging=
"true"
>
<h:transport
parameterMap=
"parameterMap"
>
<h:read
url=
"${base.contextPath}/hls/test/query"
type=
"GET"
dataType=
"json"
/>
<h:create
url=
"${base.contextPath}/hls/test/create"
type=
"POST"
contentType=
"application/json"
/>
<h:update
url=
"${base.contextPath}/hls/test/save"
type=
"POST"
contentType=
"application/json"
/>
</h:transport>
<h:schema
data=
"rows"
total=
"total"
errors=
"schemaError"
>
<h:model
id=
"pid"
editable=
"dsEditable"
>
<h:fields>
</h:fields>
</h:model>
</h:schema>
</h:dataSource>
<h:hlsGridBox
hlsGridId=
"grid"
hlsBtnType=
"add"
>
<h:hlsGrid
id=
"grid"
dataSource=
"dataSource"
selectable=
""
hlsBtnType=
"ADD,DELETE"
editable=
"true"
height=
"240"
>
<h:pageable
pageSizes=
"5,10,20,50"
buttonCount=
"2"
refresh=
"true"
>
</h:pageable>
<h:columns>
<h:column
field=
"hobby"
title=
'爱好'
width=
"150"
>
<h:headerAttributes
style=
"text-align:center"
/>
<h:attributes
style=
"text-align:center"
/>
</h:column>
<h:column
field=
"cause"
title=
'原因'
>
<h:headerAttributes
style=
"text-align:center"
/>
<h:attributes
style=
"text-align:center"
/>
</h:column>
</h:columns>
</h:hlsGrid>
</h:hlsGridBox>
<!--按钮-->
<h:hlsToolBar>
<h:hlsButton
click=
"mySubmit"
text=
"保存"
></h:hlsButton>
</h:hlsToolBar>
```
保存按钮注册了点了事件,点击保存将数据提交到'${base.contextPath}/hls/test/save'
> 在后端controller通过定义 @RequestMapping("/hls/test/save") 注解映射到对应的url,捕获到对应请求。
后端收到前台传过来的数据,调用service层对数据进行持久化。
controller
```
java
@RequestMapping
(
"/hls/test/save"
)
@ResponseBody
public
ResponseData
save
(
HttpServletRequest
request
,
@RequestBody
HlsPerson
hlsPerson
,
@RequestParam
(
defaultValue
=
DEFAULT_PAGE
)
final
int
page
,
@RequestParam
(
defaultValue
=
DEFAULT_PAGE_SIZE
)
final
int
pagesize
){
IRequest
iRequest
=
createRequestContext
(
request
);
testService
.
batchChildUpdate
(
iRequest
,
hlsPerson
,
hlsPerson
.
getHlsHobby
());
return
new
ResponseData
();
}
```
testService的实现类testServiceImpl定义了batchChildUpdate方法:
```
java
@Override
public
void
batchChildUpdate
(
IRequest
iRequest
,
HlsPerson
hlsPerson
,
List
<
HlsHobby
>
hlsHobbyList
)
{
List
<
HlsPerson
>
tempHlsPerson
=
new
ArrayList
<
HlsPerson
>();
if
(
hlsPerson
!=
null
){
tempHlsPerson
.
add
(
hlsPerson
);
hlsPersonService
.
batchUpdate
(
iRequest
,
tempHlsPerson
);
Long
pid
=
tempHlsPerson
.
get
(
0
).
getPid
();
for
(
HlsHobby
hh
:
hlsHobbyList
){
hh
.
setPid
(
pid
);
}
hlsHobbyService
.
batchUpdate
(
iRequest
,
hlsHobbyList
);
}
}
```
> bathUpdate会根据传入的List对象中单个对象的属性值__status判断,如为update即做更新操作,add为插入操作, __status的值由前端paramter函数决定。
\ No newline at end of file
后端开发/database-config.md
0 → 100644
View file @
8af1ef6d
# Oracle,MySql,Sqlserver数据库配置
## 配置文件
1.
服务数据源配置
*
融租易默认使用 JNDI 来配置数据源。数据源的配置独立于项目配置
*
默认使用的 JNDI name 为
`jdbc/hel_dev`
*
tomcat 需要配置 context.xml:
-
Mysql
```
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/hel" name="jdbc/hel_dev" type="javax.sql.DataSource" username="hel_dev" password="hel_dev"/>
```
- Oracle
```
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" name="jdbc/hel_dev" type="javax.sql.DataSource" url="jdbc:oracle:thin:@127.0.0.1:1521:hel" username="hel_dev" password="hel_dev"/>
```
- SqlServer
```
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=hel" name="jdbc/hel_dev" type="javax.sql.DataSource" username="hel_dev" password="hel_dev"/>
```
* 其他[应用服务器weblogic](/框架功能描述/deployment.md)等,需要按其配置方法 配置 JNDI
2. 数据库数据源配置
> 融租易项目根目录的pom.xml中默认包含了 `Oracle`,`Mysql`,`SqlServer` 的 JDBC 驱动,一般不需要改动
* 修改 resources/config.properties
* 当数据库为 oracle 时
```
db.type=oracle
db.jndiName=java:comp/env/jdbc/hel_dev
mybatis.identity=SEQUENCE
```
* 当数据库为mysql时
```
db.type=mysql
db.jndiName=java:comp/env/jdbc/hel_dev
```
* 修改完毕后复制一份放到 resources/profiles/dev (覆盖)
3. redis服务配置
修改resources/config.properties:
* 配置单个redis的时候只需配置
```
redis.ip=172.20.0.115
redis.port=6379
redis.db=1
```
* 当配置redis集群时需配置
```
redis.useSentinel=true --为true时单个redis配置熟悉失效
redis.sentinel=
\
10.
86.20.183:26379,
\
10.
86.20.184:26379
```
后端开发/database-init.md
0 → 100644
View file @
8af1ef6d
# 新建数据库
# 1. 创建数据库-Mysql
> 在开始之前最好修改一下 MySQL的配置文件 my.cnf (or my.ini)
,在
[
mysqld
]
下添加
```
lower_case_table_names=1
character_set_server=utf8
max_connections=500
```
*
用管理员登陆mysql
*
创建数据库hel_dev
```sql
create schema hel_dev default character set utf8;
```
*
创建用户hel_dev,并将密码设置为hel_dev
```sql
CREATE USER hel_dev@'%' IDENTIFIED BY 'hel_dev';
CREATE USER hel_dev@'localhost' IDENTIFIED BY 'hel_dev';
```
*
将上面新建的hel_dev权限赋予用户hel
```sql
GRANT ALL PRIVILEGES ON hel_dev.* TO hel_dev@'%';
GRANT ALL PRIVILEGES ON hel_dev.* TO hel_dev@'localhost';
flush privileges;
```
# 2. 创建数据库-Oracle
*
使用管理员登陆
*
创建表空间
```sql
CREATE BIGFILE TABLESPACE tbs_perm_hel
DATAFILE 'tbs_perm_hel.dat'
SIZE 200M
AUTOEXTEND ON NEXT 20M MAXSIZE 500M;
```
```sql
CREATE TEMPORARY TABLESPACE tbs_temp_hel
TEMPFILE 'tbs_temp_hel.dbf'
SIZE 200M
AUTOEXTEND ON NEXT 20M MAXSIZE 500M;
```
*
创建用户 schema
```sql
CREATE USER hel_dev
IDENTIFIED BY hel_dev
DEFAULT TABLESPACE tbs_perm_hel
TEMPORARY TABLESPACE tbs_temp_hel
QUOTA 200M on tbs_perm_hel;
```
*
授权
```sql
GRANT create session TO hel_dev;
GRANT create table TO hel_dev;
GRANT create view TO hel_dev;
GRANT create any trigger TO hel_dev;
GRANT create any procedure TO hel_dev;
GRANT create sequence TO hel_dev;
GRANT create synonym TO hel_dev;
```
# 3. 创建数据库-sql server
*
使用管理员登陆
*
创建数据库
```sql
CREATE DATABASE hel_dev COLLATE Chinese_PRC_CI_AS;
```
*
创建用户 hel 并授权
```sql
sp_addlogin 'hel','hel_dev';
use hel_dev
go
sp_adduser 'hel_dev','hel_dev'
go
sp_addrolemember 'db_owner','hel'
go
```
\ No newline at end of file
融租易开发手册.md
View file @
8af1ef6d
...
@@ -57,6 +57,7 @@
...
@@ -57,6 +57,7 @@
*
[
5.17 hlsGridBox\(表格\)
](
/前端组件/hlsGridBox.md
)
*
[
5.17 hlsGridBox\(表格\)
](
/前端组件/hlsGridBox.md
)
*
[
5.18 hlsNumericTextBox\(数字框\)
](
/前端组件/hlsNumericTextBox.md
)
*
[
5.18 hlsNumericTextBox\(数字框\)
](
/前端组件/hlsNumericTextBox.md
)
*
[
5.19 hlsNavigationBar\(导航栏\)
](
/前端组件/hlsNavigationBar.md
)
*
[
5.19 hlsNavigationBar\(导航栏\)
](
/前端组件/hlsNavigationBar.md
)
*
[
5.20 头行保存
](
/前端组件/头行保存.md
)
*
VI. 框架功能描述
*
VI. 框架功能描述
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment