数据库:mysql 8.0.28

技术框架:mybatis 3.5.13maven 3.8.7

一、准备工作

(1)数据库建库建表

-- 创建数据库
create database if not exists mybatis;
-- 切换数据库
use mybatis;
-- 创建用户表
create table if not exists user
(
id int not null primary key,
name varchar(30) null,
pwd varchar(30) null
) charset = utf8;

(2)插入测试数据

insert into mybatis.user (id, name, pwd)
values (1, '漩涡鸣人', '123456'),
(2, '宇智波佐助', '123456'),
(3, '春野樱', '123456'),
(4, '旗木卡卡西', '123456'),
(5, '奈良鹿丸', '123456'),
(6, '秋道丁次', '123456'),
(7, '山中井野', '123456'),
(8, '猿飞阿斯玛', '123456'),
(9, '日向雏田', '123456'),
(10, '犬冢牙', '123456'),
(11, '油女志乃', '123456'),
(12, '夕日红', '123456'),
(520, '1314', 'yanglin'),
(9527, '007', '123456');

(3)配置maven依赖(pom.xml

    <properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies> <build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

(4)mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="!QAZ2wsx"/>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/harley/dao/UserMapper.xml"/>
</mappers>
</configuration>

二、POJO类

package com.harley.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; /**
* 实体类
* @author harley
* @date 2024/05/31 14:00
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {
private int id;
private String name;
private String pwd; }

三、JDBC工具类

package com.harley.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.InputStream; /**
* @author harley
* @date 2024/05/31 13:55
*/
public class MybatisUtils { /* 静态属性,MybatisUtils实例化时生成 */
private static SqlSessionFactory sqlSessionFactory; /* 静态代码块,MybatisUtils实例化时运行 */
static {
try{
String resource="mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
} public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}

四、Mapper类

package com.harley.dao;

import com.harley.pojo.User;

import java.util.List;

public interface UserMapper {
// 查询全部用户
List<User> getUserList(); // 根据id查询用户
User getUserById(int id); // 新增一个用户
int addUser(User user); // 更新用户
int updateUser(User user); // 删除用户
int deleteUser(int id); }

五、Mapper.xml

<?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"> <!-- namespace绑定一个Dao/Mapper接口 -->
<mapper namespace="com.harley.dao.UserMapper">
<!--select查询接口-->
<select id="getUserList" resultType="com.harley.pojo.User">
select * from user
</select>
<select id="getUserById" resultType="com.harley.pojo.User" parameterType="integer">
select * from user where id = #{id}
</select>
<!--对象中的属性,可以直接取出来 -->
<insert id="addUser" parameterType="com.harley.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="com.harley.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="integer">
delete from user where id = #{id}
</delete>
</mapper>

六、测试类

package com.harley.dao;

import com.harley.pojo.User;
import com.harley.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.util.List; /**
* @author harley
* @date 2024/05/31 14:22
*/
public class UserDaoTest { SqlSession sqlSession;
UserMapper userMapper; @Before
public void openSession(){
System.out.println("开启sqlSession");
sqlSession= MybatisUtils.getSqlSession();
userMapper=sqlSession.getMapper(UserMapper.class);
} @Test
public void test(){ // 第二步: getMapper
// UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// List<User> userList = userMapper.getUserList(); List<User> userList = sqlSession.selectList("com.harley.dao.UserMapper.getUserList"); // 第三步: 遍历结果集
for (User user : userList) {
System.out.println(user);
}
// 第四步: 关闭sqlSession
sqlSession.close();
} @Test
public void getUserById(){
User user = userMapper.getUserById(1);
System.out.println(user); } // 增删改需要提交事务
@Test
public void addUser(){
User user = new User(520,"1313","yanglin");
int res = userMapper.addUser(user);
if (res>0){
System.out.println("用户: ["+user.getName()+"] 插入成功");
}
// 提交事务
sqlSession.commit();
} @Test
public void updateUser(){
User user = new User(520,"1314","yanglin");
int res = userMapper.updateUser(user);
if(res>0){
System.out.println("id:["+user.getId()+"] 的信息已更改");
}
// 提交事务
sqlSession.commit(); } @Test
public void deleteUser(){
int id = 9527;
int res = userMapper.deleteUser(id);
if(res>0){
System.out.println("id:["+id+"] 用户已删除");
}
// 提交事务
sqlSession.commit();
} @After
public void closeSession(){
if(sqlSession!=null){
System.out.println("关闭sqlSession");
sqlSession.close();
}
} }

注意:增删改需要提交事务:sqlSession.commit();

七、常见问题

(1)Mapper.xml中的<mapper namespace="com.harley.dao.UserMapper">写成了<mapper namespace="com/harley/dao/UserMapper">

(2)mybatis-config.xml中的<mapper resource="com/harley/dao/UserMapper.xml"/>写成了<mapper resource="com.harley.dao.UserMapper.xml"/>

(3)NullPointerException,没有注册到资源

(4)资源导出失败问题处理

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

— 业精于勤荒于嬉,行成于思毁于随 —

mybatis - [05] Mybatis的CURD的更多相关文章

  1. mybatis 05: mybatis中的动态代理

    mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...

  2. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  3. Hello Mybatis 02 mybatis generator

    接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了. 数据库准备 首先我们,还是需要在数据库中新建一个 ...

  4. 【Mybatis】MyBatis之动态SQL(六)

    MyBatis 的强大特性之一便是它的动态 SQL,本章介绍动态 SQL 查看本章,请先阅读[Mybatis]MyBatis对表执行CRUD操作(三). 本例表结构 CREATE TABLE `emp ...

  5. 【Mybatis】MyBatis之Sql配置文件的使用(四)

    上一章[Mybatis]MyBatis对表执行CRUD操作(三),已经讲了基本操作,本章介绍Sql配置文件中常用功能 1.插入返回主键 2.参数值的获取方式 3.resultMap使用 插入返回主键 ...

  6. MyBatis笔记----MyBatis 入门经典的两个例子: XML 定义与注解定义

    ----致敬MyBatis官方开放文档让大家翻译,不用看书直接看文档就行了,mybatis的中文文档还需要完备的地方 简介 什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以 ...

  7. 【Mybatis】MyBatis对表执行CRUD操作(三)

    本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...

  8. 【Mybatis】MyBatis配置文件的使用(二)

    本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...

  9. 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

    [原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  10. 【MyBatis】MyBatis之如何配置

    1,MyBatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简 ...

随机推荐

  1. 使用Tailwind CSS的几个小Tips

    前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别.它的工作原理是扫描所有 HTML 文件.JavaScript 文件以及任何模板中的 CSS 类名,然 ...

  2. MAC清理

    今日分享 Mac清理 有很多三方软件可以清理,以前用过腾讯的柠檬lite,每次就清个几百兆,系统数据感觉还是得自己手动清理才行 今天电脑又在提醒储存空间不足了,一看占用发现系统数据占了100多个G,学 ...

  3. 关于 Span 的一切:探索新的 .NET 明星:5. .NET 运行时的处理

    .5. NET 运行时会怎么样? 1. Span<T> 是什么? 2. Span<T> 是如何实现的? 3. 什么是 Memory<T>,以及为什么你需要它? 4. ...

  4. OpenID Connect 验证

    OpenID Connect Authentication 几乎所有的 Web 应用程序都提示用户创建账号并登录.为了创建账号,用户被要求提供他们的名字.电子邮件.口令.以及确认口令.不仅这些需要耗费 ...

  5. 比特币源码分析--深入理解区块链16.Base58编码和解码

    比特币源码分析--深入理解区块链16.Base58编码和解码   Base58是比特币中使用的一种独特编码方式,它主要用于比特币的钱包地址,在前面文章已经介绍过如何通过椭圆曲线方程算法,通过私钥来生成 ...

  6. 买苹果MacBook Pro ,有必要买care吗?

    先了解一下AppleCare+ for Mac的服务范围:将原先的一年保修延长至三年,并且提供两次收取服务费的意外保修服务,以及当电池寿命低于80%时免费的电池更换.其中,意外保修服务依然是要收费的, ...

  7. [转]vue项目中app.vue 、main.js和 index.html的关系

    参考链接: 1.vue项目中app.vue .main.js和 index.html的关联 2.Vue中index.html.main.js.App.vue,之间关系 3.关于Vue中main.js, ...

  8. IntelliJ IDEA安装与配置(支持最新2020.2)

    前言 我是从eclipse转IDEA的,对于习惯了eclipse快捷键的我来说,转IDEA开始很不习惯,IDEA快捷键多,组合多,记不住,虽然可以设置使用eclipse的快捷键,但是总感觉怪怪的.开始 ...

  9. C# 设置label(标签)控件的背景颜色为透明

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答 ...

  10. 基于NVIDIA NGC容器安装使用PaddlePaddle

    基于NVIDIA NGC容器安装使用PaddlePaddle PaddlePaddle PaddlePaddle作为国内首个自主研发的深度学习平台,自2016年正式向专业社区开源,是一个技术先进.功能 ...