SpringBoot (四) - 整合Mybatis,逆向工程,JPA
1、SpringBoot整合MyBatis
1.1 application.yml
# 数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/kh96_ssm_airms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: root
# mybatis 核心配置
mybatis:
configuration:
map-underscore-to-camel-case: true # 下划线 映射 驼峰
mapper-locations: classpath:mybatis/mapper/*.xml # 自定义mapper映射路径
# config-location: classpath:mybatis-config.xml # mysql配置文件
1.2 实体类
@Data
public class Quality {
//编号
private Integer id;
//地区id
private Integer did;
//检测时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone =" GMT+8")
private Date monitorTime;
//pm10
private Integer pm10;
//pm25
private Integer pm25;
//监测站
private String monitorStation;
//修改时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone =" GMT+8")
private Date lastModifyTime;
}
1.3 mapper 和 service
1.3.1 QualityMapper
public interface QualityMapper {
//根据空气质量编号,修改空质量
Integer updateQualityById(Quality qualityForm);
}
1.3.2 QualityMapper.xml
<!--
根据空气质量编号,修改空质量
Integer updateQualityById(Quality qualityForm);
-->
<update id="updateQualityById">
update air_quality
<set>
<if test="id != null"> `id` = #{id},</if>
<if test="did != null"> `did` = #{did},</if>
<if test="monitorTime != null"> `monitor_time` = #{monitorTime},</if>
<if test="pm10 != null"> `pm10` = #{pm10},</if>
<if test="pm25 != null"> `pm25` = #{pm25},</if>
<if test="monitorStation != null"> `monitor_station` = #{monitorStation},</if>
<if test="lastModifyTime != null"> `last_modify_time` = #{lastModifyTime},</if>
</set>
where `id` = #{id}
</update>
1.3.3 service
//接口
public interface QualityService {
boolean modifyQualityById(Quality qualityForm);
}
//实现类
@Service
public class QualityServiceImpl implements QualityService {
@Autowired
private QualityMapper qualityMapper;
@Override
public boolean modifyQualityById(Quality qualityForm) {
return qualityMapper.updateQualityById(qualityForm) > 0;
}
}
1.4 测试
1.4.1 控制层
@Slf4j
@RestController
public class AirQualityController {
@Autowired
private QualityService qualityService;
//根据空气质量编号,修改空质量,使用xml映射文件
@PostMapping("/modQuality")
public Map<String,String> testModifyQualityMapperXml(@RequestBody Quality qualityForm){
//返回集合
Map<String,String> returnMap = new HashMap<>();
//调用业务接口,修改空气详情
if(qualityService.modifyQualityById(qualityForm)){
returnMap.put("code","200");
returnMap.put("msg","Success");
return returnMap;
}
returnMap.put("code","9999");
returnMap.put("msg","Fail");
return returnMap;
}
}
1.4.2 Postman 测试
测试:
测试结果:
2、逆向工程 better-mybatis-generator 插件
2.1 下载插件 better-mybatis-generator
2.2 自动生成代码
2.2.1 idea连接数据库
2.2.2 生成代码
2.2.2.1 选中表,右键点击 mybatis-gengrate
2.2.2.2 生成代码 设置
生成的代码:
2.3 测试
2.3.1 service
2.3.1.1 接口
public interface AirQualityService {
//根据条件查询空气质量列表
List<AirQuality> getQualityListByExample(AirQualityExample airQualityExample);
}
2.3.1.2 实现类
@Service
public class AirQualityServiceImpl implements AirQualityService {
@Autowired(required = false)
private AirQualityMapper airQualityMapper;
@Override
public List<AirQuality> getQualityListByExample(AirQualityExample airQualityExample) {
return airQualityMapper.selectByExample(airQualityExample);
}
}
2.3.1 测试代码
@GetMapping("/airQualities")
public List<AirQuality> testAirQualityListUseBackward(){
log.info("------ 根据 查询条件,查询空气质量的列表 --------");
//创建查询条件对象
AirQualityExample airQualityExample = new AirQualityExample();
//如果需要去重,增加条件
airQualityExample.setDistinct(true);
//如果需要排序,增加排序条件
airQualityExample.setOrderByClause(" id desc ");
//添加自定义查询 条件,监测站名称中包含检测的
AirQualityExample.Criteria criteria = airQualityExample.createCriteria();
//criteria.andMonitorStationLike("%"+monitorStation+"%");
criteria.andMonitorStationLike("%监测%");
//区域编号 大于1
//criteria.andDidGreaterThan(1);
//区域编号在指定列表中
//criteria.andDidIn(Arrays.asList(1,2,3,4,5));
//增加or的查询条件
AirQualityExample.Criteria criteriaOr = airQualityExample.createCriteria();
criteriaOr.andPm10GreaterThan(100);
//拼接or的查询条件
airQualityExample.or(criteriaOr);
//如果需要分页,增加分页参数 limit ${offset}, ${limit}
//起始行 (偏移量参数)
airQualityExample.setOffset(2l);
//返回数据量
airQualityExample.setLimit(5);
//调用业务接口,查询空气质量列表
List<AirQuality> qualityListByExample = airQualityService.getQualityListByExample(airQualityExample);
return qualityListByExample;
}
2.3.2 测试结果:
2.4 分析查询条件对象
2.4.1 基本查询条件
2.4.2 字段上的查询条件
2.5 分析 创建 xxxExample.Criteria 自定义查询条件
protected List<Criteria> oredCriteria; //oredCriteria 是一个 Criteria 的 集合
//创建条件类 方法
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria); // 创建第一个Criteria的时候会自动加入集合中
}
return criteria;
}
//or 拼接 条件 方法
public void or(Criteria criteria) {
oredCriteria.add(criteria); //其他Criteria 条件,调用方法拼接时 也会 动加入集合中
}
3、JPA
3.1 JPA 配置
# jpa 核心配置
spring:
jpa:
show-sql: true # 显示sql查询
hibernate:
ddl-auto: update #如果不存在,就新建,如果存在只更新
3.2 测试
3.2.1 实体 bean
3.2.1.1 实体类
注意:
1、如果数据库没有该表会自动生成该表;
2、如果该表已经存在,也需要填写这些注解信息,要不然会出现实体跟数据库不对应的错误;
@Data
@Entity
@Table(name = "air_user",catalog = "kh96_ssm_airms")
//指定jpa建表的表名,如果指定,默认使用类名作为表名,catalog是指定数据库实例名
public class AirUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
//用户名
@Column(name = "name",length = 32)
private String name;
//密码
@Column(name = "pwd",length = 32)
private String pwd;
//手机号
@Column(name = "tel",length = 11)
private String tel;
}
3.2.1.2 生成的表
启动项目;
3.2.2 AirUserRepository
public interface AirUserRepository extends JpaRepository<AirUser,Integer> {
}
3.2.3 service
3.2.3.1 接口
public interface AirUserService {
//@description : 根据用户编号,查询用户详情
AirUser getAirUserById(Integer id);
}
3.2.3.2 实现类
@Service
public class AirUserServiceImpl implements AirUserService {
@Autowired
private AirUserRepository airUserRepository;
@Override
public AirUser getAirUserById(Integer id) {
return airUserRepository.findOne(id);
}
}
3.2.4 测试代码
@RestController
public class AirQualityController {
@Autowired
private AirUserService airUserService;
@GetMapping("/airUser")
public AirUser AirUserTestAirUserUserJPA(@RequestParam("Id") Integer Id){
return airUserService.getAirUserById(Id);
}
}
3.2.5 测试结果
SpringBoot (四) - 整合Mybatis,逆向工程,JPA的更多相关文章
- SpringBoot系列-整合Mybatis(注解方式)
目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...
- SpringBoot之整合Mybatis(增,改,删)
一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...
- SpringBoot 3.SpringBoot 整合 MyBatis 逆向工程以及 MyBatis 通用 Mapper
一.添加所需依赖,当前完整的pom文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...
- SpringBoot系列-整合Mybatis(XML配置方式)
目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...
- springboot(二)整合mybatis,多数据源和事务管理
-- 1.整合mybatis -- 2.整合多数据源 -- 3. 整合事务 代码地址:https://github.com/showkawa/springBoot_2017/tree/master/ ...
- 【springboot】整合 MyBatis
转自:https://blog.csdn.net/cp026la/article/details/86493503 1. 简介: 目前,国内大部分公司都使用 MyBatis作为持久层框架.本章整合My ...
- SpringBoot之整合Mybatis范例
依赖包: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...
- 从零开始的SpringBoot项目 ( 四 ) 整合mybatis
一.创建一个SpringBoot项目 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目 二.引入相关依赖 <!--mysql数据库驱动--> & ...
- SpringBoot之整合MyBatis
今天了解一下SpringBoot如何与我们最常用的ORM框架Mybatis整合. 一. 需要在pom.xml文件里加入mybatis的依赖 <dependency> <groupId ...
随机推荐
- Vue路由器的hash和history两种工作模式 && Vue项目编译部署
1 # 一.Vue路由器的两种工作模式 2 # 1.对于一个uri来说,什么是hash值? 井号及其后面的内容就是hash值. 3 # 2.hash值不会包括含在HTTP请求中,即:hash值不会带给 ...
- Java--集合框架详解
前言 Java集合框架的知识在Java基础阶段是极其重要的,我平时使用List.Set和Map集合时经常出错,常用方法还记不牢, 于是就编写这篇博客来完整的学习一下Java集合框架的知识,如有遗漏和错 ...
- 面试突击73:IoC 和 DI 有什么区别?
IoC 和 DI 都是 Spring 框架中的重要概念,就像玫瑰花与爱情一样,IoC 和 DI 通常情况下也是成对出现的.那 IoC 和 DI 什么关系和区别呢?接下来,我们一起来看. 1.IoC 介 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- 一、JDK和JRE
JDK和JRE JDK=JRE+开发工具包: JRE=JVM+核心类库 如果只是运行Java程序,安装JRE即可:开发Java程序并运行则需要安装JDK.目前最稳定版本是JDK8.0,并且马上部分企业 ...
- 2-1 走进selenium新世界
走进Selenium新世界 浏览器 Firefox Setup 35.0.1 安装完成后设置菜单栏 关闭浏览器自动更新 插件配置(必备武器) FireBug Firebug是firefox下的一个扩展 ...
- 日常问题: SQL优化
日常开发中,除了开辟新项目,业务需求开发,一般还要做负责系统的日常运维.比如线上告警了,出bug了,必须及时修复.这天,运维反馈mysql cpu告警了,然后抓了该时间节点的慢sql日志,要开发分析解 ...
- ClickHouse与Elasticsearch压测实践
1 需求分析 1.1 分析压测对象 1)什么是ClickHouse 和Elasticsearch ClickHouse 是一个真正的列式数据库管理系统(DBMS).在 ClickHouse 中,数据始 ...
- Android Kotlin Annotation Processer
Annotation Processer 注解处理器(Annotation Processer)是javac内置的注解处理工具,可以在编译时处理注解,让我们自己做相应的处理.比如生成重复度很高的代码, ...
- django_day11_项目相关
django_day11_项目相关 新增和编辑 路由 url(r'^category_add/$', views.category_change, name='category_add'), url( ...