springmvc项目概述

springmvc项目概述

项目包介绍
在这里插入图片描述
springmvc基本组成架构:

config基本配置:
mybatisConfig:负责mybatis连接管理,将mybatis.xml文件进行转换

package com.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MyBatisConfig {

    
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.domain");
        return factoryBean;
    }

    
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.dao");
        return msc;
    }
}

JdbcCongfig:数据库连接配置

package com.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class JdbcConfig {
    ("${jdbc.driver}")
    private String driver;
    ("${jdbc.url}")
    private String url;
    ("${jdbc.username}")
    private String username;
    ("${jdbc.password}")
    private String password;


    
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

SpringConfig :Spring项目管理,核心配置类

package com.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;


("com.service")
({JdbcConfig.class,MyBatisConfig.class})
("classpath:jdbc.properties")
public class SpringConfig {
}

ServletConfig :Spring项目的服务端管理类

package com.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    //拦截请求
    
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

SpringMvcConfig

package com.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

 //核心配置类
("com.controller")
  //连接服务端mvc
public class SpringMvcConfig {
}

controller:服务端控制器

BrandController:

package com.controller;


import com.domain.Brand;
import com.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

  //表示为控制器
("/brand")
public class BrandController {
      //自动装配
    private BrandService brandService;


    
    public List<Brand> getAll() {
        return brandService.getAll();
    }

    ("/{id}")
    public Brand getById( int id) {
        return brandService.getById(2);
    }
}

dao层:DAO层主要是做数据持久层的工作
BrandDao:

package com.dao;

import com.domain.Brand;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface BrandDao {
    ("select * from tb_brand")
    List<Brand> getAll();

    ("select * from tb_brand where id=#{id}")
    Brand getById(int id);
}

domain:javaBean文件
Brand:

package com.domain;

public class Brand {
    private int id;
    private String brand_name;
    private String company_name;     
    private String ordered;
    private String description;
    private int status;



    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBrand_name() {
        return brand_name;
    }

    public void setBrand_name(String brand_name) {
        this.brand_name = brand_name;
    }

    public String getCompany_name() {
        return company_name;
    }

    public void setCompany_name(String company_name) {
        this.company_name = company_name;
    }

    public String getOrdered() {
        return ordered;
    }

    public void setOrdered(String ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brand_name='" + brand_name + '\'' +
                ", company_name='" + company_name + '\'' +
                ", ordered='" + ordered + '\'' +
                ", description='" + description + '\'' +
                ", status='" + status + '\'' +
                '}';
    }
}

service层:Service层主要负责业务模块的逻辑
BrandService:

package com.service;


import com.domain.Brand;

import java.util.List;


//提供业务层接口
public interface BrandService {
    /*
     * 查询全部
     * */
    List<Brand> getAll();

    /*
     * 根据id查询
     * */
    Brand getById(int id);


}

BrandServiceImpl

package com.service.impl;

import com.dao.BrandDao;
import com.domain.Brand;
import com.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


public class BrandServiceImpl implements BrandService {
     //自动装配
    private BrandDao brandDao;

    
    public List<Brand> getAll() {
        return brandDao.getAll();
    }

    
    public Brand getById(int id) {
        return brandDao.getById(1);
    }
}

jdbc.properties文件:数据连接信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&useSSL=false
jdbc.username=sa
jdbc.password=123456

log4j.properties文件:程序日志

log4j.rootLogger=debug,stdout,D,E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=D://DataSpace/java_project/logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=D://DataSpace/java_project/logs/log.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

测试程序:

package com.service;


import com.config.SpringConfig;
import com.domain.Brand;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

(SpringJUnit4ClassRunner.class)
(classes = SpringConfig.class)
public class BrandTest {
    
    private BrandService brandService;

    
    public void testById() {
        Brand brand = brandService.getById(2);
        System.out.println(brand);
    }

    
    public void testByAll() {
        List<Brand> all = brandService.getAll();
        System.out.println(all);
    }
}

配置pom文件:在程序运行过程中,经常会遇见程序不能运行的情况,在此,需要及时检查包依赖或者版本的问题,有时不同版本的包之间会出现版本相互冲突的问题

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>
    </dependencies>

关于dao,service,controller,domain等介绍:
DAO层:
DAO层主要是做数据持久层的工作,用来对应数据库实体,负责与数据库进行联络的一些任务都封装在此。主要就是封装一些数据库的增删改查操作,但仅仅是封装了操作,具体的实现并不在dao层里,所以我们可以看到日常的dao层都是以接口形式实现,里面写的方法也都是交给业务层也就是service层去调用。这样的话就实现了高度的解耦合,这样我们的service层就可以专注于实现业务逻辑,而不需要跟数据库产生任何关系,只要跟数据库相关的操作我们都在dao层进行定义就完事了,service层只是去调用dao层里写的方法。DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

Service层:
Service层主要负责业务模块的逻辑。一般service层我们会先写一个interface,这个接口以service为后缀表示这是一个service接口,在这个类里定义好我们需要的方法,然后写实现类去实现这个接口里的方法,这样可以做到高度解耦合,非常nice的编程习惯。service层编写完成后,我们就可以在controller层中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。

Controller层:
Controller层负责具体的业务模块流程的控制,就是我们进行编程时候以Api为后缀结尾的类,在此层里面要调用Serice层的接口来控制业务流程,因为service层里封装了业务处理的方法。控制器主要就是来调用这些service来实现业务。针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。

domain层:通常就是用于放置这个系统中,与数据库中的表,一一对应起来的JavaBean的
model层:和domain区别;可能都是javaBean,
这个区别是用途不同,domain通常就代表了与数据库表–一一对应的javaBean,
model通常代表了不与数据库一一对应的javaBean,但是封装的数据是前端的JS脚本,需要使用的数据

domain的概念,通常会分很多层,比如经典的三层架构,控制层、业务层、数据访问层(DAO),此外,还有一个层,就是domain层

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵星人来踩博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值