主要是为了学习目的,将使用springboot来创建restful的API过程进行一下记录,一是熟练,二是方便一些内容以后复制粘贴。
首先使用springboot项目向导创建springboot项目
依次选择依赖项
因为添加了以上mybatis依赖,需要配置数据源。
我使用mysql创建了一个lose数据库
修改application.properties
文件
spring.datasource.driver-class-namesql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/lose?serverTimezone=Asia/Chongqing&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
spring.datasource.username=root
spring.datasource.password=123456
注意:这里使用的是
这时可以尝试运行spring应用上下文的引导类,这里类名为SpringdemoApplication
在控制台上显示运行日志,发现springboot自带的Tomcat服务启动成功
这里web服务默认端口号是8080
,上下文路径(web应用名称)没有。如果需要,可以在application.properties
文件中修改,例如端口号设置为8081
,web应用名称为lose
。
server.port=8081
t-path=/lose
再次启动引导类
可以直接使用Mybatis Generator来自动生成实体类,Dao接口(客户类),映射文件l文件。
Mybatis Generator插件的工作原理是连接mysql数据库,然后扫描相关表的信息,然后按这些信息来自动创建相关文件。所以,需要连接mysql数据库的jar包。
这里我们拷贝到G盘tools目录下:G:toolsmysql-connector-java-8.0.27.jar
这个文件一般可以在maven依赖的本地仓库中查找到。也可以直接指定目录为本地仓库中的jar包。
这个文件是Mybatis Generator插件需要的用于自动生成的配置文件。可以放置在任意目录。
我们在resources
目录下创建一个mybatis-generator
目录,并在该目录下创建
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis//DTD MyBatis Generator Configuration 1.0//EN"".dtd"><generatorConfiguration><!--配置要链接的数据库的数据源--><classPathEntry location="G:toolsmysql-connector-java-8.0.27.jar"/><!---Mybatis上下文--><context id="MySqlContext" targetRuntime="MyBatis3"><!--配置数据库的链接信息--><jdbcConnection driverClass=sql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/lose?serverTimezone=Asia/Chongqing&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8"userId="root"password="123456"/><!--数据库BigDecimals字段在java中定义--><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!--实体类生成信息--><javaModelGenerator targetPackage="com.javaman.lose.domain" targetProject="src/main/java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!--mybatis 的xml文件地址--><sqlMapGenerator targetPackage="com.javaman.lose.mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!--mybatis的mapper接口--><javaClientGenerator targetPackage="com.javaman.lose.dao" targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="true"/></javaClientGenerator><!--要生成的表结构--><table tableName="lose"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false"></table></context></generatorConfiguration>
**注意:**其中jdbcConnection
中的信息与application.properties
中的datasource
信息相同。但是在设置 url
字符串时,在xml文件中字符串内要将&
符号替换成为&
。
在这里可以自己配置实体类,DAO接口还有XML映射文件的包名以及保存路径。为了让src/main/java
目录下只有java代码,所以,将xml映射文件保存到了resources
目录中。这样设置,就需要在后面进行两个设置:
resources
标签来包含该目录下的xml文件,保证在编译项目时,会自动将该目录下的xml文件也会拷贝到项目target目录下。<build>
标签下添加以下代码 <resources><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources>
application.properties
要设置映射文件所在目录的位置,不然,spring无法知道这些mapper映射文件在什么地方。因为在
而大家知道src/main/resources
目录在编译时,下面的文件和目录会被拷贝到target/classes
目录下。也就是类的根路径下。
所以,这里设置的包名,也就是说,最终xml文件会被拷贝到src/main/resources
目录下的与包结构相对应的目录结构下面。在编译时,也会被拷贝到类路径下的与包结构相对应的目录下。
所以,我们在application.properties
文件中这样来指定映射文件的位置
mybatis.mapper-locations=classpath:com/javaman/lose/mapper/*.xml
修改l文件,在<plugins>
标签中添加以下插件标签
<plugin><groupId&ator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.3</version><configuration><configurationFile>src/main/resources/l</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><dependencies><dependency><groupId&ator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.3</version></dependency></dependencies></plugin>
**注意:**在修改插件或依赖后,需要重新加载maven。保证依赖下载成功。
大家要注意其中的
<configurationFile>src/main/resources/l</configurationFile>
这一句中是指定
如果maven依赖下载完成,就可以直接双击maven中插件下的mybatis-generator插件的generate开始生成。
如果运行日志容器中显示BUILD SUCCESS,说明创建成功
查看项目目录
**注意:**这里DAO接口名称不是叫LoseDAO
,而是叫LoseMapper
。
我们会发现,其xml映射文件被创建在resources目录下了。
我们可以尝试编译项目,看最终编译目录中,是否有xml文件也被拷贝成功。
我们先使用maven的clean
,将以前的编译清除掉。然后使用complile
编译。
我们有时候会发现,xml文件并没有被拷贝到编译目录中。
我们可以依次使用菜单"构建-构建项目“
这时往往能解决问题
我们发现,这三个文件都被拷贝到了target目录中。
现在需要让spring来自动生成LoseMapper接口的实现类,并创建其对象,所以,需要添加注解。有两个方法,一是在每个DAO接口前添加@Mapper注解,如:
@Mapper
public interface LoseMapper {
}
但这种方法需要为每一个DAO接口都添加该注解,有点麻烦。
可以直接在引导类上添加@MapperScan注解,声明扫描器,如:
@SpringBootApplication
@MapperScan(basePackages = "com.javaman.dao")
public class SpringdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringdemoApplication.class, args);}}
其中指定basePackages
属性,值为要扫描的DAO接口类定义的包的名称。如果在不同的包中,可以使用字符串数组来定义位置。
下面依次在com.javaman.lose
包下,创建service
包,并在其下创建impl
包。
在com.javaman.lose.service
包下创建LoseService
接口,代码如下:
public interface LoseService {Lose getLoseById(long id);
}
这里暂只定义一个方法,就是通过id来获取失物(Lose)信息。返回的Lose
实体类对象。
在com.javaman.lose.service.impl
包下创建LoseServiceImpl
实现类,代码如下:
@Service
public class LoseServiceImpl implements LoseService {@Resourceprivate LoseMapper loseDao;@Overridepublic Lose getLoseById(long id) {return loseDao.selectByPrimaryKey(id);}
}
注意:为实现类添加@Service
注解,让spring自动创建该对象并管理这个对象
在Service层会使用Dao层的实现类对象。这里采用添加@Resouce注解来为属性实现自动注入,即spring会自动为loseDao
这个属性变量赋值。这样,我们可以在getLoseById
方法中直接使用该对象。
我们在com.ller
包下,创建LoseController
控制类。代码如下:
@RestController
public class LoseController {@Resourceprivate LoseService loseService;@RequestMapping("/lose/{id}")@GetMappingpublic Lose getLoseById(@PathVariable long id){LoseById(id);}
}
说明:
LoseController
控制层对象,这个注解包含了@ResponseBody
注解,所以,可以让下面的处理器方法返回类对象时,会以JSON格式返回。getLoseById
添加@RequestMapping("/lose/{id}")
注解,可以使用restful
风格的HTTP请求。@GetMapping
注解,表示该请求是GET
类型。这样就更加符合restful
规范了。/lose/1
这样的请求,其中将后面的1
传给处理器方法,需要给入口参数添加@PathVariable
注解,表示是请求路径为变量。使用占位符来定义路径变量,如果占位符变量名称与入口参数变量名称一样,可以省略注解的属性值设置。
可以看到编译目录下target/classes
类路径根目录下,需要的文件都在。
启动成功
在地址栏中输入:
localhost:8081/lose/lose/1
第一个lose是web应用名(应用上下文名称)。第二个是请求名。
在测试时,我一开始总出404错。
类似如下图:
后来找了许多,才发现Application引导类一定要在所有controller,dao,service包的上层。不然,不会自动的扫描这些包,也不会为这些类创建对象。
出错时的引导类在springdemo包下面,这个包与controller等包平级,也就是controller类等不在引导类同级或下级目录中。
所以, 要更改成为:
我们也可以在下面的运行窗口中的Actuator中看到Spring是否为我们创建了这些对象。
如果在这里,发现找不到这些对象,那么很有可能是这些类没有定义在引导类同级或下级目录中,不会自动扫描注解,也就不会自动创建这些对象。
本文发布于:2024-01-29 03:54:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647165712508.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |