一 创建工程
报rom.junit错可以先把test文件删除
二 集成springboot的项目
打开springboot官方文档 ,粘贴parent父包到pom.XML ;粘贴spring-boot-starter-web依赖
导入依赖 可以看到external-libraries 外部库对了很多库
三 使用springboot搭建一个·web项目
1)在App类上加@EnableAutoConfiguration
目的:1 ,将app启动类变成springboot的bean 2,启动自动化配置
2) 在main中加SpringApplication.run(App.class,args);
目的:启动springboot项目
四 使用springboot内嵌springMVC
1.在App类上加@RestController注解
2 创建一个函数,使用@RequestMapping("/")注解
五 更改服务器端口
1 在resources目录下新建application.properties配置文件
2 设置端口server.port=8090
springboot通过固定在classpath的resources目录下寻找一个叫application.properties的配置文件,根据配置文件的key-value对,加载内部的配置,就可以实现通过配置文件更改端口
六 集成mybatis
1)在pom.xml文件中新增
1 mysql数据库依赖 mysql-connector-java
2 连接池druid依赖 druid
3 springboot对mybatis支持的依赖mybatis-spring-boot-starter
2)在application.properties配置文件中导入mybatis需要的配置,用来启动带mybatis数据库访问的springboot工程
(1)
- 配置mybatis.mapperLocations指定在classpath下面的mapping目录下,访问所有xml文件
-
- mybatis.mapperLocations=classpath:mapping/*.xml
-
- 在resources目录下创建mapping文件夹
(2)使用mybatis的自动生成工具,用来生成对应的数据库文件映射
- 在pom文件中引入mybatis自动生成文件的插件plugin
- mybatis-generator-maven-plugin
- 加入生成plugin对应的依赖
- mybatis-generator-core
- mysql-connector-java
- 加入execution
- <executions>
- <execution>
- <id>mybatis generator</id>
- <phase>package</phase>
- <goals>
- <goal>generate</goal>
- </goals>
- </execution>
- </executions>
- 加入配置configuration,避免反复生成文件
- verbose:允许移动生成的文件
- overwrite:允许文件自动覆盖
- configurationFile:位置选在src/main/resources/mybatis-generator.xml下
- 编写src/main/resources/mybatis-generator.xml文件
- 新建mybatis-generator.xml文件
- 编写mybatis-generator.xml文件(可在mybatis官网下载)
- 新建mysql数据库miaoshop
-
- 创建用户表
- 创建用户密码表
-
-
- 修改mybatis-generator.xml文件
-
- <!--数据库链接地址,账号,密码-->jdbcConnection
- <!--生成Model(指数据库对应到java的Dto的类 DataObject)类存放位置--> javaModelGenerator
- 新建com\miaosha\dataobject包
- 修改javaModelGenerator中 : targetPackage="com.miaosha.dataobject"
- 目的:把数据库中用户表和密码表会分别建立一个dataobject类到com.miaosha.dataobject路径下
- <!--生成映射文件存放位置-->sqlMapGenerator
- 设置映射文件路径在之前创建的mapping目录下:targetPackage="mapping"
- <!--生成Dao类存放位置-->javaClientGenerator
- 新建dao目录
- 指定targetPackage="com.miaosha.dao"
- <!--生成对应表及类名-->table
-
- 点击Run-Edit Configurations
- 新增Maven ,使用命令command lines:mybatis-generator:generate 解析到pom文件指定的mybatis的generator插件,并且执行它
- 修改mybatis-generator.xml文件
自动生成完成后新增了6个文件
[INFO] Saving file UserDOMapper.xml
[INFO] Saving file UserPasswordDOMapper.xml
[INFO] Saving file UserDO.java
[INFO] Saving file UserDOMapper.java
[INFO] Saving file UserPasswordDO.java
[INFO] Saving file UserPasswordDOMapper.java
- (3)
- 1)在application.properties配置文件中使用springboot中自带的datasource方式
-
- 设置数据库地址,账号,密码
- 设置数据库实现类
-
到此就可以使用使用mybatis了
- 2)使用pringboot扫描mybatis的配置文件,即DOMapper和后面的Services封装
-
- (1) 改动App类中@EnableAutoConfiguration注解为:@SpringBootApplication(scanBasePackages = {"com.miaosha"})
-
-
- 目的:两个注解都是将APP类交给spring托管,并且制定App是一个主启动类,其中scanBasePackages 为根目录包,能够扫描该包,通过注解的方式,自动发现@Service @Component@Repository等
-
-
- (2) 加注解@MapperScan("com.miaosha.dao"),将dao存放的地方设置在这个注解下
- (3)新建UserDOMapper对象,使用@Autowired自动注入
- (4)使用userDOMapper.selectByPrimaryKey(1)方法,返回UserDO对象
- (5)打印UserDO对象的getName()即用户名字
- (1) 改动App类中@EnableAutoConfiguration注解为:@SpringBootApplication(scanBasePackages = {"com.miaosha"})
-
MVC代码完善功能:通过页面传回的ID获取用户信息,并返回给前端
(5)新建service包
1 修改mapping.UserPasswordDOMapper.xml
要通过用户id查用户密码,无法直接使用自动生成的mapping文件实现,因为自动生成的mapping.UserPasswordDOMapper.xml只提供了selectByPrimaryKey方法。需要在mapping.UserPasswordDOMapper.xml下增加selectByUserId方法;
2 修改dao.UserPasswordDOMapper文件
在dao.UserPasswordDOMapper下新增UserPasswordDO selectByUserId(Integer userId)方法
3 新建model目录的UserModel类
dataobject只是数据库映射,UserModel才是用户领域模型对象,这其中报货用户表和密码表两者信息
4 编写service类下接口方法getUserById(),返回的是UserModel类用户领域对象
5 实现service类下getUserById()
(1)自动注入dao下面userDOMapper,userPasswordDOMapper对象
(2)实现getUserById()方法
(3)编写convertFromDataObject()方法 ,将userDO,userPasswordDO数据库映射转换为UserModel用户领域对象
(4)新建controller包
1 在controller包下新建UserController类
2 新建UserVO用户领域模型类
3 编写UserController下gerUser()与convertFromModel()方法
6 返回正确信息
当controller层获取数据有错时,如果直接错误对象返回给前端,前端不知道怎么显示,因此需要对controller进行处理
解决:
(1)归一化Responsbody成status+data格式
1 当controller层获取数据成功,此时status为空的时候:
- 新建response包处理返回,并新建CommonReturnType类
-
-
- //对应返回请求的处理结果status:为“success”或者“fail”
- //当status=success,则data内返回前端需要的json数据
- //当status = fail,则data内使用通用的错误码格式
-
- //定义一个通用的创建方法:
public static CommonReturnType creat(Object result){
return CommonReturnType.creat(result,"success");
}
- 即当status为空,就调用另一个status=success的creat(Object result,String status)方法,然后把这个typt的status设置success,把结果result也设置,并返回
public static CommonReturnType creat(Object result,String status){
CommonReturnType type = new CommonReturnType();//使用函数重载方式创建构造函数;
type.setStatus(status);
type.setData(result);
return type;
}
(2)在controller中返回CommonReturnType 的creat方法,传入参数为controller层获取到的用户领域对象userVO,当获取到了用户领域对象userVO,即staus为空,此时就会将staus设置成success并设置userVO对象为data,返回给前端
2.当controller层获取数据失败,此时status为fail的时候,将data定义为固定错误码的格式
1.新建error包,
2.定义通用错误形式CommonError类
3.取出对应Error信息,在enum类中实现
4.包装器业务异常类实现
5.在controller中即可跑出该异常,该异常类中包含ErrCode和ErrMsg
此时只是将异常抛出去到了tomcat容器层,未作处理,因此tomcat容器层只能返回500的错误页面, 结果如下:
6 使用springMvc自带的handlerException取解决通用异常处理
定义exceptionhandler解决未被controller吸收的exception