技术标签: spring spring boot mybatis mysql SpringBoot
Springboot是现在目前主流的开发基础框架、也是使用最为广泛的开发框架之一、而MyBatis这个框架的使用时针对操作数据库而言面向程序最为重要的一个框架、随之便是mybatis-plus、针对这两个框架而言、在使用的使用我们需要对他们的配置、约束、文件编写等都要很熟悉的掌握、便花时间进行整合了一个最为基础的Springboot搭建整合mybatis的基础教程。
选择Idea默认创建方式
根据步骤进行包名和程序名称的添写
选择相关依赖(默认不选择)
后续省略、这个必备
<!--添加父版本支持-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--指定JDK版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--springbootweb支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--添加mybatis整合springboot-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--连接MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok支持简化开发-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--开发测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
添加好依赖之后我们一定要等maven仓库跟新之后在进行后续的操作(不然会找不到指定的资源等错误信息)
User表
id | name | age | |
---|---|---|---|
1 | Jone | 18 | [email protected] |
2 | Jack | 20 | [email protected] |
3 | Tom | 28 | [email protected] |
4 | Sandy | 21 | [email protected] |
5 | Billie | 24 | [email protected] |
其对应数据库脚本如下
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
其对应的数据库 Data 脚本如下:
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');
在这里数据库层面我们就完成了
src
实体类对比数据库中的字段和字段类型进行编写、进行lombok简化开发
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private int age;
private String email;
}
mapper接口对应着每一个实体类、进行CRUD演示
@Repository("userMapper")
public interface UserMapper {
/**
* 保存一个User对象
* @param user
*/
void saveUser(User user);
/**
* 修改一个User对象
* @param user
*/
void UpdateUser(User user);
/**
* 查询全队User对象
* @return
*/
List<User> listUser();
/**
* 根据Id进行删除一个User对象
* @param id
*/
void deleteUser(Long id);
/**
* 根据Id进行检索一个User对象
* @param id
* @return
*/
User findById(Long id);
}
@RestController // Restful 风格返回json数据
@RequestMapping("/user") //类路径访问地址
public class UserController {
/**
* 依赖注入userMapper接口进行方法调用
* @return
*/
@Autowired
private UserMapper userMapper;
/**
* 查询ListUser
* @return
*/
@GetMapping("/listuser")
public List<User> listUser(){
return userMapper.listUser();
}
/**
* 根据Id检索User对象
* @param id
* @return
*/
@GetMapping("/findById/{id}")
public User findById(@PathVariable("id") Long id){
return userMapper.findById(id);
}
/**
* 根据ID删除一个User对象后查询全部User对象
* @param id
* @return
*/
@RequestMapping("/deleteById/{id}")
public List<User> deleteById(@PathVariable(value = "id") Long id){
userMapper.deleteUser(id);
return userMapper.listUser();
}
/**
* 保存User对象后查询全部User对象
* @return
*/
@RequestMapping("/saveUser")
public List<User> insertUser(){
User user = new User(27L,"张三",22,"[email protected]");
userMapper.saveUser(user);
return userMapper.listUser();
}
}
mapper.xml这个每一个实体都对应这个一个xml文件来映射sql语句
id -- 对应mapper接口中的方法名称
namespace -- 指定mapper接口的全路径
parameterType -- 指定输入类型
resultType -- 返回值类型就是对应实体的全路径
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zkr.springbootmybatis.mapper.UserMapper">
<insert id="saveUser" parameterType="com.zkr.springbootmybatis.entity.User">
INSERT INTO
user
VALUES
(#{id},#{name},#{age},#{email})
</insert>
<update id="UpdateUser" parameterType="com.zkr.springbootmybatis.entity.User">
UPDATE
user
SET
name=#{name}
WHERE
id=#{id}
</update>
<delete id="deleteUser">
DELETE
FROM
user
WHERE
id=#{id}
</delete>
<select id="listUser" resultType="com.zkr.springbootmybatis.entity.User">
select * from User
</select>
<select id="findById" resultType="com.zkr.springbootmybatis.entity.User" parameterType="long">
SELECT
*
FROM
user
WHERE
id=#{id}
</select>
</mapper>
这里我们不仅需要配置springboot的配置文件还要配置mybatis所需要的配置文件
如:告诉springboot,mybatis所需要的实体类的位置、实体类对应的mapper.xml文件的位置
还有如果需要可以配置mybatis的全局配置文件的位置也要指定。
#端口映射
server:
port: 8989
spring:
# 数据库驱动连接
datasource:
#mysql8之后需要指定时区和安全连接方式
url: jdbc:mysql://localhost:3306/hebi?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
# mybatis配置实体类的路径
type-aliases-package: com.zkr.springbootmybatis.entity
# mybatis配置mapper.xml路径
mapper-locations: classpath:/mapper/*.xml
# mybatis全局配置的路径
config-location: classpath:/mybatis-config/*.xml
@MapperScan : 用于扫描mapper接口的位置进行添加到IOC容器
@SpringBootApplication
@MapperScan("com.zkr.springbootmybatis.mapper")
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
测试代码就不在这里编写了。
以上十步就是最简单的SpringBoot整合MyBatis的步骤、可以进行保存方便日后开发的时候用来查阅。
文章浏览阅读141次。AnyObject 、Any、 AnyClass;as、 as?、 as! ;try try?、 try! 的区别一,AnyObject, AnyAnyObjet 代表任何Class类型实例对象,相当于OC中的idpublic typealias AnyObject// The protocol to which all class types implicitly conform. 只适用于class类型eg1:typealias Complicate = (AnyObject) ->_swift test func throws
文章浏览阅读2.2k次。Logout的配置很简单,只需要在http中加入下面的配置就可以了[html] view plaincopysec:logout invalidate-session="true" logout-url="/logout" logout-success-url="/login.jsp" /> invalidate-session是否销毁Session_spring security authenticationmanager logout
文章浏览阅读4.5k次,点赞3次,收藏3次。遇到这么一个小问题,根据录入的起点数值和终点数值到数据库查看录入的这个区间在数据库中是不是存在,这个问题其实就是一个逻辑判断,但是当时一下子没像清楚。画个图看一下就明白了下面我用图表示下:其中红色表示数据库中的值,黑色表示输入的值,下面“起点”用qd表示,“终点”用zd表示,“输起”用sq表示,“输终”用sz表示。首先第一种情况他的sql我们经常写,qd <= sq和zd>..._sql 根据输入的值 查询是否在开始和结束值范围
文章浏览阅读3.2k次。场景:我们利用DataFrame对日志中出现的错误次数进行一个统计。 一,准备日志文件: 我这里是使用的hadoop的日志文件,因为以前配置文件没有配好,所有每次启动hadoop会有错误的信息,记录在日志文件。二,书写流程: 1,读取日志文件,将文件转化成RDD。 2,将日志文件通过map函数将数据转化行的格式返回。 3,创建元类型, 即创建schema,为RDD转_dataframe show 生成了日志文件
文章浏览阅读3.8k次,点赞4次,收藏22次。/* 名称:51单片机之数码管显示实验 说明:对于数码管来说,其本质上可以理解为按照一定规则组合的多个二极管。其使用只需按照特定规则显示对应的二极管即可。要稍微注意一点的就是多个数码管的显示分为静态显示和动态显示。静态显示就是每个二极管显示的内容是一样的,通过片选信号来决定是哪个二极管该显示。动态数码管,即利用人眼的视觉停留效果,快速扫描,快速显示每个数码管的内容,使得每个数码...
文章浏览阅读4.7k次。求问matlab计算的几个公式以及方法.峰值max峭度应该就是梯度了gradient曲线画图:plot(二维)plot3(三维),其他画图都用这个就够了查matlab文档求matlab高手,这个公式用simulink怎么表示问题是你t是整数么?如果整数简单的传递函数环节就能表达出来请教如何用matlab求拟合的公式,就是我知道一组数据,用matlab拟合曲线后,怎么知道这个曲线的方程使用polyf..._matlab求π÷4的近似值
文章浏览阅读1.2k次。默认只能上传4M大小附件1.使用管理员账户登录应用层服务器 打开 http://localhost:8080/tfs/defaultcollection/WorkItemTracking/v1.0/ConfigurationSettingsService.asmx2.调用 GetMaxAttachmentSize 查看当前附件大小3. 调用 SetMaxAtta_tfs 设置git 上传文件大小
文章浏览阅读2.2w次,点赞2次,收藏6次。二进制K8s集群部署——版本为v1.20.4https://www.cnblogs.com/lizexiong/p/14882419.html主机名IP地址组件系统配置k8smaster1192.168.10.101docker、etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy、nginx、keepalivedCentos7.92C/2Gk8smaster2_kubesphere openebs
文章浏览阅读3.3k次,点赞6次,收藏9次。基于Xcode13.x,swift5.x,以后会在此项目基础上进行完善这篇文章介绍怎么改造一个swift默认项目,搭建一个swift通用项目框架,基于nav+tabbar,调整项目结构和层级关系,创建基类(BaseViewController、BaseNavigationController、BaseTabBarController),使用swift分类(extension)和引用oc文件GitHub Demo 地址swift基础教程默认项目创建和分类使用:Swift -《从零开始1》:创._swift项目
文章浏览阅读2.6k次。Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4
文章浏览阅读714次。毕业设计设计题目:基于80C51的简易计算器设计系别: 电气学院专业: 应用电子技术班级: 电子1547班姓名: 苏丹丹学号: 1230302154705指导教师: 储海燕(共 28 页)2015年 04 月 23 日摘? 要随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了,?单片机的应用已经越来越贴近生活..._计算机简单计算器论文
文章浏览阅读145次。虽然已经开发了几种用于语音合成检测的深度学习模型,但大多数模型的通用性很差,特别是当攻击具有与所看到的统计分布不同的统计分布时。实验结果表明,我们的方法在大多数任务中实现了与基线相当或更好的性能,包括自动语音识别和八个 SUPERB 任务中的五个。本文进行了首次研究,揭示了现实生活中的声学场景与最相关的 AE 的语义嵌入之间的关系。在现实生活中的 ASC 数据集上进行的实验表明,所提出的 ERGL 通过仅学习有限数量的 AE 的嵌入,在 ASC 上实现了有竞争力的性能。