MyBatis操作数据库(注解方式)

MyBatis是一个持久层框架,和Spring没有任何关系,可以用来简化数据库的操作!

创建工作:

创建Spring Boot工程,并导入MyBatis的起步依赖,Mysql的依赖等

配置数据库:

#配置数据库的连接字符串
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8username: rootpassword: 自己设定的密码driver-class-name: com.mysql.cj.jdbc.Driver

本文主要讲解使用注解的方式来操作数据库!!

然而操作数据库主要是用来增删改查四个方面,因此,本文着重于增删改查来讲解!!

在操作数据库之前,我们需要创建一个数据库:

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
USE mybatis_test;
-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`username` VARCHAR ( 127 ) NOT NULL,`password` VARCHAR ( 127 ) NOT NULL,`age` TINYINT ( 4 ) NOT NULL,`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',`phone` VARCHAR ( 15 ) DEFAULT NULL,`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now(),PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 
-- 添加⽤⼾信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

那么,此时我们需要创建一个UserInfo类,使其各个参数名称与数据库参数名称相同(类似)

@Data
public class UserInfo {private Integer id;private String username;private String password;private Integer age;private Integer gender;private String phone;private Integer deleteFlag;private LocalDateTime createTime;private LocalDateTime updateTime;
}

值得注意的是:由于Java参数名称语法的原因,不能带有"_"(下划线),因此,Java中参数名称与数据库中参数名称出现了不一样的情况!

有了上述的前提,我们便开始步入正题吧!

增:

@Mapper
public interface UserInfoMapper {@Insert("insert into userinfo(id,username,gender,phone,password,age)" +" values(#{id},#{username},#{gender},#{phone},#{password},#{age})")Integer insert(UserInfo userInfo);}

Spring Boot测试:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid insert() {UserInfo userInfo=new UserInfo();userInfo.setAge(10);//userInfo.setId(14);userInfo.setGender(1);userInfo.setPassword("123456");userInfo.setUsername("zhao");userInfo.setPhone("13512345678");Integer result=userInfoMapper.insert(userInfo);log.info(result.toString());log.info("insert 方法,执行结果:{}",result);}}

测试代码运行结果为:

数据库数据查看:

同理:在增加一个id为9的数据!(方便后续测试自增主键)

数据库查看效果

那么,现在我们对主键id实现自增主键!!

@Mapper
public interface UserInfoMapper {//返回自增id@Options(useGeneratedKeys = true, keyProperty = "id")@Insert("insert into userinfo(id,username,gender,phone,password,age)" +" values(#{id},#{username},#{gender},#{phone},#{password},#{age})")Integer insert(UserInfo userInfo);}

Spring Boot测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid insert() {UserInfo userInfo=new UserInfo();userInfo.setAge(10);//不再手动设置主键,使其自增主键// userInfo.setId(9);userInfo.setGender(1);userInfo.setPassword("123456");userInfo.setUsername("zhao");userInfo.setPhone("13512345678");Integer result=userInfoMapper.insert(userInfo);log.info(result.toString());log.info("insert 方法,执行结果:{}",result);}}

数据库查看运行效果:

因此,自增主键得以实现!

删:

根据id来删除数据

@Mapper
public interface UserInfoMapper {@Delete("delete from userinfo where id=#{id}")Integer delete(Integer id);
}

Spring Boot测试代码:(删除id为4的数据)

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid delete() {Integer result =userInfoMapper.delete(4);log.info(result.toString());log.info("delete 方法,执行结果:{}",result);}}

代码的运行结果为:

再次查询数据库:

对比结果,我们可以看出,数据库中id=4的数据已经被删除!!

改:

根据id来改掉其年龄

@Mapper
public interface UserInfoMapper {@Update("update userinfo set age=#{age} where id=#{id}")Integer update(UserInfo userInfo);
}

Spring Boot测试代码:(将id=5的数据其age改为99)

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid update() {UserInfo userInfo=new UserInfo();userInfo.setAge(99);userInfo.setId(5);Integer result=userInfoMapper.update(userInfo);log.info(result.toString());log.info("update 方法,执行结果:{}",result);}

代码的运行结果为:

查询数据库,查看结果:

查:

查的话,涉及到数据库参数名与Java属性名不一致的情况,所以操作不是很容易,但是,方法也不少!我们来看一下吧!

@Mapper
public interface UserInfoMapper {@Select("select id, username, password, age, gender, phone," +" delete_flag, create_time , update_time" +" from userinfo")List<UserInfo> selectAll();}

Spring Boot测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid selectAll() {List<UserInfo> list=userInfoMapper.selectAll();log.info(list.toString());}
}

 代码的运行结果为:

很显然这是不正确的查询结果!因为数据库中每个参数都有数据 :

那么,我们来看一下解决方案吧!

查1:as起别名
@Mapper
public interface UserInfoMapper {/*** 对字段进行重命名* @return*/@Select("select id, username, password, age, gender, phone," +" delete_flag as deleteFlag, create_time as createTime, update_time as updateTime" +" from userinfo")List<UserInfo> selectAll();}

Spring Boot测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid selectAll() {List<UserInfo> list=userInfoMapper.selectAll();log.info(list.toString());}
}

代码的运行结果为:

查询成功!

查2:使用@Result注解

@Mapper
public interface UserInfoMapper {/*** 使用@Result注解* @return*/@Select("select * from userinfo")@Results(id="BaseMap",value = {@Result(property = "create_time", column = "createTime"),@Result(property = "update_time", column = "updateTime"),@Result(property = "delete_flag", column = "deleteFlag")})List<UserInfo> selectAll2();}

Spring Boot测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid selectAll2() {List<UserInfo> list=userInfoMapper.selectAll2();log.info(list.toString());}}

运行结果为;

查3:更改application.yml文件配置;
mybatis:configuration: map-underscore-to-camel-case: true  #自动驼峰转换
@Mapper
public interface UserInfoMapper {/*** 更改yml文件配置* @return*/@Select("select * from userinfo")List<UserInfo> selectAll3();}

Spring Boot测试代码:

@Slf4j
@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid selectAll3() {List<UserInfo> list=userInfoMapper.selectAll3();log.info(list.toString());}}

代码的运行结果为:

本文主要是用注解的方式来带领大家了解MyBatis来操作数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

demo型xss初级靶场

一、环境 XSS Game - Ma Spaghet! | PwnFunction 二、开始闯关 第一关 看看代码 试一下直接写 明显进来了为什么不执行看看官方文档吧 你不执行那我就更改单标签去使用呗 ?somebody<img%20src1%20onerror"alert(1)"> 防御&#xff1a; innerText 第二关…

【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0

目录 一、 Kubernetes 的概述 二、服务器配置 2.1 服务器部署规划 2.2服务器初始化配置 三、安装Docker/kubeadm/kubelet【所有节点】 3.1 安装Docker 3.2 添加阿里云YUM软件源 3.3 安装kubeadm&#xff0c;kubelet和kubectl 四、部署Kubernetes Master 五、部署Kube…

【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…

程序环境和预处理(2)

文章目录 3.2.7 命名约定 3.3 #undef3.4 命令行定义3.5 条件编译3.6 文件包含3.6.1 头文件被包含的方式3.6.2 嵌套文件包含 4. 其他预处理指令 3.2.7 命名约定 一般来讲函数和宏的使用语法很相似&#xff0c;所以语言本身没法帮我们区分二者&#xff0c;那我们平时的一个习惯是…

JavaWeb Tomcat启动、部署、配置、集成IDEA

web服务器软件 服务器是安装了服务器软件的计算机&#xff0c;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通过浏览器来访问这些项目。 Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序…

CentOS部署FastDFS+Nginx并实现远程访问本地服务器中文件

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

LeetCode 刷题 [C++] 第279题.完全平方数

题目描述 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11…

U盘删除的文件怎么找回?3个精选方法分享!

“在对u盘进行清理时&#xff0c;我删除了很多不需要的文件&#xff0c;但是刚刚检查的时候才发现&#xff0c;有些还需要使用的文件也被删掉了。这可怎么办呢&#xff1f;我应该如何恢复这些文件呢&#xff1f;” U盘便携性、大容量、高速传输以及易于操作的优点使得它在移动办…

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前&#xff0c;需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告&#xff0c;在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…

攻防世界-get_post

题目信息 相关知识 -G&#xff1a;表示GET请求&#xff0c;缺省POST -d参数用于发送 POST 请求的数据体 使用-d参数以后&#xff0c;HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法&#xff0c;因此可以省略-X PO…

docker 创建RedHat8.5镜像

确定要创建的小红帽版本&#xff0c;可以进入官网查看 https://hub.docker.com/search?qRedHat 复制命令到安装docker的机器上&#xff0c;拉取小红帽镜像。 docker pull redhat/ubi8:latest 执行完成后&#xff0c;查看镜像是否拉取成功 docker images |grep redhat 如图…

Linux安装JumpServer并结合内网穿透实现公网访问本地服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…