MyBatis入门到掌握(JAVA)

建立连接可能涉及到的问题(只需要自己改一下就行)

1、MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发

2、数据库连接配置

(1)yml配置

# 数据库连接配置
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

(2)properties配置

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root

3、数据库建表代码

-- 创建数据库
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' );

4、需要引入的pom文件依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>4.0.0</version></dependency>

5、数据库查询代码

(1)接口

package com.example.demo;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserInfoMapper {//访问数据库数据@Select("select * from userinfo")List<UserInfo> queryUserList();
}

(2)定义对象

package com.example.demo;
import lombok.Data;
import java.util.Date;@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 Date createTime;private Date updateTime;
}

(3)测试类

package com.example.demo;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class DemoApplicationTests {@Autowired
private UserInfoMapper userInfoMapper;@Testvoid contextLoads() {System.out.println(userInfoMapper.queryUserList());}
}

6、数据删除方式有两种

(1)逻辑删除:update(推荐)

(2)物理删除:delete

7、在Mybatis当中我们可以借助⽇志, 查看到sql语句的执⾏、执⾏传递的参数以及执⾏结果在配置⽂件中进⾏配置

mybatis:configuration: # 配置打印 MyBatis⽇志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

8、生成测试(测试类上面要加@SpringBootTest)

9、单参查寻(只有一个参数时#后面的名称无所谓随便定义)

(1)接口部分代码

    @Select("select * from userinfo where id = #{userId}")UserInfo queryUserInfo(Integer userId);

(2)测试部分代码

void queryUserInfo() {log.info(userInfoMapper.queryUserInfo(1).toString());}

10、多参数时

(1)接口部分代码(idea上面创建的代码)阿里云创建的不能应用此方法

@Select("select * from userinfo where id = #{userId} and delete_flag = #{deleteFlag}")UserInfo queryUserInfo( Integer userId, Integer deleteFlag);

(1)接口部分代码(阿里云创建的项目代码)

    @Select("select * from userinfo where id = #{param1} and delete_flag = #{param2}")UserInfo queryUserInfo(Integer id, Integer deleteFlag);

(2)测试部分代码

 void testQueryUserInfo() {log.info(userInfoMapper.queryUserInfo(1,0).toString());}

11、参数重命名(重命名之后不能用之前的)

(1)接口部分代码

    @Select("select * from userinfo where id = #{id} and delete_flag = #{param2}")UserInfo queryUserInfo(@Param("id") Integer id, Integer deleteFlag);

(2)测试部分代码

void testQueryUserInfo() {log.info(userInfoMapper.queryUserInfo(1,0).toString());}

12、web调用查询代码(三层架构模式)

(1)Controller代码

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/queryAllUser")public List<UserInfo> queryAllUser(){return userService.queryAllUser();}
}

(2)Service代码

package com.example.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserInfoMapper userInfoMapper;public List<UserInfo> queryAllUser(){return userInfoMapper.queryUserList();}
}

(3)Mapper代码

package com.example.demo;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserInfoMapper {//访问数据库数据@Select("select * from userinfo")List<UserInfo> queryUserList();
}

(4)查询结果

13、插入数据

(1)接口部分代码

 @Select("insert into userinfo (username,password,age,gender,phone) values(#{username},#{password},#{age},#{gender},#{phone})")Integer insert(UserInfo userInfo);

(2)测试部分代码

    @Testvoid insert() {UserInfo userInfo=new UserInfo();userInfo.setUsername("zhangsan");userInfo.setPassword("123456");userInfo.setAge(18);userInfo.setGender(0);userInfo.setPhone("18330322");userInfoMapper.insert(userInfo);}

(3)重命名的方式

@Select("insert into userinfo (username,password,age,gender,phone) " +"values(#{userInfo.username},#{userInfo.password},#{userInfo.age},#{userInfo.gender},#{userInfo.phone})")Integer insert(@Param("userInfo") UserInfo userInfo);

(4)获得自增的数据,比如我们买东西我们可以看我们买了多少东西,这样有个数

(4.1)接口部分代码

@Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into userinfo (username,password,age,gender,phone) " +"values(#{username},#{password},#{age},#{gender},#{phone})")Integer insert(UserInfo userInfo);

(4.2)测试部分代码

   @Testvoid insert() {UserInfo userInfo=new UserInfo();userInfo.setUsername("zhangsan");userInfo.setPassword("123456");userInfo.setAge(18);userInfo.setGender(0);userInfo.setPhone("18330322");Integer result= userInfoMapper.insert(userInfo);log.info("插入了几条数据"+result+"自增Id是"+userInfo.getId());}

14、删除数据

(1)接口部分代码

 @Delete("delete from userinfo where id=#{id}")Integer delete(@Param("id") Integer id);

(2)测试部分代码

    @Testvoid delete() {userInfoMapper.delete(11);}

15、更改数据

(1)接口部分代码(idea创建的项目)

 @Update("update userinfo set password=#{password} where id=#{id}")Integer update(String password,Integer id);

(1)接口部分代码(阿里云创建的项目)

@Update("update userinfo set password=#{param1} where id=#{param2}")Integer update(String password,Integer id);

(2)测试部分代码

  @Testvoid update() {userInfoMapper.update("777777",12);}

15.1、放在对象里更新

(1)接口部分代码

 @Update("update userinfo set username=#{username},password=#{password},age=#{age} where id=#{id}")Integer update(UserInfo userInfo);

(2)测试部分代码

@Testvoid update() {UserInfo userInfo=new UserInfo();userInfo.setUsername("lisi");userInfo.setPassword("987654");userInfo.setAge(10);userInfo.setId(12);userInfoMapper.update(userInfo);}

16、mybatis赋值失败原因

(1)解决办法

(1.1)改别名 用as的方法

@Select("select id,username,password,age,phone," +"delete_flag as deleteFlag,create_time as createTime,update_time as updateTime from userinfo")List<UserInfo> queryUserList();

(1.2)注解方式

  @Results({@Result(column = "delete_flag",property = "deleteFlag"),@Result(column = "create_time",property = "createTime"),})@Select("select * from userinfo")List<UserInfo> queryUserList();

(1.3)1.2的@Results的复用

 @Results(id = "base",value = {@Result(column = "delete_flag",property = "deleteFlag"),@Result(column = "create_time",property = "createTime"),})@Select("select * from userinfo")List<UserInfo> queryUserList();@ResultMap(value = "base")@Select("select id,username,password,age,phone,delete_flag ,create_time,update_time from userinfo")UserInfo queryUserInfo( Integer userId, Integer deleteFlag);

(1.4)开启驼峰命名(推荐)

直接配置yml文件

mybatis:configuration:map-underscore-to-camel-case: true

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

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

相关文章

OAuth2-03-springboot 整合

拓展阅读 OAuth 2.0-01-Overview OAuth2-02-java 整合 OAuth2-03-springboot 整合 序言 安全性是暴露由许多微服务组成的公共访问API时要考虑的最重要的一个方面。 Spring有一些有趣的功能和框架&#xff0c;使我们的微服务安全配置更容易。 在本文中&#xff0c;我将向…

基于SpringBoot的“致远汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“致远汽车租赁系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 致远汽车租赁系统总体功能模块图 系统首页界…

2024年 前端JavaScript 进阶 第3天 笔记

3.1-JS进阶-内容和两种编程思想 3.2-构造函数实现封装以及存在 3.3-原型对象prototype 3.4-数组扩展案例-求最大值和数组求和 3.5-constructor属性以及应用 3.6-对象原型proto 3.7-原型继承 3.8-原型链以及instanceof运算符 3.9-综合案例-模态框构造函数写法 3.10-综合案例-0pe…

Phpstorm配置Xdebug

步骤 1、先去官网找到对应的php xdebug的版本 2、配置phpstorm断点调试 网址&#xff1a;https://xdebug.org/ 查看php对应的xdebug版本&#xff1a;Xdebug: Support — Tailored Installation Instructions 1.1查看对应php xdebug版本 全选&#xff0c;复制到目标网址 我…

笔记本三屏异显方案——更新中,是否能够在FPGA上实现,淘宝购物的价格太贵

三屏是&#xff08;笔记本电脑屏幕&#xff0c;两个显示器屏幕&#xff09;&#xff0c;异显是采用屏幕的扩展功能&#xff0c;这样能够左边看视频文章&#xff0c;右边control cv代码。 一、 电脑有一个HDMI口的时候&#xff0c;只需要买一个TypeC&#xff08;雷电接口&#x…

FreeBSD下如何进行添加路由等配置?

FreeBSD系统可以当作一台路由器来使用&#xff0c;实际上当年路由器刚刚出来的时候&#xff0c;有很大一部分就是用主机安装FreeBSD来提供路由功能的。 路由的基础知识 路由&#xff0c;就是计算机网络中决定数据包从源地址到目的地址路径的一种传输过程。路由表&#xff0c;就…

【前端Vue】社交信息头条项目完整笔记第3篇:三、个人中心,TabBar 处理【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配。二、登录注册准备,实现基本登录功能,登录状…

vue 数据埋点

最近菜鸟做项目&#xff0c;需要做简单的数据埋点&#xff0c;不是企业级的&#xff0c;反正看渡一的视频&#xff0c;企业级特别复杂&#xff0c;包括但不限于&#xff1a;错误收集、点击地方、用户行为…… 菜鸟的需求就是简单收集一下用户的ip、地址、每个界面的访问时间&a…

技术揭秘:如何打造完美互动的充电桩硬件与服务平台?

充电桩平台全套源码地址 https://gitee.com/chouleng/cdzkjjh.git 这张图像是一个系统或服务的架构图。以下是对图中各个部分的描述&#xff1a; 前端&#xff1a; 位于图像的顶部&#xff0c;颜色为浅绿色。用户服务端&#xff1a; 紧邻前端&#xff0c;颜色为淡黄色。设备服…

MOS管小电流发热怎么处理?

01 MOSFET的击穿有哪几种&#xff1f; Source、Drain、Gate —— 场效应管的三极&#xff1a;源级S、漏级D、栅级G。&#xff08;这里不讲栅极GOX击穿了啊&#xff0c;只针对漏极电压击穿&#xff09; 先讲测试条件&#xff0c;都是源栅衬底都是接地&#xff0c;然后扫描漏极…

【局部路径规划算法】—— DWA动态窗口法(c++实现))

参考资料&#xff1a; &#xff08;1&#xff09;机器人局部避障的动态窗口法(dynamic window approach) &#xff08;2&#xff09;机器人局部避障的动态窗口法 &#xff08;3&#xff09;局部规划算法&#xff1a;DWA算法原理 &#xff08;4&#xff09;SLAM学习&#xff1a;…

安卓开机动画

目录 一、开机动画的2种模式1.1 android模式2.2 movie模式 二、开机动画代码运行位置三、删除开机动画四、自定义开机动画实践 一、开机动画的2种模式 一种是使用两张图片利用某种效果来造成动态&#xff0c;另一种则是用一个图包循环显示的方式来形成动态。当然&#xff0c;这…

软考高级架构师:CISC (复杂指令集计算机) 和 RISC (精简指令集计算机)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

去班味的尽头是风险管理

运维工程师的“班味”是从风险管理就加重的。 什么是班味呢&#xff1f;指的是打工人身上特有的疲惫气质&#xff0c;面色憔悴、双目无神和腰酸背痛都是“班味”的显著表现。习惯性回复“收到&#xff0c;马上来”、不自觉唉声叹气、下班也提不起精神等症状&#xff0c;则说明…

Spring Boot:Web开发之视图模板技术的整合

Spring Boot 前言Spring Boot 整合 JSPSpring Boot 整合 FreeMarkerSpring Boot 整合 ThymeleafThymeleaf 常用语法 前言 在 Web 开发中&#xff0c;视图模板技术&#xff08;如 JSP 、FreeMarker 、Thymeleaf 等&#xff09;用于呈现动态内容到用户界面的工具。这些技术允许开…

后端SpringBoot+Mybatis 查询订单数据表奇怪报错加一

排错过程&#xff1a; 看报错意思是SQL语句存在错误&#xff0c;然后使用图形化工具运行这个SQL语句 其实这里稍微细心想一下就能发现问题&#xff0c;但是当时没深入想&#xff0c;就觉得order表前加了数据库名字影响不大&#xff0c;所以感觉SQL语句是没问题的&#xff0c;然…

JavaScript基础代码练习之翻转数组

一、要求将给定数组 [red, green, blue, pink, purple] 的内容反转存放&#xff0c;并将结果输出到控制台。 二、编写代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" cont…

Appium如何自动判断浏览器驱动

问题&#xff1a;有的测试机chrome是这个版本&#xff0c;有的是另一个版本&#xff0c;怎么能让自动判断去跑呢&#xff1f;&#xff1f; 解决办法&#xff1a;使用appium的chromedriverExecutableDir和chromedriverChromeMappingFile 切忌使用chromedriverExecutableDir和c…

19c使用Datapump做数据迁移

环境&#xff1a; 源库目标库IP192.168.37.200192.168.37.201系统版本RedHat 7.9RedHat 7.9数据库版本19.3.0.0.019.3.0.0.0SIDbegtarhostnamebegtar数据量412KB 详细说明&#xff1a;因为只是做练习&#xff0c;这里采用了两个单例19c作为源端和目的端服务器&#xff0c;环境…

PHP在线加密系统网站源码

源码介绍 PHP在线加密系统网站源码&#xff0c;这个是sg的加密,免费可用(目前)并不会收费 源码说明&#xff1a;下载直接上传即可 下载地址 蓝奏云下载&#xff1a;https://wfr.lanzout.com/i6c331togiji