尚筹网-后台环境搭建01

1.环境搭建总目标:

尚筹网-后台环境搭建01_第1张图片

2.环境配置:

集成开发IDE:IntelliJ IDEA 2021.3.1

开发工具:JDK.1.8.0

管理项目:Maven,版本采用3.6.3,采用多模块开发

数据库:MySql-5.7.23

本地服务器:Tomcat-8.5.20

3.创建工程:

3.1.工程架构图

尚筹网-后台环境搭建01_第2张图片

3.2.工程创建计划

      • atcrowdfunding01-admin-parent
      • groupId:com.atguigu.crowd
      • artifactI:atcrowdfunding01-admin-parent
      • packaging:pom

      • atcrowdfunding02-admin-webui
      • groupId:com.atguigu.crowd
      • artifactI:atcrowdfunding02-admin-webui
      • packaging:war

      • atcrowdfunding03-admin-component
      • groupId:com.atguigu.crowd
      • artifact:atcrowdfunding03-admin-component
      • packaging:jar

      • atcrowdfunding04-admin-entity
      • groupId:com.atguigu.crowd
      • artifactI:atcrowdfunding04-admin-entity
      • packaging:jar

      • atcrowdfunding05-common-util
      • groupId:com.atguigu.crowd
      • artifactId:atcrowdfunding05-common-util
      • packaging:jar

      • atcrowdfunding06-common-reverse
      • groupId:com.atguigu.crowd
      • artifactId:atcrowdfunding06-common-reverse
      • packaging:jar

4.工程之前的依赖关系:

父工程信息:

尚筹网-后台环境搭建01_第3张图片

atcrowdfunding02-admin-webui 依赖于

尚筹网-后台环境搭建01_第4张图片

atcrowdfunding03-admin-component 依赖于

尚筹网-后台环境搭建01_第5张图片

5.创建管理员数据库表:

CREATE DATABASE `project_crowd` CHARACTER SET utf8;
use project_crowd; drop table if exists t_admin;
create table t_admin
(
  id int not null auto_increment, # 主键 
  login_acct varchar(255) not null, # 登录账号 
  user_pswd char(32) not null, # 登录密码
  user_name	varchar(255) not null, # 昵称 
  email	varchar(255) not null,	# 邮件地址 
  create_time	char(19),	# 创建时间 
  primary key (id)
);

6.基于 Maven 的 MyBatis 逆向工程

尚筹网-后台环境搭建01_第6张图片

6.1.pom.xml文件配置



  
    org.mybatis
    mybatis
    3.2.8	 
  



  
  
    
    
      org.mybatis.generator
      mybatis-generator-maven-plugin
      1.3.0
      
      
        
        
          org.mybatis.generator
          mybatis-generator-core
          1.3.2
        
        
        
          com.mchange
          c3p0
          0.9.2
        
         
        
          mysql
          mysql-connector-java
          5.1.8
        
      
    
  

尚筹网-后台环境搭建01_第7张图片

6.2 generatorConfig.xml


 
    
     
        
        
    
        
        
        
        
        
            
        
        
        
            
            
            
            
        
        
        
            
            
        
        
        
            
            
        
        
        

6.3 执行逆向生成操作的 Maven 命令

mybatis-generator:generate

尚筹网-后台环境搭建01_第8张图片

6.4 逆向工程生成的资源各归各位

WebUI 工程将来在 Tomcat 上运行时,现在 resources 目录下的资源会直接放在 WEB-INF/classes 目录(也就是类路径)下,所以放在 resources 目录下运行的时候更容易找到。

逆向工程生成的实体类放在admin-entity

尚筹网-后台环境搭建01_第9张图片

生成的Mapper接口放在admin-component

尚筹网-后台环境搭建01_第10张图片

生成的Mapeer映射文件放在admin-webui

尚筹网-后台环境搭建01_第11张图片

7.父工程依赖管理

7.1 版本声明

 

        8
        8

        
        4.3.20.RELEASE
        
        4.2.10.RELEASE
        2.3.0
    

    
        
            
             
            org.springframework
            spring-orm
            ${atguigu.spring.version}
        
             
            org.springframework
            spring-webmvc
            ${atguigu.spring.version}
        
         
            org.springframework
            spring-test
            ${atguigu.spring.version}
        
             
            org.aspectj
            aspectjweaver
            1.9.2
        
            

            
                cglib
                cglib
                2.2
            
            
             
            mysql
            mysql-connector-java
            5.1.3
        
            
            
                com.alibaba
                druid
                1.0.31
            

            
            
                org.mybatis
                mybatis
                3.2.8
            
            
            
                org.mybatis
                mybatis-spring
                1.2.2
            
            
            
                com.github.pagehelper
                pagehelper
                4.0.0
            
            

            
                org.apache.logging.log4j
                log4j-api
                ${log4j2.version}
            

            
                org.apache.logging.log4j
                log4j-core
                ${log4j2.version}
            

                
                    org.slf4j
                    slf4j-api
                    1.7.36
                

            
            
                ch.qos.logback
                logback-classic
                1.2.11
            

            
            
            
                org.slf4j
                jul-to-slf4j
                1.7.36
            

            
            
                com.fasterxml.jackson.core
                jackson-core
                2.9.8
            
            
                com.fasterxml.jackson.core
                jackson-databind
                2.9.8
            
            
            
                jstl
                jstl
                1.2
            
            
            
                junit
                junit
                4.12
                test
            
            
            
                javax.servlet
                servlet-api
                2.5
                provided
            
            
            
                javax.servlet.jsp
                javax.servlet.jsp-api
                ${jsp-api.version}
                provided
            
            
            
                com.google.code.gson
                gson
                2.8.5
            

            
            
                org.springframework.security
                spring-security-web
                4.2.10.RELEASE
            

            
            
                org.springframework.security
                spring-security-config
                4.2.10.RELEASE
            

            
          
            org.springframework.security
            spring-security-taglibs
            4.2.10.RELEASE
        

        
    

7.2 依赖信息来源

到专门网站搜索

Maven远程仓库

调试
SpringMVC 需要 jackson 的支持,来处理 JSON 数据。但是 SpringMVC 并没有依赖jackson。所以需要我们自己保证 jar 包之间的兼容性。

8 Spring 整合 MyBatis

8.1 目标

adminMapper 通过 IOC 容器装配到当前组件中后,就可以直接调用它的方法,享受到框架给我们提供的方便

尚筹网-后台环境搭建01_第12张图片

8.2 思路

尚筹网-后台环境搭建01_第13张图片

8.3 操作清单

在子工程中加入搭建环境所需要的具体依赖

准备 jdbc.properties

创建 Spring 配置文件专门配置 Spring 和 MyBatis 整合相关

在 Spring 的配置文件中加载 jdbc.properties 属性文件

配置数据源测试从数据源中获取数据库连接

配置 SqlSessionFactoryBean

装配数据源

指定 XxxMapper.xml 配置文件的位置指定 MyBatis 全局配置文件的位置(可选)

配置 MapperScannerConfigurer

测试是否可以装配 XxxMapper 接口并通过这个接口操作数据库

8.4 操作步骤详解

8.4.1在子工程中加入搭建环境所需的具体依赖子工程:

选择 component 工程。原因是具体依赖和 component 工程相关。

尚筹网-后台环境搭建01_第14张图片

 
        
     
        org.springframework
        spring-orm
         
         
             
                 commons-logging
                 commons-logging
             
         
    

         
        org.springframework
        spring-webmvc
    

         
        org.aspectj
        aspectjweaver
    
         
        cglib
        cglib
    
         
        mysql
        mysql-connector-java
    
        
        
            com.alibaba
            druid
        
        
        
        org.mybatis
        mybatis
    
        	 
        org.mybatis
        mybatis-spring
    
         
        com.github.pagehelper
        pagehelper
    
        
        
            com.fasterxml.jackson.core
            jackson-core
         
        com.fasterxml.jackson.core
        jackson-databind
    
         
        jstl
        jstl
    
         			         
        com.google.code.gson
        gson
    
        
            org.mybatis
            mybatis
        

8.4.2 数据库连接信息

jdbc.properties

尚筹网-后台环境搭建01_第15张图片

jdbc.user=root
jdbc.password=123
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useUnicode=true&characterEncoding=UTF-8 
jdbc.driver=com.mysql.jdbc.Driver

8.4.3 mybatis-config.xml

尚筹网-后台环境搭建01_第16张图片



  


8.4.4 创建 spring-persist-mybatis.xml

尚筹网-后台环境搭建01_第17张图片

8.4.5 Spring 具体配置:第一步配置数据源

在 spring-persist-mybatis.xml 配置文件进行配置









		 



在做测试之前先在atcrowdfunding02-admin-webui模块的pom.xml添加依赖包

    
            org.springframework
            spring-test
        
        
        
            junit
            junit
            test
     

创建 Spring 的 Junit 测试类

// 指定 Spring 给 Junit 提供的运行器类
@RunWith(SpringJUnit4ClassRunner.class)
// 加载 Spring 配置文件的注解	 
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"}) 
public class CrowdSpringTest {
    
    @Autowired private DataSource dataSource;
    
    @Test
    public void testDataSource() throws SQLException {
        // 1.通过数据源对象获取数据源连接
        Connection connection = dataSource.getConnection();
        // 2.打印数据库连接
        System.out.println(connection);
    }
}

8.4.6 Spring 具体配置:第二步配置 SqlSessionFactoryBean


    
      
      
      
      
      
       
	 

8.4.7 Spring 具体配置:第三步配置 MapperScannerConfigurer





 	 

测试

 @Autowired
    private AdminMapper adminMapper;

  @Test
    public void addAdmintest(){
        Admin admin = new Admin(null,"admin","123","叶书文","[email protected]",null);
       int count = adminMapper.insert(admin);
        System.out.println("受影响的行数"+count);
    }

8.4.8 总结

尚筹网-后台环境搭建01_第18张图片

9 日志系统

9.1 重要意义

系统在运行过程中出了问题就需要通过日志来进行排查,所以我们在上手任何新技术的时候,都要习惯性的关注一下它是如何打印日志的。

尚筹网-后台环境搭建01_第19张图片

9.2 技术选型

9.2.1 总体介绍

尚筹网-后台环境搭建01_第20张图片

9.2.3不同日志系统的整合

尚筹网-后台环境搭建01_第21张图片

尚筹网-后台环境搭建01_第22张图片

9.3 具体操作

9.3.1 初始状态

Spring 使用 commons-logging 日志包。打印的日志是下面这样的。不用细看,截图放在这是为了和后面日志打印的情况对比。

尚筹网-后台环境搭建01_第23张图片

9.3.2 加入 slf4j+logback 依赖信息是:


  org.slf4j
  slf4j-api
  1.7.7
 
  ch.qos.logback
  logback-classic
  1.2.3	 

代码不变,日志情况是:

尚筹网-后台环境搭建01_第24张图片

9.3.3 我们主动打印的日志把查询到的 Admin 对象以日志的方式打印出来,代码如下:

Admin admin = adminMapper.selectByPrimaryKey(1);

/ 获取日志记录对象
Logger logger = LoggerFactory.getLogger(CrowdTest.class);
// 按照 Debug 级别打印日志
logger.debug(admin.toString());

※使用日志打印信息和使用 sysout 打印信息的区别:sysout 如果不删除,那么执行到这里必然会打印;如果使用日志方式打印,可以通过日志级别控制信息是否打印。效果

尚筹网-后台环境搭建01_第25张图片

这里我们看到除了 Druid 数据源打印了两条日志,Spring 和 MyBatis 并没有通过 slf4j 打印日志。所以下一步我们要考虑的就是如何将框架所使用的日志系统统一到 slf4j。

9.3.4 在atcrowdfunding03-admin-component模块 pom.xml更换框架的日志系统


        org.springframework
        spring-orm
         
         
             
                 commons-logging
                 commons-logging
             
         
    

atcrowdfunding02-admin-webui模块 pom.xml同样的

     
            org.springframework
            spring-test
          
            
                
                    commons-logging
                    commons-logging
                
            
        

这个时候如果运行程序会抛异常,因为我们把 Spring 依赖的 commons-logging 排除了,而这个依赖是必须有的,不是可选的。

第二步:在atcrowdfunding03-admin-component模块 pom.xml加入转换包

     
            org.slf4j
            jcl-over-slf4j
            1.7.25
        

打印效果局部:

9.3.5 logback 配置文件 logback

工作时的具体细节可以通过 logback.xml 来配置。

尚筹网-后台环境搭建01_第26张图片




    
     
        
        
        [%d{HH:mm:ss.SSS}]	[%-5level]	[%thread]	[%logger] [%msg]%n
    

    
    
    
    
        
        
    
    
    

10 声明式事务

10.1 目标

从事务角度:一个事务方法中包含的多个数据库操作,要么一起提交、要么一起回 滚。也就是说事务方法中的多个数据库操作,有任何一个失败,整个事务全部回滚。从声明式角度:由 Spring 来全面接管数据库事务。用声明式代替编程式。

try {
    // 核心操作前:开启事务(关闭自动提交)
    // 对应 AOP 的前置通知
    connection.setAutoCommit(false);
    // 核心操作
    adminService.updateXxx(xxx, xxx);
    // 核心操作成功:提交事务
    // 对应 AOP 的返回通知
    connection.commit();
}catch(Exception e){
    // 核心操作失败:回滚事务
    // 对应 AOP 的异常通知
    connection.rollBack();
}finally{
    
    // 不论成功还是失败,核心操作终归是结束了
    // 核心操作不管是怎么结束的,都需要释放数据库连接
    // 对应 AOP 的后置通知
    if(connection != null){ connection.close();
   
}

10.2 思路

尚筹网-后台环境搭建01_第27张图片

10.3 操作

10.3.1 加入 AOP 依赖包



  org.aspectj
  aspectjweaver



  cglib
  cglib

10.3.2 第一步:创建 spring-persist-tx配置文件

尚筹网-后台环境搭建01_第28张图片

10.3.3 第二步:配置事物管理

 
    

    
    
        
        
    

10.3.4 第三步:配置 AOP


    
        
        
        
        
        
        
    

10.3.5 第四步:配置事务属性

    
    
    
    
        
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
        
    

测试

尚筹网-后台环境搭建01_第29张图片

@Service
public class AdminServiceImpl implements AdminService {

    @Autowired
    private AdminMapper adminMapper;

    @Override
    public void saveAdmin(Admin admin) {
        adminMapper.insert(admin);
    }
}
package com.crowd;

@RunWith(SpringJUnit4ClassRunner.class)
// 加载 Spring 配置文件的注解
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml","classpath:spring-persist-tx.xml"})
public class CrowdSpringTest {
    @Autowired
    private AdminMapper adminMapper;

    @Autowired
    private AdminService adminService;

    @Test
    public void testTx(){
        Admin admin = new Admin(null, "jakc", "123", "萧枫", "[email protected]", null);
        adminService.saveAdmin(admin);
    }

    @Test
    public void testLog(){
        //1.获取Logger对象,这里传入的Class对象就是当前打印日志的类
        Logger logger = LoggerFactory.getLogger(CrowdSpringTest.class);
        //2.根据不同的日志级别打印日志
        logger.debug("Hello I am Debug level!!!");

        logger.info("Info level!!!");

        logger.warn("Warn leven!!!");

        logger.error("Error level!!!");
    }
}

你可能感兴趣的:(尚筹网项目,mybatis,java,maven)