前言:
的确,Idea自带的springboot项目插件:Initializer给我们创建一个springboot项目带来了极大的便利性,但是,如果我们知道如何从一个普通的maven项目新建成springboot项目,并解决这个过程遇到的一些小问题,我相信对使用插件创建springboot项目会有一个更深的理解。
正文:
不通过现有的idea的插件initializer进行创建springboot,而是通过最原始的方式,新建普通的maven工程,然后一点一点的进行相关的配置。
第一步:file-> new module(或者file->new project)
第二步:选中maven项目,下一步:
第三步:分别点击右上角的省略号,将其设置成none。设置这个的目的是:将该模块设置成单独的模块,表示该模块不属于任何模块。
并且设置好GroupId和ArtifactId,设置后的效果如下:
第四步:点击next,并点击finish
下图错误如图所示:
正确的设置路径:
第五步:查看当前的目录结构如下:
可以看到很简单,什么都没有,只有一个pom.xml,截图如下:
第六步:因为我们采用的是使用的是最普通的创建maven项目的方式来创建springboot的项目,所有在项目中并没有springboot的父级依赖,需要手动添加springboot的父级依赖以及添加mysql的依赖包和mybatis的依赖包。父级依赖添加成功之后,该项目就变成了springboot项目。
第七步:为了测试springboot,需要使用web进行测试,所以需要添加web的启动依赖包。如果需要其他的包,比如测试依赖包,jsp的包,都需要在pom.xml中添加。至此,pom.xml的依赖配置完毕。
第八步:在Springboot的核心配置文件application.properties中配置MyBatis的Mapper.xml文件所在的位置:
SpringBoot的核心配置文件在src/main/resource文件夹中,由于是采用的是最普通的maven创建项目的方式,所以,这里需要新建application.properties文件。
首先,创建文件:
然后,点击file之后,出现下图:
然后,在src/main/java目录下创建一个包,来放置mapper.xml的文件。
最后,在application.properties中配置MyBatis的Mapper.xml文件所在的位置,即将上面的mapper的包中的所有.xml的路径配置在文件中,截图如下:
第九步:在Springboot的核心配置application.properties中配置数据源的基本四项,截图如下:
第十步:在写程序的时候,在MyBatis的Mapper接口中添加@Mapper注解或者在运行的主类上添加:@MapperScan("com.hnxy.springboot.mapper"),作用是告知程序,哪些包添加了注解。(相当于spring中的@Component注解(@Respository、@Service、@Controller))
如下:
至此,创建springboot项目该配置的东西就配置好了。
第十一步:自动根据数据库的表生成实体类。
1:新建并写入GeneratorMapper.xml文件。
利用maven的反向工具,将数据库中的表生成对应的类,也就是给我们建好entity类。这里要用到一个文件,称之为:GeneratorMapper.xml,将其放置在项目的直接目录下,跟pom.xml是一个级别。该文件作用:连接数据库,读取相应的字段生成对应的类。
完整代码:见补充1。
2:配置文件有了,在pom.xml中添加一个插件,来执行该文件,进行反向工程的执行。pom.xml中添加插件的代码如下:
3:生成实体类
点击Idea界面的右侧,找到Maven,点击打开,找到我们刚刚插入的插件的名称,点击generate即可生成实体类。如下:
此时控制台会显示build成功,如下:
此时,再来看一下,新生成的目录结构:
接下来就开始写代码了:
第十二步:创建Controller类、Service类用来处理具体的代码。
目录结构如下:
Controller类的代码:
Service类的代码:
mapper包相当于springMVC开发中的dao层包。
在Mapper接口中新增的方法:getAllUserEntity();
这里与springMVC不同的是,mapper接口只给出了接口,并没有给出相应的实现,实际上,该接口中的实现都放在mapper包下的UserEntityMapper.xml文件中了。所以,
当我们新增方法的时候,其实现也要在该配置文件中实现。截图如下:
第十三步:新建springboot的主类,注意该类应该在mapper包和model包的上一级,这样,才能扫描到其下一级目录中的注解类,我们称之为:约定大约配置。
第十四步:运行主类,成功启动springboot服务器之后,访问控制器中的/boot/getEntity路径:会出现如下页面
第十五步:上述的错误分析:报500错误,是服务器端错误,一般在控制器层。这里报的问题是找不到dao层(也就是mapper包)下的方法。此原因在于:编译后的实体类的xml文件即UserEntityMapper.xml没有被编译出来。没有被编译的原因是:idea开发环境的问题,在eclipse中没有这种情况,所以要记住,idea中编译的时候要注意这个文件有没有被编译。
解决方案:在pom.xml文件中手动设置编译后的路径位置。在pom.xml中的build标签中添加以下代码:
然后重新运行主类方法。此时在target中就会生成了UserEntityMapper.xml。目录如下:
此时即可在网页中获得上述方法返回的值。显示的结果如下:
至此,一个通过普通的maven项目创建的springboot项目就完成了。
补充1:
GeneratorMapper.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>
<!-- 指定连接数据库的JDBC驱动包所在的位置,指定到我们自己本机的完整路径-->
<classPathEntry location="D:\maven\mavenRespository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"></classPathEntry>
<!-- 配置table表信息内容题,targetRuntime指定采用MyBatis3的版本-->
<context id="tables" targetRuntime="MyBatis3">
<!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成-->
<commentGenerator>
<property name="suppressAllComments" value="true"></property>
</commentGenerator>
<!-- 配置数据库的连接信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test2"
userId="root"
password="root">
</jdbcConnection>
<!--生成model类,targetPackage指定model类的包名,targetProject指定生成的model放在eclipse的那个工程下面-->
<javaModelGenerator targetPackage="com.hnxy.springboot.model" targetProject="src/main/java">
<property name="enableSubPackages" value="false"></property>
<property name="trimStrings" value="false"></property>
</javaModelGenerator>
<!--生成MyBatis的Mapper.xml文件,targetPackage指定mapper.xml文件的包名-->
<!--targetProject指定生成的mapper.xml放在idea的那个位置下-->
<sqlMapGenerator targetPackage="com.hnxy.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false"></property>
</sqlMapGenerator>
<!-- 生成MyBatis的Mapper接口类文件,targetPackage指定Mapper接口类的包名,targetProject指定生成的-->
<!-- Mapper接口放在idea的那个目录下-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.hnxy.springboot.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="false"></property>
</javaClientGenerator>
<!-- 数据库的表名以及对应的java模型名称-->
<table tableName="user_info"
domainObjectName="UserEntity"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>