Spring boot搭建
环境:
jdk1.8
mysql5.7
mybatis
maven3
idea
开始Spring boot
选择自己项目的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, 异常处理, 权限拦截等