美文网首页
从零开始搭建自己的网站二:Springboot项目框架搭建

从零开始搭建自己的网站二:Springboot项目框架搭建

作者: 丁垠午 | 来源:发表于2019-05-17 16:52 被阅读0次

上一篇文章中,讲的第一、二步购买服务器和绑定域名,我就不细细讲了。本文中会讲解如何构建一个基本的Springboot+freemarker+mybatis项目框架

1、先创建Gradle项目,用Gradle来管理我们的项目。

2、创建目录结构

3、具体代码

1)build.gradle 此处为整个项目的完整jar包。

group 'demo'

version '1.0.0'

apply plugin: 'java'

apply plugin: 'idea'

repositories {

    mavenCentral()

}

buildscript {

    ext {

        springBootVersion = '1.4.1.RELEASE'

    }

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }

}

apply plugin: 'spring-boot'

sourceCompatibility = 1.8

targetCompatibility = 1.8

repositories {

    mavenCentral()

}

dependencies {

    compile('org.springframework.boot:spring-boot-devtools')

    compile 'org.springframework.boot:spring-boot-starter-freemarker'

    compile('org.springframework.boot:spring-boot-starter-web')

    compile('org.springframework.boot:spring-boot-starter-aop')

    compile('org.springframework.boot:spring-boot-starter-cache')

    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1')

    compile('mysql:mysql-connector-java:5.1.42')

    compile('commons-dbcp:commons-dbcp:1.2.2')

    testCompile('org.springframework.boot:spring-boot-starter-test')

    compile 'com.alibaba:fastjson:1.2.33'

    compile 'org.apache.commons:commons-lang3:3.6'

    compile("org.springframework.boot:spring-boot-starter-redis:1.3.5.RELEASE")

    compile("org.springframework.data:spring-data-redis:1.7.2.RELEASE")

    compile 'dom4j:dom4j:1.6.1'

    compile 'com.thoughtworks.xstream:xstream:1.4.9'

    compile 'com.qiniu:qiniu-java-sdk:[7.2.0, 7.2.99]'

    compile 'org.json:json'

    compile 'commons-fileupload:commons-fileupload:1.3.2'

    compile 'commons-codec:commons-codec:1.9'

    compile 'net.sf.ehcache:ehcache'

    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'

}

task wrapper(type: Wrapper) {

    gradleVersion = '2.12'

}

ext {

    profile = System.getProperty("env") ?: "dev"

    println "[current profile]:" + profile

}

sourceSets {

    main {

        resources {

            srcDirs = ["src/main/resources", "env/$profile"]

        }

    }

}

jar {

    String someString = ''

    configurations.runtime.each {someString = someString + " lib//"+it.name}

    manifest {

        attributes 'Main-Class': 'com.dyw.Application'

        attributes 'Class-Path': someString

    }

}

//清除上次的编译过的文件

task clearPj(type:Delete){

    delete 'build','target'

}

task copyJar(type:Copy){

    from configurations.runtime

    into ('build/libs/lib')

}

//把JAR复制到目标目录

task release(type: Copy,dependsOn: [build,copyJar]) {

// from 'conf'

// into ('build/libs/eachend/conf') // 目标位置

}

2)application.yaml 配置文件,这里配置了2种环境下的配置,分别是local本地和prod生产环境。到时方便发布

spring.profiles.active: local

---

spring:

  profiles: local

  http:

    multipart:

      max-file-size: 1024KB

      max-request-size: 1024KB

  devtools.restart.enabled: true

  output.ansi.enabled: ALWAYS

  freemarker:

    suffix: .html

    settings:

      datetime_format: yyyy-MM-dd HH:mm:ss

      date_format: yyyy-MM-dd

      time_format: HH:mm:ss

      number_format: 0.######

      boolean_format: true,false

      auto_import: "'spring.ftl' as spring"

      whitespace_stripping: true

      default_encoding: UTF-8

      tag_syntax: auto_detect

      url_escaping_charset: UTF-8

      template_update_delay: 3

      locale: zh_CN

      cache_storage: strong:20,soft:250

  resources.chain.strategy:

    content.enabled: true

    fixed.version: 1

  mvc:

    favicon.enabled: false

    static-path-pattern: /**

---

spring:

  profiles: prod

  http:

    multipart:

      max-file-size: 1024KB

      max-request-size: 1024KB

  devtools.restart.enabled: true

  output.ansi.enabled: ALWAYS

  freemarker:

    suffix: .html

    settings:

      datetime_format: yyyy-MM-dd HH:mm:ss

      date_format: yyyy-MM-dd

      time_format: HH:mm:ss

      number_format: 0.######

      boolean_format: true,false

      auto_import: "'spring.ftl' as spring"

      whitespace_stripping: true

      default_encoding: UTF-8

      tag_syntax: auto_detect

      url_escaping_charset: UTF-8

      template_update_delay: 3

      locale: zh_CN

      cache_storage: strong:20,soft:250

  resources.chain.strategy:

    content.enabled: true

    fixed.version: 1

  mvc:

    favicon.enabled: false

    static-path-pattern: /**

3)Application 启动类

@MapperScan("com.dyw.dao")

@EnableAutoConfiguration

@EnableCaching

@SpringBootApplication(scanBasePackages = "com.dyw")

public class Application extends WebMvcConfigurerAdapter implements EmbeddedServletContainerCustomizer {

    public static void main(String[] args) throws Exception {

        new SpringApplicationBuilder().bannerMode(Banner.Mode.OFF);

        SpringApplication application = new SpringApplication(Application.class);

        application.setBannerMode(Banner.Mode.OFF);

        application.run(args);

    }

    @Bean

    public DataSource dataSource() {

        BasicDataSource dataSource = new BasicDataSource();

        dataSource.setPassword("root123");

        dataSource.setUrl("jdbc:mysql://localhost/blog?useUnicode=true&characterEncoding=utf-8");

        dataSource.setUsername("root");

        dataSource.setDriverClassName("com.mysql.jdbc.Driver");

        return dataSource;

    }

    @Bean

    public SqlSessionFactory sqlSessionFactoryBean() throws Exception {

        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

        sqlSessionFactoryBean.setDataSource(dataSource());

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));

        return sqlSessionFactoryBean.getObject();

    }

    @Override

    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8088);

    }

}

4)GatewayController ,ArticleService,ArticleServiceImpl,ArticleDao

@Controller

public class GatewayController {

    @Autowired

    private ArticleService articleService;

    /**

     * 首页

     */

    @RequestMapping(value = {"/", "index"})

    public String gateway(Model model) {

        List<Article> list = articleService.getArticleList();

        model.addAttribute("articles", list);

        return "homepage/index";

    }

}

public interface ArticleService {

    /**

     * 查询所有的文章列表

     */

    List<Article> getArticleList();

}

@Service

public class ArticleServiceImpl implements ArticleService {

    @Autowired

    private ArticleDao articleDao;

    @Override

    public List<Article> getArticleList() {

        return articleDao.getArticleList();

    }

}

@Component

public interface ArticleDao {

    /**

     * 获取文章

     */

    List<Article> getArticleList();

}

5)Article实体 此处先不用管字段,后面我会详细解释。

public class Article {

    //ID

    private int id;

    //内容ID

    private int contentId;

    //标题

    private String title;

    //摘要

    private String abstr;

    //分类

    private String categoryId;

    //内容

    private String content;

    //时间

    private String createDate;

    //置顶

    private String top;

    //图片地址

    private String imgurl;

    //关键词

    private String key;

    private String keyValue;

    private String categoryValue;

    private int click;

    private int comment;

    public int getClick() {

        return click;

    }

    public void setClick(int click) {

        this.click = click;

    }

    public int getComment() {

        return comment;

    }

    public void setComment(int comment) {

        this.comment = comment;

    }

    public String getCategoryValue() {

        return categoryValue;

    }

    public void setCategoryValue(String categoryValue) {

        this.categoryValue = categoryValue;

    }

    public String getKey() {

        return key;

    }

    public void setKey(String key) {

        this.key = key;

    }

    public String getKeyValue() {

        return keyValue;

    }

    public void setKeyValue(String keyValue) {

        this.keyValue = keyValue;

    }

    public String getTop() {

        return top;

    }

    public void setTop(String top) {

        this.top = top;

    }

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public int getContentId() {

        return contentId;

    }

    public void setContentId(int contentId) {

        this.contentId = contentId;

    }

    public String getTitle() {

        return title;

    }

    public void setTitle(String title) {

        this.title = title;

    }

    public String getAbstr() {

        return abstr;

    }

    public void setAbstr(String abstr) {

        this.abstr = abstr;

    }

    public String getCategoryId() {

        return categoryId;

    }

    public void setCategoryId(String categoryId) {

        this.categoryId = categoryId;

    }

    public String getContent() {

        return content;

    }

    public void setContent(String content) {

        this.content = content;

    }

    public String getCreateDate() {

        return createDate;

    }

    public void setCreateDate(String createDate) {

        this.createDate = createDate;

    }

    public String getImgurl() {

        return imgurl;

    }

    public void setImgurl(String imgurl) {

        this.imgurl = imgurl;

    }

}

6)article_sqlmap.xml mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.dyw.dao.ArticleDao" >

    <resultMap id="article" type="com.dyw.model.Article" >

        <id column="id" property="id" jdbcType="INTEGER" />

        <result column="contentId" property="contentId" jdbcType="INTEGER" />

        <result column="title" property="title" jdbcType="VARCHAR" />

        <result column="abstr" property="abstr" jdbcType="VARCHAR" />

        <result column="categoryId" property="categoryId" jdbcType="VARCHAR" />

        <result column="imgurl" property="imgurl" jdbcType="VARCHAR" />

        <result column="createDate" property="createDate" jdbcType="VARCHAR" />

        <result column="top" property="top" jdbcType="VARCHAR" />

        <result column="key" property="key" jdbcType="VARCHAR" />

        <result column="keyValue" property="keyValue" jdbcType="VARCHAR" />

        <result column="categoryValue" property="categoryValue" jdbcType="VARCHAR" />

    </resultMap>

    <select id="getArticleList" resultMap="article">

        select * from article

    </select>

</mapper>

7)index.html 页面 我们在上面application.yaml中已经配置了freemarker,所以在页面中可以直接用freemarker语法

<!doctype html>

<html lang="zh-CN">

<head>

<meta charset="utf-8">

<meta name="renderer" content="webkit">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>丁垠午博客首页</title>

</head>

<body>

<#list articles as article>

 ${article.title}</br>

</#list>

</body>

</html>

8)启动Application中的main方法,运行项目。效果如下,整个项目基本框架搭建完成,而且我们也从http请求到后台,再到数据库,再转回到前端展示整个流程完整的走完。

欢迎转载,转载请注明出处 http://www.dingyinwu.com

如果文章中有任何问题,请大家纠正,我会非常感激,一起进步。

相关文章

网友评论

      本文标题:从零开始搭建自己的网站二:Springboot项目框架搭建

      本文链接:https://www.haomeiwen.com/subject/vpvoaqtx.html