目录
一,工具和环境
STS,Tomcat,Maven,MySQL
STS工具就是加强版的Eclipse,也是免费使用,操作界面和Eclipse一模一样,功能比Eclipse更强大。可以在Spring的官方网站免费下载,下载地址:https://spring.io/tools3/sts/all,我使用的版本是3.9.10。
Tomcat:我使用的是Tomcat8,下载地址:https://tomcat.apache.org/download-80.cgi,我使用的版本是8.0.53。
Maven:下载地址:https://maven.apache.org/download.cgi#,我使用的版本是3.6.1。
JDK:我使用的是JDK1.8
数据库:MySQL 下载地址:https://dev.mysql.com/downloads/mysql/,我使用的版本是5.7.28。
注:关于Tomcat,Maven,JDK的安装或者环境配置等一些设置,这里不做过多讲解,可以自行百度,很容易的。
1,STS的启动
下载好STS的压缩包(zip包)后,直接解压到当前文件夹,解压之后会出现一个sts-bundle文件夹(sts-bundle文件夹的路径不要包含中文字符或者空格),在\sts-bundle\sts-3.9.10.RELEASE下点击STS.exe启动STS工具。第一次启动之后会出现下图所示对话框:
这是选择工作空间,建议自己在某个地方新建一个文件夹(我喜欢命名叫workspace)
1,点击Browse...找到这个worksapce文件夹并选中,点击选择文件夹;
2,勾选左下角选择框;
3,点击Launch
进入STS编辑界面,如下图:
我们用不了这么多视图框,只留一个Console视图框就可以了,其他的叉掉。如下图:
2,在STS上集成Maven
点击Window,Preferences
选择Maven,Installations
点击右侧的Add...按钮
点击Directory...按钮,找到Maven的解压目录,
点击右下角选择文件夹按钮,
点击Finish按钮
点击Apply按钮
选择User Settings如下图:
点击Browse...按钮,找到apache-maven-3.6.1\conf目录下的setting.xml文件,如下图,点击下方打开按钮
之后点击Apply和Apply and Close。
二,创建Maven项目
1,项目搭建
点击File,New,Maven Project
点击Next>按钮
点击Finish按钮,创建项目成功,如下图:
我们会发现,项目中有报错,pom.xml文件和项目文件上有小红叉,这是因为我们建立的是web项目,web项目在WEB-INF目录下应该有一个web.xml文件。而Maven创建的项目中没有,如下图,我们还需要改造一下
选中webapp文件夹,鼠标右键,新建一个文件夹(Folder)名字叫WEB-INF,注意,这个名字是固定的不能更改,中间的是中线(或者说是一个减号)不是下划线,然后复制Tomcat安装目录中webapps\examples\WEB-INF文件夹下的web.xml文件,粘贴到上面创建的WEB-INF目录中
粘贴进去之后,项目中的错误,小红叉就消失了,如下图
我们再把web.xml文件整理一下,双击打开,删除<description></description>标签里面的所有内容,再删掉注释
metadata-complete属性:当该属性为true时,web应用将不会加载注解配置的Web组件。我们会在项目中使用注解,所以在这里要么将它的值设为false,要么直接将这个属性删除。我就直接删除了。此外,将encoding的值设为UTF-8,如下:
web.xml代码如下:
我们把项目的编码设置一下:
右键,Properties
编码格式选择UTF-8,点击Apply and Cancel按钮
整个弄完之后,项目的结构是这样的:
2,准备依赖
我们首先准备一些基础的依赖
·单元测试 这个是方便我们测试用的,我们会写一个功能测一个功能,而不是把所有功能都写完再测试,这样会帮助我们缩小错误范围, 方便寻找bug。
·日志组件 这个是方便我们观察SQL语句和一些测试的结果
·MySQL驱动 连接数据库
·Druid连接池 帮我们管理数据库的连接
·MyBatis 持久层 帮助我们对数据库进行操作(增删改查)
·Spring 业务层 帮助我们管理对象
·MyBatis与Spring整合的桥梁
开始就先添加这么多吧,后面需要了再添加
添加依赖
Maven项目不需要拷贝依赖的jar包,只需要在pom.xml文件中添加依赖的坐标,Maven会自动把jar包下载到本地仓库,供我们使用,那么依赖的坐标在哪里找呢?
这里介绍一个网站 https://mvnrepository.com/ ,依赖的坐标都可以在这个网站上找到,打开网站如下图:
在搜索框内输入要找的依赖,然后点击Search,我们现在来搜索单元测试所依赖的坐标,在搜索框中输入junit,点击Search,出现如下页面:
点进去会看到下图所示的页面:
我们选择4.12版本的,点进去会看到如下所示的界面:
将方框内的代码复制下来,接下来打开pom.xml文件,如下图所示写一个<dependencies></dependencies>标签,依赖的坐标就往这个标签里面放,
按Ctrl+S保存之后,左侧的目录结构会发生变化,会多出一个东西,见下图:
这样,我们第一个依赖就添加好了,Maven自动把jar包下载下来放在本地仓库供我们使用,我们再也不用到处找jar包了。
用同样的方式把其他的依赖加入就行了,添加后的pom.xml文件的代码是这样的:
Tips:Ctrl+Shift+F是格式化代码
接下来,我们开始分包
Tips:文件的展示形式,一种是Flat,一种是Hierarchical 如下图:
左侧是Flat形式,右侧是Hierarchical 形式,可以选择自己喜欢的组织形式
3,准备数据库
新建一个数据库,名称为springdemo,再新建一个员工表employee
数据库建表语句:
插入几条数据:
4,使用mybatis-generator自动生成代码
在pom.xml中添加mybatis-generator依赖:
这个mybatis-generator如何使用呢?我们先去看一下它的文档:http://mybatis.org/generator/index.html
访问这个网址之后会出现这样一个页面:
先看XML Configuration Reference,点进去页面如下:
可以看到,这是一个XML文件,我们需要做一些配置,首先在\src\main\resources文件下新建一个XML文件(文件名叫generatorConfig.xml),然后将文档中的XML配置代码全部复制粘贴进去,如下图:
generatorConfig.xml文件代码如下:
然后把generatorConfig.xml文件中的一些参数值改一下,如下图:
修改之后的generatorConfig.xml文件:
接下来,我们应该运行mybatis-generator,让它来给我们自动生成代码,那么怎么运行呢?我们再看文档:
点开Running MyBatis Generator,我们用Java代码的形式运行,所以点击With Java,将右侧的代码复制下来。
在com.breeze包下新建一个Class文件,这个文件是用来启动MyBatis Generator,我将其命名为RunMBG,如下图:
然后,我们要把
File configFile = new File("generatorConfig.xml");
这一行里面的值改一下,要让它能找到我们所写的generatorConfig.xml文件,如下:
选中类名,右键,Run As, Java Application
运行之后,我们会发现,我们的项目里会多出三个文件,要把项目刷新一下才看得到
点开其中的一个文件如Employee.java会发现有很多注释,
不是那么的一目了然,如果希望在生成代码的时候,不生成注释,只需要给我们的generatorConfig.xml加一个配置就行了,这个也可以看文档(我前面的一些配置也是从文档里面来的,你们可以多看看文档):
看一下XML配置参考(XML Configuration Reference)下面的注释生成器(<commentGenerator>)下面的支持的属性(Supported Properties)下面的属性名称 suppressAllComments,从文档说明中可以知道,当suppressAllComments的值为true时,不会在任何生成的元素上贴注释,继续往下拉,会有一个例子:
将这个元素复制粘贴到generatorConfig.xml文件中,把name的值改为suppressAllComments就行了,generatorConfig.xml文件如下:
然后,在运行一下RunMBG就可以重新生成了,重新生成的会把以前的覆盖掉(别忘记刷新哦)
再打开一看会觉得很清晰。
新生成的三个文件我简单说一下:
Employee.java是根据我们springdemo数据库中Employee表创建出来的java对象,并提供了Getter和Setter方法。
EmployeeMapper.java也是根据Employee表创建出来的Mapper接口,里面提供了几个方法,一看这几个方法名称就知道这几个方法分别是用来干什么的,我就不赘述了。
EmployeeMapper.xml也是根据Employee表生成的Mapper映射接口,操作数据库,负责处理一些结果集等其他功能。
5,日志配置
同样地,我们日志文件的配置也是从文档里面找,https://mybatis.org/mybatis-3/zh/index.html,打开页面,这是MyBatis的文档,选择“日志”,如下图:
往下拉,会看到有一个日志配置,将log4j.properties文件的具体内容复制下来,如下图:
在src\main\resources包下新建一个文件(File),命名为log4j.properties,将刚刚复制的内容粘贴进去,将里面的包改为我们自己的包:
log4j.properties文件代码如下:
好了,到这里准备工作才算基本做完。
三,Spring和MyBatis的集成
首先,我们新建一个Spring配置文件,名字叫applicationContext.xml,在src/main/resources包下新建一个Spring Bean Configuration File文件,本质也是一个XML文件,如下图:
建好后是这样的:
添加<context>命名空间,点击下侧Namespace,将context前面的小方框勾上:
再将后面的版本号去掉:
然后我们需要做一些配置:
在配置之前我们需要在src/main/resources包下新建一个db.properties文件(File),如下图:
db.properties文件内容如下:
这是连接数据库的四要素,有的同学会发现,我们在前面不是在generatorConfig.xml文件中配过吗?我们在generatorConfig.xml配置的连接数据库的四要素是使用MyBatisGenerator根据数据库中表的信息帮我们自动生成代码(生成代码之后generatorConfig.xml文件也就不再使用了),而这个是我们项目中连接后台数据库的一些配置,我们在增删改查的过程中要通过这个连接数据库。
现在我们来配置applicationContext.xml文件,配置好的applicationContext.xml文件内容如下,各个组件的功能已在注释中做了简短的说明:
配置完了之后,我们发现有2行报错了,如下图:
这个是忘记加入依赖了,在第2步 准备依赖中,说要准备一些基础的依赖,最后一个是加入MyBatis与Spring整合的桥梁这个依赖,不知怎么的搞忘了,不好意思,现在在pom.xml文件中加入依赖:
加入依赖之后,就没有报错了(加入之后记得保存一下哦),然后我们来测试一下
四,测试
在com.breeze包下,新建一个Class类,命名为App
这个类就是我们的测试类,我们以后做测就在这个里面做
第一步,我们要加入spring测试的依赖,在pom.xml文件中加入下面的依赖(也可以在前面介绍的网站中搜spring-test):
导入之后要在类上贴2个注解:
贴了注解之后,我们发现2个注解都报错了,这是由于它没找到所依赖的jar包,我们先展开Maven Dependencies目录,如下图:
大家有没有发现这几个jar包的颜色和别的jar包的颜色不一样?这几个jar包是灰色的,这是由于这几个jar包的使用范围(scope)的值是test,如果我们把测试类写在src/test/java下就不会报错,我为了项目结构清晰一点点,我把测试类写在src/main/java包下了,这样的话,我们把pom.xml文件中的<scope>test</scope>删除或者注释掉就行了,当我们注释掉之后,就会看到那几个灰颜色的jar包颜色变得和其他jar包的颜色一样了,这时我们在App类中引入相应的jar包后就没有报错了,此时的pom.xml文件如下:
App类引入的包名如下:
之后我们编写测试代码如下:
然后,开始运行,选中testSelectAll()方法,鼠标右键,Run As,2 Junit Test
很不幸,运行报错,
不要急,我们来看看报的什么错,在控制台(Console)我们看到下列语句:
org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
上面写着NoClassDefFoundError:java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
这是说我们没有spring-jdbc这个jar包,同样地,我们在pom.xml文件中加入下面的依赖:
保存之后,再重新运行,就成功查询了:
恰好与我们数据库中的数据是一致的
此时,我们的Spring和MyBatis整合成功。
五,提供Service组件
我们提供一个service组件,把mapper注入给service。
在service包下新建一个接口(interface),命名为IEmployeeService,然后将EmployeeMapper.java中的几个方法拷贝过来:
我做了小小的改动,我把删除,插入,更新这3个方法的返回值改为void,代码如下:
再在service包下新建一个包impl,在impl包里写一个实现类EmployeeServiceImpl去实现IEmployeeService接口:
再将EmployeeMapper注入进来,代码如下:
在applicationContext.xml文件中添加有关service的配置:
applicationContext.xml文件如下:
接下来我们再测试一下:
运行testSelectAll2(),
查询成功。
六,使用注解方式集成Spring和MyBatis
因为用注解方式开发项目比较常见,所以这一节我们用注解的方式把我们之前写的项目改造一下
先打开applicationContext.xml文件,删掉一下内容:
删除之后,我们要配置mapper接口的扫描器:(扫描之后它会帮我们创建代理对象)
此外,我们还需要配置DI注解解析器和IoC注解解析器:
<context:component-scan base-package="com.breeze.service"/>是扫描类上贴的注解,把需要扫描的包设置给它,我的设置是让它扫描com.breeze.service包,也可以把扫描范围扩大,比如写 com.breeze ,这里可以精确到扫描哪个包,能精确尽量精确点。
applicationContext.xml如下:
配好之后,找到service的实现类EmployeeServiceImpl.java,在EmployeeServiceImpl类上贴一个注解:@Service
如下图:
接下来,给Service设置mapper,将上图黄色方框中的内容删除,在蓝色方框上面贴@Autowired注解,此时EmployeeServiceImpl.java文件如下:
之后在测试类App中重新运行testSelectAll2()方法,结果如下图:
七,添加事务
在applicationContext.xml文件中,增加tx命名空间(去掉版本号):
再加入如下内容:
此时,applicationContext.xml文件如下:
在EmployeeServiceImpl类上贴一个注解:@Transactional
如下图:
八,Spring和SpringMVC的集成
第一步,添加springmvc的依赖,在pom.xml文件中添加如下依赖:
保存之后会为我们导入下面2个jar包:
第二步,在src/main/resources包下新建一个springmvc的配置文件,名字叫mvc.xml
和创建applicationContext.xml文件一样,先创建一个Spring Bean Configuration File文件,命名为mvc.xml,建好之后,添加mvc和context命名空间:
接下来,我们要在web.xml中配置2个东西,一个是前端控制器,另一个是字符过滤器
配好之后,web.xml是这样的:
然后,我们开始配置mvc.xml
1,引入后台的bean配置(连接池,数据源,Mapper,service,事务等)
2,mvc注解解析器
3,静态资源处理
现在我们使用jsp做开发,视图解析器最好配一个前缀和后缀,否则我们在访问资源的时候会写上很长的路径,所以
4,配置视图解析器的前缀和后缀
配置如下:
注意,上面我们配置了<context:component-scan base-package="com.breeze"/>,我们在applicationContext.xml中也配置了<context:component-scan base-package="com.breeze"/>,这两个地方只要有一个地方配置就行了,为了看起来清晰一点,我把applicationContext.xml中的注释掉了,保留这里的。
在WEB-INF里面创建2个jsp,目录结构如下:
input.jsp:
list.jsp
这时,我们发现上面的项目报错,这时因为我们缺少2个依赖:
将这两个依赖加入,报错就会消失。
下面我们开始写Controller:
在Controller包下新建一个Class,命名为EmployeeController,EmployeeController.java里面的代码如下:
接下来就准备部署运行项目了
在pom.xml文件里加入2个插件的依赖:
最后,pom.xml:
此时,我们发现项目报错,但是子项目却没有报错:
此时我们需要这样:
然后,小叉叉就没了。
开始运行项目:
选中项目,右键:
选择Maven build...
出现下面的输出,中间没有报错,说明启动成功:
打开浏览器,在地址栏输入:localhost:8080/employee/list 再按Enter键:
就可以进行简单的增删改查了
咦?怎么只能删除,增加和修改怎么报400错误呢?
这是因为我们在Employee类中定义了一个日期字段:private Date hiredate; 这个要特殊处理一下:
在这个字段上贴一个注解,把格式固定一下,如下图:
好了,再重新启动一下就可以了:
注意,重新启动之前一定要先关闭服务,否则会导致端口冲突,启动失败。关闭如下:
重启之后,就可以了。
启动之后,我们点击左上角add添加一条数据,如下:
插入之后,发现中文乱码:
这需要我们设置一下编码:
在db.properties文件中,在 jdbc.url=jdbc:mysql://localhost:3306/springdemo 后面添加
?useUnicode=true&characterEncoding=UTF-8 如下图:
好了,再重新启动一下就好了,这次真的好了
不知道你们成功了没?反正我是成功了。祝你好运哦...
后记:
首先,我是一只菜鸟,我也不怎么会,我所能做的是,把我所知道的尽可能详细,这篇博客是我写的第二篇(第一篇是几年前写的只有几行,我删了),我是很认真写的,前后大概花了我将近30个小时,但不知道你们的观感怎么样,希望能对需要的人有所帮助,谢谢。