J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构

好久没给大家弄Java后端项目系列了,因为接了Java后端外包以及学习一些后端优化的东西。而现在开始慢慢在这个系列的(三)逐渐把后端外包的一些有价值的东西分享给大家,并且自己也总结一遍嘛。


文章结构:(1)项目环境搭建;(2)简单业务逻辑测试框架;(3)项目配置注意点;(4)快速开发上手技巧;


一、项目环境搭建:

项目框架:Spring Data JPA+Spring+SpringMVC+Maven+JDK1.7+Tomcat7.0

使用IDEA开发

(1)Maven构建:


  4.0.0
  com.fuzhu
  springdatajpa
  war
  1.0-SNAPSHOT
  springdatajpa Maven Webapp
  http://maven.apache.org

  

    UTF-8

    yyyyMMdd'T'HHmmss
    ${maven.build.timestamp}

    1.7
    1.7

    1.7

    4.0.4.RELEASE
    1.6.6
    5.0.1.Final
    1.0.1.Final
    4.2.6.Final
    5.1.35

  


  
    
    
      org.springframework
      spring-web
      ${version-springframework}
    
    
      org.springframework
      spring-webmvc
      ${version-springframework}
    
    
    
      org.springframework
      spring-expression
      ${version-springframework}
    
    
    
      org.springframework
      spring-core
      ${version-springframework}
    
    
      org.springframework
      spring-context
      ${version-springframework}
      
        
        
          commons-logging
          commons-logging
        
      
    

    
    
      org.springframework
      spring-context-support
      ${version-springframework}
    
    
      org.springframework
      spring-aop
      ${version-springframework}
    
    
    
      org.springframework
      spring-beans
      ${version-springframework}
    
    
    
      org.springframework
      spring-tx
      ${version-springframework}
    
    
    
      org.springframework
      spring-test
      ${version-springframework}
    
    
    
      org.hibernate
      hibernate-core
      ${version-hibernate}
    
    
      org.hibernate
      hibernate-entitymanager
      ${version-hibernate}
      
        
          cglib
          cglib
        
        
          dom4j
          dom4j
        
      
    
    
      org.hibernate
      hibernate-validator
      ${version-hibernate.validator}
    
    
      org.hibernate.javax.persistence
      hibernate-jpa-2.0-api
      ${version-hibernate.jpa}
    
    
      org.hibernate
      hibernate-ehcache
      ${version-hibernate}
    

    
    
      org.springframework.data
      spring-data-jpa
      1.6.2.RELEASE
    

    
    
      org.aspectj
      aspectjrt
      1.6.10
    

    
    
      org.slf4j
      slf4j-api
      ${version-slf4j}
    
    
      org.slf4j
      jcl-over-slf4j
      ${version-slf4j}
      runtime
    
    
      org.slf4j
      slf4j-log4j12
      ${version-slf4j}
      runtime
    
    
      log4j
      log4j
      1.2.15
      
        
          javax.mail
          mail
        
        
          javax.jms
          jms
        
        
          com.sun.jdmk
          jmxtools
        
        
          com.sun.jmx
          jmxri
        
      
      runtime
    
    
    
    
      javax.servlet
      servlet-api
      3.0-alpha-1
      provided
    
    
      javax.servlet.jsp
      jsp-api
      2.2
      provided
    
    
      javax.servlet
      jstl
      1.2
    

    
    
      com.alibaba
      druid
      1.0.0
    

    
    
      mysql
      mysql-connector-java
      ${mysql.version}
    

    
    
      org.apache.commons
      commons-lang3
      3.3.2
    

    
      commons-fileupload
      commons-fileupload
      1.3.1
    

    
      org.apache.commons
      commons-digester3
      3.2
    

    
      commons-io
      commons-io
      2.4
    

    
      org.apache.commons
      commons-exec
      1.2
    

    
      commons-beanutils
      commons-beanutils
      1.9.1
    

    
      commons-codec
      commons-codec
      1.9
    
    
    
      cglib
      cglib
      2.2.2
    

    
    
      com.alibaba
      fastjson
      1.2.5
    
    
      com.fasterxml.jackson.core
      jackson-core
      2.1.0
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.1.0
    
    
      com.fasterxml.jackson.core
      jackson-annotations
      2.1.0
    

    
    
      org.hamcrest
      hamcrest-core
      1.3
      test
    
    
      org.hamcrest
      hamcrest-library
      1.3
      test
    
    
      junit
      junit
      4.12
      test
    


  

  
    springdatajpa
    
      
        org.apache.maven.plugins
        maven-compiler-plugin
        
          1.7
          1.7
        
      
    
  

(2).spring配置文件:




    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        

    


    
    
        
    

    
    
        
    

    
    
        
        
        
        
        
        
    


    

    
    




(3).springMVC的配置:





    
    

    
    
        
        
    


    
    
        
        
        
    
    
    
        
            
                application/x-www-form-urlencoded;charset=UTF-8
            
        
    

    
    
        
        
        
    


    
        
            
            
                
            
        
    


(4).数据源的配置:

database.url=jdbc:mysql://127.0.0.1:3306/aidou?useUnicode=true&characterEncoding=utf8
database.username=root
database.password=751197996
database.driverClassName=com.mysql.jdbc.Driver

(5).log4j的日志配置(见源码)

(6).JPA的配置包,指定持久化单元:



    

        
        ENABLE_SELECTIVE
        
            
            

            
            
            
            

            
            
            
            
            
            
            
            

             
            
            
            

            
            
            
            
            
            
            
            
            
        
    

(7).web.xml配置




  Archetype Created Web Application
  
  
    contextConfigLocation
    classpath:META-INF/spring/spring-jpa.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  
  
  
    log4jConfigLocation
    classpath:META-INF/log4j.properties
  
  
    org.springframework.web.util.Log4jConfigListener
  

  
  
    Set Character Encoding
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    Set Character Encoding
    /*
  

  
  
    appServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:META-INF/springmvc/spring-mvc.xml
    
    1
  
  
    appServlet
    /
  

  
    Spring OpenEntityManagerInViewFilter
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    
      
      entityManagerFactoryBeanName
      entityManagerFactory
    
  
  
    Spring OpenEntityManagerInViewFilter
    /*
  




  
  
  
    DruidWebStatFilter
    com.alibaba.druid.support.http.WebStatFilter
    
      exclusions
      *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
    
    
      sessionStatMaxCount
      1000
    
    
      sessionStatEnable
      false
    
  
  
    DruidWebStatFilter
    /*
  

  
    DruidStatView
    com.alibaba.druid.support.http.StatViewServlet
    
      
      resetEnable
      true
    
    
      
      loginUsername
      druid
    
    
      
      loginPassword
      druid
    
  
  
    DruidStatView
    /druid/*
  

这样就完成了工程的配置了!!!


二、简单业务逻辑测试框架

简单的bean:(为了偷懒就用JPA自动建表了,不过后面会给出sql,而且JPA自动建表有坑!!)

//积分变化记录
@Entity
@Table(name = "i_dou_change")
public class IDouChange {
    private Long id;
    //积分变化的类型,拉黑或者在线或者充值
    private String changeType;
    private Date createTime;
    //积分变化数
    private Integer iDouCount;
    //积分变化者
    private User user;


    public IDouChange() {
    }

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }

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


    @Column(name = "change_type")
    public String getChangeType() {
        return changeType;
    }

    public void setChangeType(String changeType) {
        this.changeType = changeType;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "create_time",nullable=true,columnDefinition="timestamp default current_timestamp")
    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Column(name = "i_dou_count")
    public Integer getiDouCount() {
        return iDouCount;
    }

    public void setiDouCount(Integer iDouCount) {
        this.iDouCount = iDouCount;
    }
//简单的多对一
    @JoinColumn(name="user_id")
    @ManyToOne(fetch= FetchType.LAZY)
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

对应的repository接口dao

@Repository
public interface AiDouChangeRepository extends JpaRepository {
    
}

对应的service

@Service
public class AiDouService {
    @Autowired
    private AiDouChangeRepository aiDouChangeRepository;
    public void save(IDouChange iDouChange){
        aiDouChangeRepository.save(iDouChange);
    }
 
}

写个测试的controller

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private AiDouService aiDouService;


    //test:
    @RequestMapping(value = "/test", method = {RequestMethod.GET, RequestMethod.POST}, produces = "text/html;charset=UTF-8")
    //测试嘛
    public String test(String type, Integer iDouCount )  {
        DTO dto = new DTO();
        IDouChange iDouChange = new IDouChange();
        iDouChange.setChangeType(type);
        iDouChange.setiDouCount(iDouCount);
        aiDouService.save(iDouChange);
        if (iDouChange == null) {
            dto.code = "-1";
            dto.msg = "Have bean registered";
            return JSON.toJSONString(dto);
        } else {
            return JSON.toJSONString(iDouChange);
        }
    }
}

然后??直接部署呀!!对应传参,测试成功咯!!!

J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构_第1张图片
这里写图片描述

一对多没实现关联,傻逼的插入就是这样的啦

这里写图片描述

三、项目配置注意点:

J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构_第2张图片
这里写图片描述
J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构_第3张图片
这里写图片描述

还有就是在web.xml中映射好spring文件以及springMVC文件

四、快速开发上手技巧:

(1)在一般项目时,使用这个框架Spring Data JPA+Spring+SpringMVC+Maven,快速映射dao层即可编写业务

(2)接口文档工具,swagger+postman,让前端移动端更快速接入

(3)数据库最好还是新建好导入,再用IDEA的persistence导入,这样的话,编码问题就不会出现太多。用IDEA的persistence导入姿势

(4)虽然不建议用jpa自动建表,因为有编码问题,不懂的人,就尴尬了,要搞很久,这个系列的第三篇博客会讲解怎么解决这个的编码问题。


源码下载:J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构

好了,J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构讲完了。本博客是这个系列的第一篇,所以先讲下项目架构。另外,这个系列还有一些我在外包项目过程中做的优化,七牛云,云旺IM等使用,以及解决一些小bug等等技巧,我会尽快出完给大家,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!

更多内容,可以访问JackFrost的博客

你可能感兴趣的:(J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(1)项目架构)