很多小伙伴工作多年,但是在每次开始一个新项目的时候都要重新开始搭建项目。另一个就是新手小伙伴对于项目如何从零开始搭建的还存在疑问。在这片文章中,正好一次性解决这两个问题。
这是该项目的github地址,大家可以点击下载使用,也欢迎大家start,谢谢。
首先,我们需要创建一个springboot项目。创建方式分为两种:
直接选择【Finish】完成。此时创建了一个空的springboot项目。
springboot官网创建
点击进入springboot官网
最终下载到一个zip文件,解压缩后通过idea导入
打开新生成的springboot项目,可以看到pom.xml里面只有少数几个依赖:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.7.2version>
- <relativePath/>
- parent>
- <groupId>com.examplegroupId>
- <artifactId>demo1artifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>demo1name>
- <description>demo1description>
- <properties>
- <java.version>11java.version>
- properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starterartifactId>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- plugin>
- plugins>
- build>
-
- project>
-
- 复制代码
为了让项目功能相对完善,我们需要补充以下依赖:
基本的Spring和Spring MVC功能
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
- 复制代码
加上这个依赖后,可以使用spring和spring mvc的功能,比如@RestController,@Service,@Autowired,@RequestMapping等等,IOC和AOP的功能都可以使用。
数据库引擎 mysql driver
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.29version>
- dependency>
- 复制代码
目前基本上使用的mysql都是8版本的,所以这里引入8版本的mysql driver;如果有需要引入其他数据库引擎的,可以到maven repository中找合适的依赖。
数据库链接池
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.2.11version>
- dependency>
- 复制代码
一般像数据库链接这样的资源都是比较重的,也就是说,数据库链接创建和销毁需要消耗很多资源,并且数据库链接是经常使用的。那么对于这种情况,一般我们会将数据库链接进行池化,这也就是我们使用druid的原因。如果小伙伴想使用其他的池化工具,比如dbcp,c3p0,HikariCP等等,也是可以替换的。
mybatis依赖
- <dependency>
- <groupId>org.mybatis.spring.bootgroupId>
- <artifactId>mybatis-spring-boot-starterartifactId>
- <version>2.2.2version>
- dependency>
- 复制代码
mybatis其实就是一个基于数据库driver实现数据增删查改功能,并且将操作结果更加友好传递给java应用层的工具。如果没有mybatis的话,我们也可以自己基于driver去操作数据库,但是使用体验确实不好,或者我们自己重新创造一个类似的mybatis框架。
分页依赖
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelper-spring-boot-starterartifactId>
- <version>1.4.3version>
- dependency>
- 复制代码
在业务需求上,我们的某些列表功能往往需要对数据进行分页查询。所以我们提前把这个工具引入进来,它可以在我们执行查询操作的时候,对查询功能实现自动分页,无需开发者过多干预。
lombok工具
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
- 复制代码
这个工具很有用,它让我们避免了写过多的get,set方法,可以自动生成构造函数,hashcode方法,equals方法等等,这就是典型的效率工具,所以强烈推荐使用。
mybatis-generator插件
- <plugin>
- <groupId>org.mybatis.generatorgroupId>
- <artifactId>mybatis-generator-maven-pluginartifactId>
- <version>1.4.1version>
- <configuration>
- <verbose>trueverbose>
- <overwrite>trueoverwrite>
- <configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
- configuration>
- plugin>
- 复制代码
这是一个代码生成工具,它可以帮我们生成大多数的mybatis代码,比如生成单表的增删查改功能,还有就是单表的复杂条件查询功能。所以这也是一个效率功能,可以少写很多代码。
插件添加完成后,可以在maven视图中可以看到mybatis-generator插件:
但是这个插件还不能正常运行,需要后面我们配置好后才行。
我们配置了依赖和插件后,需要把一些对应的项目配置也写好,这样才能让这个项目正常运行起来。
配置文件的话,我目前选择比较好用的yml格式的application.yml,小伙伴们也可以把项目中的application.properties重命名一下,改成application.yml。
数据库配置
- spring:
- # 数据库链接配置
- datasource:
- url: jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: 数据库用户名
- password: 数据库密码
- # 链接池
- type: com.alibaba.druid.pool.DruidDataSource
- druid:
- # 链接池初始化大小
- initial-size: 8
- # 最大活跃数
- max-active: 16
- # 最小空闲数
- min-idle: 1
- # 最大等待时间
- max-wait: 60000
- 复制代码
博客中不方便对外透露我自己的数据库相关ip、端口等数据,所以就用中文替代,小伙伴可以根据自己的数据库的配置作出对应的修改。
配置完毕后,我们的项目就可以正确链接数据库,并且也已经使用了链接池化的功能了。
mybatis配置
- # mybatis配置
- mybatis:
- check-config-location: true
- # mybatis框架配置文件,对mybatis的生命周期起作用
- config-location: "classpath:mybatis/mybatis-config.xml"
- # 配置xml路径
- mapper-locations: "classpath:mybatis/mapper/*Mapper.xml"
- # 配置model包路径
- type-aliases-package: "com.example.awesomespring.dao.entity.*"
- 复制代码
此外,根据以上配置,我们还需要在resources创建mybatis文件夹,以便我们存放对应的mybatis-config.xml文件以及Mapper.xml文件;
mybatis-config.xml文件是用来配置mybatis框架如何运行的配置;
Mapper.xml文件是后续通过mybatis-generator插件自动生成的操作数据库的配置文件;
mybatis-config.xml:
- configuration PUBLIC
- "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <settings>
-
- <setting name="cacheEnabled" value="true"/>
-
- <setting name="lazyLoadingEnabled" value="true"/>
-
- <setting name="multipleResultSetsEnabled" value="true"/>
-
- <setting name="useColumnLabel" value="true"/>
-
- <setting name="useGeneratedKeys" value="false"/>
-
- <setting name="defaultExecutorType" value="SIMPLE"/>
-
- <setting name="defaultStatementTimeout" value="60"/>
-
- <setting name="mapUnderscoreToCamelCase" value="true"/>
- settings>
- <plugins>
-
- <plugin interceptor="com.github.pagehelper.PageInterceptor" />
- plugins>
- configuration>
- 复制代码
mybatis-generator配置
前面我们在添加mybatis-generator插件的时候就已经指定了相关配置文件的位置,那么我们就把generatorConfig.xml创建出来
generatorConfig.xml:
- generatorConfiguration
- PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
-
- <generatorConfiguration>
-
- <properties resource="mybatis/generator/generator.properties"/>
-
- <classPathEntry location="${classPathEntry}" />
-
- <context id="mysql_tables" targetRuntime="MyBatis3">
-
- <commentGenerator>
- <property name="suppressAllComments" value="true" />
- <property name="suppressDate" value="true" />
- commentGenerator>
-
-
- <jdbcConnection driverClass="${driverClass}"
- connectionURL="${connectionURL}"
- userId="${userId}"
- password="${password}">
- jdbcConnection>
-
- <javaTypeResolver >
- <property name="forceBigDecimals" value="false" />
- javaTypeResolver>
-
-
- <javaModelGenerator targetPackage="${modelTargetPackage}" targetProject="src/main/java">
- <property name="enableSubPackages" value="true" />
- <property name="trimStrings" value="true" />
- javaModelGenerator>
-
-
- <sqlMapGenerator targetPackage="${sqlMapTargetPackage}" targetProject="src/main/resources">
- <property name="enableSubPackages" value="true" />
- sqlMapGenerator>
-
-
- <javaClientGenerator type="XMLMAPPER" targetPackage="${javaClientTargetPackage}" targetProject="src/main/java">
- <property name="enableSubPackages" value="true" />
- javaClientGenerator>
-
-
- <table schema="${schema}" tableName="${tableName}" domainObjectName="${domainObjectName}">
- table>
-
- context>
- generatorConfiguration>
- 复制代码
这个文件头如果有报红,没有关系,不用管,不影响功能。
通过引入generator.properties的方式,我们把里面一些需要修改的位置全部变量化了,所以我们还需要补充一个generator.properties文件:
- # 我们需要提供一个driver包所在的路径,一般在.m2文件夹里面,因为所有maven下载的依赖包都会放在这里;
- # 不知道.m2文件夹位置的可以找一下相关资料
- classPathEntry=~/.m2/repository/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar
- driverClass=com.mysql.cj.jdbc.Driver
- # 一定要改成自己的数据库ip、端口和名称
- connectionURL=jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
- # 一定要修改成自己的数据库用户名
- userId=数据库用户名
- # 一定要修改成自己的数据库密码
- password=数据库密码
- # 实体类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
- modelTargetPackage=com.example.awesomespring.dao.entity
- # Mapper.xml存放的路径,在resources里面,记住要提前创建好;要和application.yml里面的mapper-locations路径对上,两个配置的表达方式不同,这个里面不需要加classpath。
- sqlMapTargetPackage=mybatis/mapper
- # mapper类所放的包名,根据自己的项目包名修改,记住要提前把包名创建好
- javaClientTargetPackage=com.example.awesomespring.dao.mapper
- # 哪个数据库
- schema=awesome_spring
- # 哪个表
- tableName=account
- # 生成的实体类名称
- domainObjectName=Account
- 复制代码
至此,我们就可以正常运行mybatis-generator插件了,现在我们打开maven视图,双击mybatis-generator插件:
完成后,我们会发现项目中已经自动生成了对应的数据表实体类,Mapper接口,Mapper.xml等文件。
另外还需要注意的是,因为我们生成的Mapper.xml是在resources里面,这些文件是需要在项目打包的时候一起打进去的,所以我们还需要配置一下pom.xml中的build操作,把自动生成的Mapper.xml打包进去:
- <resources>
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>**/*.propertiesinclude>
- <include>**/*.ymlinclude>
- <include>**/*.xmlinclude>
- includes>
- <filtering>truefiltering>
- resource>
- resources>
- 复制代码
最终,我们的项目基本配置完毕,最后一步,让springboot扫描所有的mybatis接口,我们需要在springboot启动类加上@MapperScan(basePackages = "mapper类所放的包名")注解;这样springboot就会把所有的Mapper接口全部扫描进去,达到我们在springboot中集成mybatis的目的了。
全部配置完毕后,我们就可以写代码开始一天的crud了,哈哈!
最后,把application.yml和pom.xml展示出来:
application.yml:
- spring:
- # 数据库链接配置
- datasource:
- url: jdbc:mysql://数据库ip:数据库端口/数据库名称?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=UTC
- driver-class-name: com.mysql.cj.jdbc.Driver
- username: 数据库用户名
- password: 数据库密码
- # 链接池
- type: com.alibaba.druid.pool.DruidDataSource
- druid:
- # 链接池初始化大小
- initial-size: 8
- # 最大活跃数
- max-active: 16
- # 最小空闲数
- min-idle: 1
- # 最大等待时间
- max-wait: 60000
- # mybatis配置
- mybatis:
- check-config-location: true
- # mybatis框架配置文件,对mybatis的生命周期起作用
- config-location: "classpath:mybatis/mybatis-config.xml"
- # 配置xml路径
- mapper-locations: "classpath:mybatis/mapper/*Mapper.xml"
- # 配置model包路径
- type-aliases-package: "com.example.awesomespring.dao.entity.*"
-
- # 日志配置
- logging:
- pattern:
- # 日志输出格式
- console: "%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger){cyan} : %msg%n"
- level:
- # trace < debug < info < warn < error < fatal
- # 全局日志级别
- root: info
- # 指定包日志级别
- com.example.awesomespring: warn
- 复制代码
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
- <parent>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-parentartifactId>
- <version>2.7.2version>
- <relativePath/>
- parent>
- <groupId>com.examplegroupId>
- <artifactId>awesome-springartifactId>
- <version>0.0.1-SNAPSHOTversion>
- <name>awesome-springname>
- <description>awesome-springdescription>
- <properties>
- <java.version>11java.version>
- properties>
- <dependencies>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <optional>trueoptional>
- dependency>
-
- <dependency>
- <groupId>org.mybatis.spring.bootgroupId>
- <artifactId>mybatis-spring-boot-starterartifactId>
- <version>2.2.2version>
- dependency>
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelper-spring-boot-starterartifactId>
- <version>1.4.3version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.29version>
- dependency>
-
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.2.11version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-testartifactId>
- <scope>testscope>
- dependency>
- dependencies>
-
- <build>
-
- <resources>
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>**/*.propertiesinclude>
- <include>**/*.ymlinclude>
- <include>**/*.xmlinclude>
- includes>
- <filtering>truefiltering>
- resource>
- resources>
- <plugins>
-
- <plugin>
- <groupId>org.mybatis.generatorgroupId>
- <artifactId>mybatis-generator-maven-pluginartifactId>
- <version>1.4.1version>
- <configuration>
- <verbose>trueverbose>
- <overwrite>trueoverwrite>
- <configurationFile>${basedir}/src/main/resources/mybatis/generator/generatorConfig.xml
- configurationFile>
- configuration>
- plugin>
-
- <plugin>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-maven-pluginartifactId>
- <configuration>
- <excludes>
- <exclude>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- exclude>
- excludes>
- configuration>
- plugin>
- plugins>
- build>
- project>