数据库: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. ArkTs布局入门04——相对布局 & 媒体查询

    1.相对布局 1.1.概述 RelativeContainer为采用相对布局的容器,支持容器内部的子元素设置相对位置关系.子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布 ...

  2. FineReport取消强制分页和调整宽度的设置方法

    在decision里,找到管理系统-目录管理,打开相应挂载的报表,在参数设置里,添加以下内容: _bypagesize_ 字符串 false

  3. 如何判断平台是x86还是arm

    case $(uname -m) in x86_64) echo x86;; aarch64) echo arm;; esac ref 上面的代码片改自这里 https://stackoverflow ...

  4. Mac中nginx的默认安装路径和启动方式

    1.安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置文件路径) /usr/local/var/www (服务器默认路径) / ...

  5. H2数据UNIX_TIMESTAMP兼容问题

    开篇  今天某同事在spring结合H2实现mybatis DAO层单测的时候遇到一个问题,本着人道主义临时支持下我司大xx业务,就帮忙一起看了下,回想一下整个过程还是挺有意思的,就顺便写了这篇文章来 ...

  6. Qt编写安防视频监控系统43-图片回放

    一.前言 之前就已经具备了本地回放.远程回放.设备播放3个模块,其中本地回放用来回放存储在软件本地电脑上的视频文件:远程回放需要通过调用厂家sdk或者GB28181(没实现,后期考虑增加)从NVR回放 ...

  7. 使用Visual Studio Code进行前端开发并运行前端页面时提示:npm WARN Local package.json exists, but node_modules missing, did you mean to install?

    使用Visual Studio Code进行前端开发并运行前端页面时提示如下错误: npm WARN Local package.json exists, but node_modules missi ...

  8. IM跨平台技术学习(四):蘑菇街基于Electron开发IM客户端的技术实践

    本文由蘑菇街前端技术团队分享,原题"Electron 从零到一",有修订和改动. 1.引言 本系列文章的前面几篇主要是从Electron技术本身进行了讨论(包括:第1篇初步了解El ...

  9. 16. C++快速入门--模板和Concept

    待修改 1 定义模板 1.1 模板形参 模板参数 模板可以有两种参数, 一种是类型参数, 一种是非类型参数 这两种参数可以同时存在, 非类型参数 的类型 可以是 模板类型形参 template < ...

  10. 修改led-core.c 让led的delay_on和delay_off时间不会应为trigger配置改版而重置为1HZ

    先列一下leds trigger的设置流程 echo none > trigger 的流程 led_trigger_set() | led_stop_software_blink() echo ...