【尚筹网】二、环境搭建一
- 环境搭建总体目标
- 创建工程
- 系统架构图
- 工程创建计划
- 创建空项目
- 创建对应的 Maven 模块
- 建立模块间的依赖
- 创建数据库
- 基于 Maven 的 Mybatis 的逆向过程
- 配置 pom
- 创建 generatorConfig.xml
- 执行逆向工程操作的 maven 指令
- 将逆向工程生成的资源归位
- 父工程依赖管理
- 版本声明
- 依赖管理
- Spring 整合 MyBatis
- 思路
- 具体操作
- 在子工程中加入搭建环境的所需的具体依赖
- 创建 jdbc.properties
- 创建 mybatis-config.xml
- 创建 spring-persist-mybatis.xml
- Spring 配置第一步 配置数据源
- 测试能否连接数据库
- Spring 配置第二步 配置 SqlSessionFactoryBean 及 MapperScannerConfigurer
- 测试能否插入数据
- 日志系统
- 意义
- 具体操作
- 加入 slf4j + logback
- 主动打印日志的方法
- 更换框架的日志系统
环境搭建总体目标
创建工程
系统架构图
工程创建计划
atcrowdfunding01-admin-parent
groupId:com.atguigu.crowd
artifactId:atcrowdfunding01-admin-parent
packaging:pom
atcrowdfunding02-admin-webui
groupId:com.atguigu.crowd
artifactId:atcrowdfunding02-admin-webui
packaging:war
atcrowdfunding03-admin-component
groupId:com.atguigu.crowd
artifactId:atcrowdfunding03-admin-component
packaging:jar
atcrowdfunding04-admin-entity
groupId:com.atguigu.crowd
artifactId: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
创建空项目
创建对应的 Maven 模块
建立模块间的依赖
- webui 依赖 component
- component 依赖 entity
- component 依赖 util
创建数据库
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)
);
基于 Maven 的 Mybatis 的逆向过程
配置 pom
在 atcrowdfunding06-common-reverse 模块的 pom.xml 中配置
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
创建 generatorConfig.xml
在 atcrowdfunding06-common-reverse 模块下的 src/main/resources 目录下创建 generatorConfig.xml,用来配置逆向工程
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--mybatis-generator:generate-->
<context id="atguiguTables" targetRuntime="MyBatis3">
<commentGenerator>
<!--是否去除自动生成的注释true:是;false:否-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码-->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/project_crowd?serverTimezone=Asia/Shanghai"
userId="root"
password="123456">
</jdbcConnection>
<!--默认false,把JDBCDECIMAL和NUMERIC类型解析为Integer,为true时把 JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--targetProject:生成Entity类的路径-->
<javaModelGenerator targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.entity">
<!--enableSubPackages:是否让schema作为包的后缀-->
<property name="enableSubPackages" value="false"/>
<!--从数据库返回的值被清理前后的空格-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--targetProject:XxxMapper.xml映射文件生成的路径-->
<sqlMapGenerator targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!--enableSubPackages:是否让schema作为包的后缀-->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--targetPackage:Mapper接口生成的位置-->
<javaClientGenerator type="XMLMAPPER"
targetProject=".\src\main\java"
targetPackage="com.atguigu.crowd.mapper">
<!--enableSubPackages:是否让schema作为包的后缀-->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!--数据库表名字和我们的entity类对应的映射指定-->
<table tableName="t_admin" domainObjectName="Admin"/>
</context>
</generatorConfiguration>
执行逆向工程操作的 maven 指令
双击即可
将逆向工程生成的资源归位
创建完后给 Admin 添加无参全参构造器,然后给生成的资源归位
父工程依赖管理
版本声明
在 atcrowdfunding01-admin-parent 模块的 pom.xml 中进行版本声明
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--声明属性,对Spring的版本进行统一管理-->
<atguigu.spring.version>4.3.20.RELEASE</atguigu.spring.version>
<!--声明属性,对SpringSecurity的版本进行统一管理-->
<atguigu.spring.security.version>4.2.10.RELEASE</atguigu.spring.security.version>
</properties>
依赖管理
在 atcrowdfunding01-admin-parent 中进行版本声明后,还需要引入依赖
遇到的问题:若依赖基本全部爆红(没下载 jar 包),可以将 dependencyManagement 删去后再重新加载,等下载完 jar 包后再加回去
<dependencyManagement>
<dependencies>
<!-- Spring 依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
<!-- 数据库依赖 -->
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- MyBatis 与 Spring 整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- MyBatis 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.0.0</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 其他日志框架的中间转换包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<!-- Spring 进行 JSON 数据转换依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<!-- JSTL 标签库 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- junit 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 引入 Servlet 容器中相关依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- JSP 页面使用的依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1.3-b06</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<!-- SpringSecurity 对 Web 应用进行权限管理 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>
<!-- SpringSecurity 配置 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>
<!-- SpringSecurity 标签库 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.2.10.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
Spring 整合 MyBatis
思路
具体操作
在子工程中加入搭建环境的所需的具体依赖
在 atcrowdfunding03-admin-component 模块添加依赖
<!-- Spring依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</dependency>
<!-- 数据库依赖 -->
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<!-- MyBatis与Spring整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!-- MyBatis分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<!-- 其他日志框架的中间转换包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<!-- Spring进行JSON数据转换依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<!-- JSTL标签库 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- 引入Servlet容器中相关依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
创建 jdbc.properties
jdbc.user=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.cj.jdbc.Driver
创建 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
创建 spring-persist-mybatis.xml
Spring 配置第一步 配置数据源
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 加载外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
</beans>
测试能否连接数据库
若控制台输出 connection,则连接成功
package com.atguigu.crowd.test;
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.sql.Connection;
import java.sql.SQLException;
/**
* Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
*
* @Desc :
* @Time : 2024/11/17 17:13
* @Author : Code_By_Jasonakeke
* @Email : 2284037977@qq.com
* @Class : CrowdTest
* @IDE : IntelliJ IDEA
*/
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"})
public class CrowdTest {
@Autowired
private DataSource dataSource;
@Test
public void test() throws SQLException {
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
Spring 配置第二步 配置 SqlSessionFactoryBean 及 MapperScannerConfigurer
<!-- 配置 SqlSessionFactoryBean 整合 MyBatis -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- 指定 MyBatis 全局配置文件位置 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
<!-- 指定 Mapper.xml 配置文件位置 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" />
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置 MapperScannerConfigurer 来扫描 Mapper 接口所在的包 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.atguigu.crowd.mapper" />
</bean>
测试能否插入数据
package com.atguigu.crowd.test;
import com.atguigu.crowd.entity.Admin;
import com.atguigu.crowd.mapper.AdminMapper;
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;
/**
* Copyright (C) 2024 - 2024 Jasonakeke, Inc. All Rights Reserved
*
* @Desc :
* @Time : 2024/11/17 17:13
* @Author : Code_By_Jasonakeke
* @Email : 2284037977@qq.com
* @Class : CrowdTest
* @IDE : IntelliJ IDEA
*/
// 在类上标记必要的注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml", "classpath:spring-persist-tx.xml"})
public class CrowdTest {
@Autowired
private AdminMapper adminMapper;
@Test
public void testInsertAdmin() {
Admin admin = new Admin(null, "tom", "123456", "汤姆", "tom@atguigu.com", null);
int count = adminMapper.insert(admin);
System.out.println("受影响行数:" + count);
}
}
日志系统
意义
项目日志系统在现代项目管理中扮演着至关重要的角色。它不仅是记录项目进展、问题和解决方案的工具,还是团队协作、决策支持和项目回顾的重要基础。
-
记录项目进展:
- 项目日志系统能够实时、详细地记录项目的各个阶段和任务的完成情况。
- 这有助于团队成员和项目经理了解项目的当前状态,确保所有工作都在预定的时间表和预算内进行。
-
跟踪问题和风险:
- 通过日志系统,团队成员可以记录在项目执行过程中遇到的各种问题和风险。
- 这些问题和风险可以被分类、优先级排序,并关联到具体的任务或阶段,以便进行后续跟踪和解决。
-
促进团队协作:
- 项目日志系统通常具有协作功能,如评论、点赞和分享等,这有助于增强团队成员之间的沟通和协作。
- 团队成员可以实时查看彼此的日志,了解各自的工作进展和遇到的问题,从而更加紧密地合作。
-
提供决策支持:
- 项目经理和决策层可以通过日志系统获取项目的全面信息,包括进度、成本、质量和风险等方面。
- 这些信息为决策提供了有力的数据支持,有助于项目经理做出更加明智的决策。
-
便于项目回顾和总结:
- 在项目结束后,项目日志系统可以作为项目回顾和总结的重要参考。
- 通过查看日志,团队成员可以了解项目的成功经验和不足之处,为未来的项目提供宝贵的经验和教训。
-
提高项目透明度:
- 项目日志系统增加了项目的透明度,使得所有相关方都能够清晰地了解项目的进展和状态。
- 这有助于建立信任,减少误解和冲突,提高项目的整体效率和质量。
-
支持持续改进:
- 通过分析项目日志中的数据,团队可以识别出项目中的瓶颈、低效环节和潜在改进点。
- 这些信息为项目的持续改进提供了有力的支持,有助于团队不断优化项目管理流程和方法。
综上所述,项目日志系统在项目管理中具有不可替代的作用。它不仅能够提高项目的执行效率和质量,还能够促进团队协作和决策支持,为项目的成功提供有力的保障。因此,在项目管理中,建立和维护一个有效的项目日志系统是非常重要的。
具体操作
加入 slf4j + logback
将 atcrowdfunding03-admin-component 模块中之前日志相关的依赖全部删去,然后加入 slf4j+logback 依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
主动打印日志的方法
@Test
public void testLog(){
// 1.获取 Logger 对象
Logger logger = LoggerFactory.getLogger(CrowdTest.class);
// 2.根据不同日志级别,打印不同级别的日志
logger.debug("这是 DEBUG 级别的日志");
logger.info("这是 INFO 级别的日志");
logger.warn("这是 WARN 级别的日志");
logger.error("这是 ERROR 级别的日志");
}
更换框架的日志系统
- 排除 commons-logging
- 加入转换包(atcrowdfunding03-admin-component 模块)
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>