Spring boot多模块web项目搭建

环境:

jdk1.8

mysql5.7

mybatis

maven3

idea

开始Spring boot

官网地址:https://start.spring.io/

选择自己项目的group/artifact后, 点击生成项目下载zip包

在自己的workspace新建project文件夹,将zip包解压到project文件夹内, 用idea打开project项目

 

修改项目环境配置

1. setting/maven修改maven安装位置, repository位置

2. project structure中修改jdk

3.修改完成后reimport maven

4. 等待idea下载完成依赖找到主类就可以启动项目了

没有报错,ok开始下一步

 

构建common模块

一般项目不可能是单模块项目, 要先有一个基础的common包提供基础的model,tools工具等, 并让其他模块依赖次基础模块. 

所以这一步在将原有的子模块复制到父模块并重命名为common

进入common模块的pom.xml, 修改artifactid和name为common

删除common模块的启动类

进入ying模块加入对common模块的依赖

		<dependency>
			<groupId>com.song</groupId>
			<artifactId>common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

 

完成后在maven project重重新导入两个模块并reimport

搭建依赖

yaml格式的配置文件看起来更清晰, 所以我把配置文件application.properties文件改成了application.yml, 这点是个人喜好, 不改也一样的哈

在yml中写入项目端口配置

server:
    port: 9001

注:yml对格式要求严格, 冒号后务必跟一个空格

 

1.引入web模块

打开pom.xml, 在dependencies中加入依赖如下

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

第一个restful api

新建controller, 编写第一个controller:

public class FirstController {

    @RequestMapping("/test")
    public String index() {
        return "Hello World!";
    }

}

启动项目后就能在http://localhost:9002/api/test访问到hello world了

2.整合mybatis, 引入mysql数据库

引入连接mysql-connector连接mysql数据库

	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.21</version>
	</dependency>

在application.yml中加入数据库配置, 和指定mapper文件为准

spring:
    datasource:
        url: jdbc:mysql://192.168.4.171:3306/test
        username: root
        password: 111111
        driver-class-name: com.mysql.jdbc.Driver

mybatis:
    mapper-locations: classpath:mapper/*.xml

 

在数据库中新建user表

我比较懒, 所以bean, dao, mybatis xml都用mybatis generator生成出来

所以接下来配置mybatis generator, 不用的童靴略过

3. 整合mybatis generator

在common模块的pom.xml中加入mybatis-generator插件

                <plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.6</version>
				<configuration>
					<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>

 

在common中resources下新建generator.properties文件写入数据库配置如下:

db.driverLocation=F:/repository/mysql/mysql-connector-java/5.1.45/mysql-connector-java-5.1.45.jar
#注意这里是我repository的绝对路径, 这里要修改!

spring.datasource.url = jdbc:mysql://192.168.4.171:3306/test
spring.datasource.username = root
spring.datasource.password = 111111
spring.datasource.driver-class-name = com.mysql.jdbc.Driver

继续在resources下新建mybatis-generator-config.xml文件写入generator的配置bean,dao生成位置和要生成的表等, 内容如下:

<?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>
        <properties resource="generator.properties"></properties>

        <classPathEntry location="${db.driverLocation}"/>

        <context id="default" targetRuntime="MyBatis3">

                <commentGenerator>
                        <property name="suppressDate" value="true"/>
                        <property name="suppressAllComments" value="true"/>
                </commentGenerator>

                <!--jdbc的数据库连接-->
                <jdbcConnection driverClass="${spring.datasource.driver-class-name}"
                                connectionURL="${spring.datasource.url}"
                                userId="${spring.datasource.username}"
                                password="${spring.datasource.password}">
                </jdbcConnection>

                <javaTypeResolver>
                        <property name="forceBigDecimals" value="false"/>
                </javaTypeResolver>

                <javaModelGenerator targetPackage="com.song.ying.model" targetProject=".\src\main\java">
                        <property name="enableSubPackages" value="false"/>
                        <property name="constructorBased" value="true"/>
                        <property name="trimStrings" value="true"/>
                        <property name="immutable" value="false"/>
                </javaModelGenerator>

                <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
                        <property name="enableSubPackages" value="false"/>
                </sqlMapGenerator>

                <javaClientGenerator type="XMLMAPPER" targetPackage="com.song.ying.dao" targetProject=".\src\main\java">
                        <property name="enableSubPackages" value="false"/>
                </javaClientGenerator>

                <!--使用前修改这里表的配置. 运行==> Edit config ==> +maven命令: mybatis-generator:generate -e ==> 指定当前文件夹 ==> run-->
                <table tableName="user" domainObjectName="User"
                       enableCountByExample="false" enableUpdateByExample="false"
                       enableDeleteByExample="false" enableSelectByExample="false"
                       selectByExampleQueryId="false">
                </table>

        </context>
</generatorConfiguration>

在idea的Edit config ==> +maven命令: mybatis-generator:generate -e ==> 指定当前文件夹 ==> 点击运行

成功后就在common包下生成了dao,mapper,bean文件, 爽歪歪

但是要注意: 1. dao文件和mapper.xml不属于common模块, 手动移到属于它的模块下

                      2. dao文件现在的名字是mappe, 要手动改成dao, 并且注意mapper.xml下对dao的引用路径也要改!!!

                      3. 每次生成前要改配置最后表名和model名

把dao和mapper移到ying模块下并修改后开始完成controller和service层

 

4. 完成controller和service层

完成后的结构:

service内容:

public interface UserService {

    User getUserById(Integer id);

}

service实现(记得加@service注解)

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserDao userDao;

    @Override
    public User getUserById(Integer id) {
        return userDao.selectByPrimaryKey(id);
    }
}

 

controller层

@RestController
@RequestMapping(value ="/user")
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping("/get/{id}")
    public User getAll(@PathVariable Integer id) {
        return userService.getUserById(id);
    }

}

在数据库手插一条数据

完成后重新启动项目

访问http://localhost:9001/user/get/1

ok, mybatis, 和mybatis-generator整合成功

 

5. 整合AOP切controller日志

在common包pom.xml中添加aop依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

在业务模块新建config包, 写入aop代码如下:

@Aspect
@Component
public class WebLogAspect {

    private Logger logger = LoggerFactory.getLogger(getClass());

    //多个这样配置: @Pointcut("execution(public * com.song.ying.controller..*.*(..))||execution(public * com.song.ying.api..*.*(..)))")
    @Pointcut("execution(public * com.song.ying.api..*.*(..))")
    public void webLog(){}

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 记录下请求内容
        logger.info("\n [*******REQUEST*******] \n [URL:]{} \t [HTTP_METHOD:]{} \t [IP:]{} \n [CLASS_METHOD:]{} \n [ARGS:]{}"
            ,request.getRequestURL().toString(), request.getMethod(), request.getRemoteAddr()
            ,joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
            ,Arrays.toString(joinPoint.getArgs()));

    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 处理完请求,返回内容
        logger.info("\n [*******RESPONSE*******] \n " + ret);
    }

}

再次重启项目,用浏览器发送请求, 即可看到打印日志

今天先到这了......后续还有很多东西需要整合进去, 比如日志输出, deruid, 异常处理, 权限拦截等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值