# 快速入门 本文提供了最基本的hsweb使用方式,只要认真阅读本文,创建一个项目不成问题. ## 目录 1. [前言](#前言) 2. [创建项目](#创建项目) 3. [增删改查](#增删改查) ## 前言 `hsweb`是基于`java8`,`spring-boot`,`mybatis`开发.所以在开始使用`hsweb`的前,你至少应该掌握以下技术:`java`,`maven`. 最好掌握以下技术:`spring-boot`,`mybatis`. 如果对以上技术一无所知,请先去各大搜索引擎学习之. `hsweb`是一个模块化的项目,对各个功能进行了细分,这是为了更好的拓展性,但是在实际业务项目中,并不需要这样的细分,因此,强烈不建议自己直接将hsweb-framework clone下来在上面添加业务代码,正确的姿势是使用maven,根据自己的需求依赖hsweb的各个模块. hsweb 目前未提供前端支持,仅有一个[demo](https://github.com/hs-web/hsweb3-demo)可供参考. 本入门教程以一个最传统的单模块项目为例子. IDE为:`Intellij IDEA`(需安装lombok插件) ## 创建项目 1. 新建maven项目: ![新建项目](./img/create-project.gif "新建项目") 编辑`pom.xml`,然后`reimport`.如果对maven不够熟悉,maven的设置请使用默认设置,不要在settings.xml里自己添加私服. 否则可能出现依赖无法下载的问题. ```xml 4.0.0 com.mycompany myproject 1.0-SNAPSHOT UTF-8 zh_CN 1.5.13.RELEASE 1.8 ${java.version} 3.0.0 3.0.1 ${project.artifactId} src/main/resources true org.apache.maven.plugins maven-compiler-plugin 3.1 ${project.build.jdk} ${project.build.jdk} ${project.build.sourceEncoding} org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} com.mycompany.MyProjectApplication ZIP repackage org.springframework.boot spring-boot-starter-test test org.hswebframework.web hsweb-tests ${hsweb.framework.version} test org.hswebframework.web hsweb-concurrent-cache ${hsweb.framework.version} org.hswebframework.web hsweb-spring-boot-starter org.springframework.boot spring-boot-starter-logging org.codehaus.groovy groovy-all mysql mysql-connector-java 5.1.40 com.alibaba druid ch.qos.logback logback-classic org.slf4j slf4j-api org.springframework.boot spring-boot-configuration-processor true org.projectlombok lombok org.hswebframework.web hsweb-framework ${hsweb.framework.version} pom import com.alibaba druid 1.0.26 org.hswebframework.web hsweb-spring-boot-starter ${hsweb.framework.version} hsweb-nexus Nexus Release Repository http://nexus.hsweb.me/content/groups/public/ true always aliyun-nexus aliyun http://maven.aliyun.com/nexus/content/groups/public/ aliyun-nexus aliyun http://maven.aliyun.com/nexus/content/groups/public/ ``` 2. 在`resources`中创建`application.yml`配置 ![application.yml](./img/create-application-yml.gif "application.yml") ```yaml server: port: 8080 spring: aop: auto: true datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name : com.mysql.jdbc.Driver url : jdbc:mysql://localhost:3306/myproject?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false username : root password : root hsweb: app: name: my-project version: 1.0.0 logging: level: org.hswebframework.web: DEBUG org.hswebframework.web.cache: WARN org.apache.ibatis: DEBUG org.mybatis: DEBUG ``` 3. 创建启动类 ![MyProjectApplication.java](./img/create-application-java.gif "MyProjectApplication.java") ```java package com.mycompany; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author zhouhao * @since 1.0 */ @SpringBootApplication public class MyProjectApplication { public static void main(String[] args) { SpringApplication.run(MyProjectApplication.class,args); } } ``` 4. 创建数据库 ```sql CREATE DATABASE IF NOT EXISTS myproject default charset utf8 COLLATE utf8_general_ci; ``` 5. 执行`MyProjectApplication.main`启动应用 ![MyProjectApplication.java](./img/start-application.gif "MyProjectApplication.java") 打开浏览器访问 http://localhost:8080. 提示`Whitelabel Error Page`则说明服务启动成功. 因为现在还没有任何功能,所有提示错误信息. 到此,项目建立完成,和普通的spring-boot项目没有区别. ## 增删改查 使用通用CURD,添加一个增删改查功能: 在`pom.xml`中引入模块: ```xml org.hswebframework.web hsweb-commons-dao-mybatis ${hsweb.framework.version} org.hswebframework.web hsweb-commons-service-simple ${hsweb.framework.version} org.hswebframework.web hsweb-commons-controller ${hsweb.framework.version} ``` ![引入curd依赖](./img/import-commons-module.gif "引入curd依赖") 1. 创建数据库表: ```sql create table tb_test( id varchar(32) primary key, name varchar(32) not null, status tinyint, comment text ) ``` 2. 创建实体类 `com.mycompany.entity.TestEntity` 实体类可通过继承:`org.hswebframework.web.commons.entity.SimpleGenericEntity<主键类型>`.来使用通用的crud功能. ```java @Getter @Setter public class TestEntity extends SimpleGenericEntity { private String name; private Byte status; private String comment; } ``` ![创建实体](./img/create-entity.gif "创建实体") 3. 创建Dao dao接口可通过继承:`org.hswebframework.web.dao.CrudDao<实体类,主键类型>`.来使用通用的crud功能. 创建Dao接口 `com.mycompany.dao.TestDao` ```java public interface TestDao extends CrudDao { } ``` ![创建Dao](./img/create-dao.gif "创建实体Dao") 创建myabtis mapper,在`resources`目录上创建:`com/mycompany/dao/mybatis/TestMapper.xml` ```xml delete from tb_test where id =#{id} ``` ![创建Mybatis](./img/create-mybaits-mapper.gif "创建实体Mybatis") 在`application.yml`中添加配置: ```yaml mybatis: mapper-locations: classpath:com/mycompany/dao/mybatis/**/*.xml ``` 在`MyProjectApplication`上添加注解:`@MapperScan(basePackages = "com.mycompany.dao", markerInterface = org.hswebframework.web.dao.Dao.class)` 4. 创建Service service接口可通过继承:`org.hswebframework.web.service.CrudService<实体类,主键类型>`.来使用通用的crud功能. 创建接口类: `com.mycompany.service.TestService` ```java public interface TestService extends CrudService { } ``` 实现类可通过继承: ` org.hswebframework.web.service.GenericEntityService<实体类,主键类型>`.来使用通用crud功能. 创建实现类 `com.mycompany.service.impl.TestServiceImpl` ```java @Service public class TestServiceImpl extends GenericEntityService implements TestService { @Autowired private TestDao testDao; @Override protected IDGenerator getIDGenerator() { return IDGenerator.MD5; } @Override public TestDao getDao() { return testDao; } } ``` ![创建Service](./img/create-service.gif "创建Serivce") 5. 创建Controller controller 可通过实现接口: `org.hswebframework.web.controller.SimpleGenericEntityController<实体类,主键类型,org.hswebframework.web.commons.entity.param.QueryParamEntity>` 创建controller类: `com.mycompany.controller.TestController` ```java @RestController @RequestMapping("/test") public class TestController implements SimpleGenericEntityController { @Autowired TestService testService; @Override public CrudService getService() { return testService; } } ``` 6. 测试 方式一:编写单元测试 在test目录创建`com.mycompany.TestApplication`和`com.mycompany.controller.TestControllerTest` ```java @SpringBootApplication @WebAppConfiguration public class TestApplication { } ``` ```groovy @WebAppConfiguration @ContextConfiguration @SpringBootTest(classes = [TestApplication.class], properties = ["classpath:application.yml"]) class TestControllerTest extends Specification { @Autowired private ConfigurableApplicationContext context; @Shared private MockMvc mockMvc; void setup() { mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); } def "Test Create Data"() { setup: def testData = """ {"name":"测试数据","status":1,"comment":"说明"} """ and: mockMvc.perform( post("/test") .contentType(MediaType.APPLICATION_JSON) .content(testData) ).andExpect(status().is(201)) } } ``` 执行单元测试,通过则说明新增功能测试通过. 方式二: `postman` 或者idea的`Test Restful Web Servcice`,以Idea工具为例: 执行启动类:`com.mycompany.MyProjectApplication`启动服务,然后调用`/test`服务 ![测试](./img/idea-test.gif "测试") 一个最简单的通用crud例子完成了!! 更多教程: [通用增删改查使用](USE-CRUD.md) , [权限控制](AUTZ.md) ,[业务功能](SYSTEM.md) , [实用工具包](UTILS.md)