springboot mapper无法注入_测试开发的 SpringBoot 入门课

在 Java 后端开发的世界里,SpringBoot 是目前最流行的框架之一了,它简单好用,对 Spring 应用做了很多封装和自动配置,让开发一个后台应用变得非常的简单 为什么作为测试开发,要学习 SpringBoot 呢?因为高级的测试开发,在面对诸如 xxx 管理平台这样的任务时,不会一点儿后端的技术,是驾驭不了这种需求的 当然,Python 也可以开发后台系统,比如 Django,Flask 等 我曾经说过,Java 是测试开发必学的语言,除非你并不希望发展得更好。Java 语言有它非常独特的魅力,SpringBoot 也是目前国内主流的技术,学习它,错不了 今天的入门教程主要介绍如何用 SpringBoot 开发一个 HTTP 的接口供客户端调用

新建一个 SpringBoot 应用

所需配置如下
IDEA 2019 或更新 JDK 1.8
IDEA 里新建一个 Spring 的 Maven 项目,通过初始化器来选择要导入的包 e7500f7c8112d1da011cf8b1f9a50364.png 修改一下 Group 和 Artifact e5e6007e7a81dfda5bb155dbf00e6b90.png 接下来是勾选依赖项,勾选如下内容,同时 SpringBoot 版本我这里选择的是 2.1.3
Developer Tools -- Lombok Web -- Spring Web SQL -- MyBatic Framework
   -- MySQL Driver
下一步,就是等待 IDEA 自动创建好这个项目,接下来我们手动在 pom 文件里添加数据库连接池 Druid 依赖
<dependency><groupId>com.alibabagroupId><artifactId>druid-spring-boot-starterartifactId><version>1.1.14version>dependency>
MySQL 中指定一个数据库建一张表用来测试
create table `T_SPRING_BOOT_APP` (`id` int primary key auto_increment,`name` varchar(50),`age` int,`gender` int
)
配置 SpringBoot 的 application.yml 文件
这是 SpringBoot 应用的配置文件,我们将一些应用端口信息,数据库信息写入其中 首先删除 src/main/resources/application.properties 文件,它也可以作为应用的配置文件,不过用 yaml 文件更流行 手动创建一个文件 application.yml,复制如下内容
server:
  port: 9003
  tomcat:
    uri-encoding: utf-8
spring:
  http:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      url: jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
      username: root
      password: root
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath*:mybatis/**/*Mapper.xml
  type-aliases-package: com.henrywoo.springbootapp.mapper
这里面涉及到几个知识点:
  1. yaml 文件的语法
  2. mybatis 的使用
MyBatis 是一个 SQL 框架,相比 Hibernate 这种功能强大的 ORM 框架来说,它更简单好用,也更灵活 上面的数据要根据自己的实际环境修改几个地方:
  1. spring.datasource.url
  2. spring.datasource.username
  3. spring.datasource.password
  4. server.port 表示启动的端口号 9003
MyBatis 的配置
在 src/main/resources 下新建目录 mybatis,并新建一个文件 mybatis-config.xml,写入以下内容
<?xml  version="1.0" encoding="UTF-8" ?>configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><setting name="cacheEnabled"             value="false" />  <setting name="useGeneratedKeys"         value="true" />  <setting name="defaultExecutorType"      value="REUSE" /> <setting name="logImpl"                  value="SLF4J" /> settings>configuration>
这是一个 MyBatis 的全局配置表
Logback 日志框架的配置
在 src/main/resources 下新建文件 logback.xml,写入以下内容
<?xml  version="1.0" encoding="UTF-8"?>${log.pattern}${log.path}/sys-info.log${log.path}/sys-info.%d{yyyy-MM-dd}.log60${log.pattern}DEBUGACCEPTDENY${log.path}/sys-error.log${log.path}/sys-error.%d{yyyy-MM-dd}.log60${log.pattern}ERRORACCEPTDENY${log.path}/sys-user.log${log.path}/sys-user.%d{yyyy-MM-dd}.log60${log.pattern}
注意修改一下 property name="log.path" 的 value,作为日志保存的路径
开始编写第一个接口
这个接口,我们用来接收客户端的 POST 请求,请求中通过 json 传递数据库表数据,在收到这个请求后,通过 SpringBoot 将数据插入库中 在 src/main/java/com/henrywoo/springbootapp 下新建一个 package 为 controller 注意这个包专门用来存放控制器代码,控制器是用来接收请求的
新建一个 MyController 类
@Controllerpublic class MyController {
}
@Controller 是 Spring 的注解,注明这个类是一个 Controller 类,必须要标记它,否则无法正确接收客户端请求
新建一个 AppDao 类
位于 springbootapp/dao 包下( dao 包手动新建)
@Datapublic class AppDao {private String name;private int age;private int gender; 
}
@Data 是 Lombok 的注解,表明会在编译后自动为类添加 Setter,Getter,toString,hashCode,equals 方法,简化代码量 但注意要先添加 Lombok 的插件,才能生效,参考这篇文章《 Java 通用工具类,事半功倍的僚机 》
新建一个 Mapper 接口及其 xml 文件
在 springbootapp/mapper 包下,新建一个接口
public interface MyMapper {int insertData(AppDao appDao);
}
在 main/resources/mabatis 下新建一个 mapper 目录,然后创建一个 MyMapper.xml 文件
<?xml  version="1.0" encoding="UTF-8" ?>mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.henrywoo.springbootapp.mapper.MyMapper"><insert id="insertData" parameterType="com.henrywoo.springbootapp.mapper.MyMapper">
        insert into `T_SPRING_BOOT_APP`(`name`, `age`, `gender`)
        values(#{name}, #{age}, #{gender})insert>mapper>
这个 xml 文件里实际上就是写一些 SQL 语句,作为真正操作数据库的地方 namespace 要指定对应的 Mapper 类 节点 insert 的 id 是表示对应的 MyMapper 类下的方法名,parameterType 是方法参数的全限定类名 #{} 就是对类的域的引用 接下来在 SpringBoot 主类 springbootapp/SpringbootAppApplication 上添加注解 @MapperScan,用来扫描 Mapper 类,否则在执行到 MyMapper 类的方法时会报错找不到
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})@MapperScan("com.henrywoo.springbootapp.mapper")public class SpringbootAppApplication {public static void main(String[] args) {
        SpringApplication.run(SpringbootAppApplication.class, args);
    }
}
新建一个 Service 接口及其实现类
位于 springbootapp/service 包下( service 包手动新建)
public interface MyService {int insertData(AppDao appDao);
}
在 service/impl 包下,新建一个实现类
@Servicepublic class MyServiceImpl implements MyService {@Resource
    MyMapper myMapper;@Overridepublic int insertData(AppDao appDao) {return myMapper.insertData(appDao);
    }
}
@Service 注解是 Spring 的注解,表明这是一个 Service 类,该注解和 Controller 注解在 SpringBoot 框架中没有区别,只是用来给开发者理解类的作用而标记不同的名字,同样的还有两个注解(@Repository 和 @Component) @Resource 注解的作用是自动注入 MyMapper 的实例
修改 MyController
@Controllerpublic class MyController {@Autowired
    MyService myService;@PostMapping("insert")@ResponseBodypublic String insertData(@RequestBody AppDao appDao) {int code = myService.insertData(appDao);return code > 0 ? "SUCCESS" : "FAILED";
    }
}
@Autowired 注解的作用是自动注入 MyService 的实例,该注解与 @Resource 的区别是,@Resource 是 JDK 的注解,通用性更好,而@Autowired 是 Spring 的注解,功能更强大,作用都是将类的实例注入进来(PS:注入的意思就是不需要程序员在代码里显示的 new 一个对象,由 SpringBoot 在运行期自动帮你做这样的事情) @PostMapping("insert") 表示这是一个 POST 方法,insert 表示其 URL 路径为 http://{ip}:{port}/insert @ResponseBody 表示返回值会作为 HTTP 的响应内容传给客户端 到这里,SpringBoot 的代码就完成了
验证我们的接口
打开 Postman,写一个测试用的请求如下 ca541276ad85e982dee4418488353e03.png SpringBoot 端正常响应了我们的请求,检查数据库时,发现数据已经成功添加上 6da084a4901ab94650aa49c3ad392224.png
添加 Log 信息
我们在 MyController 和 MyServiceImpl 类上添加注解 @Slf4j,就可以使用 log 来添加日志
    public String insertData(@RequestBody AppDao appDao) {
        log.debug("POST 请求过来了");
        ...
    }public int insertData(AppDao appDao) {
        log.debug("[MyServiceImpl] insertData");
        ...
    }
重新启动 SpringBoot 应用后,就可以在控制台里看到日志了 bd334197a033aa830665941524d9cd94.png
总结
以上的操作,就完成了一个 HTTP 接口,实现了对 MySQL 数据库的操作,并且学到了几个有用的 Spring 注解,大大简化了开发工作量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值