mybatis - [05] Mybatis的CURD
数据库:
mysql 8.0.28技术框架:
mybatis 3.5.13、maven 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&useUnicode=true&characterEncoding=UTF-8&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的更多相关文章
- mybatis 05: mybatis中的动态代理
mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版
一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...
- Hello Mybatis 02 mybatis generator
接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了. 数据库准备 首先我们,还是需要在数据库中新建一个 ...
- 【Mybatis】MyBatis之动态SQL(六)
MyBatis 的强大特性之一便是它的动态 SQL,本章介绍动态 SQL 查看本章,请先阅读[Mybatis]MyBatis对表执行CRUD操作(三). 本例表结构 CREATE TABLE `emp ...
- 【Mybatis】MyBatis之Sql配置文件的使用(四)
上一章[Mybatis]MyBatis对表执行CRUD操作(三),已经讲了基本操作,本章介绍Sql配置文件中常用功能 1.插入返回主键 2.参数值的获取方式 3.resultMap使用 插入返回主键 ...
- MyBatis笔记----MyBatis 入门经典的两个例子: XML 定义与注解定义
----致敬MyBatis官方开放文档让大家翻译,不用看书直接看文档就行了,mybatis的中文文档还需要完备的地方 简介 什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以 ...
- 【Mybatis】MyBatis对表执行CRUD操作(三)
本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...
- 【Mybatis】MyBatis配置文件的使用(二)
本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...
- 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发
[原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...
- 【MyBatis】MyBatis之如何配置
1,MyBatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简 ...
随机推荐
- python+playwright安装+使用vsocde运行代码
python虚拟环境 1.安装python,环境配置 2.修改pip镜像源 3.新增虚拟环境 注意路径,例子的路径是在python的目录下生成一个venv文件夹 进入venv文件夹,使用virtual ...
- Consul 学习总结
什么是Consul? Consul是一种服务网络解决方案,使团队能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接.Consul提供服务发现.服务网格(service mesh).流量管理和网 ...
- 深度学习环境搭建(Windows11)
深度学习环境的搭建(Windows11) 偶然重装了系统,在此记录下环境的恢复 基本深度学习环境的搭建,包括Anaconda+CUDA+cuDNN+Pytorch+TensorRT的安装与配置. ps ...
- openEuler欧拉部署gitbook
安装nodejs10 参见<openEuler欧拉安装指定版本的nodejs> 安装Gitbook n 16 # 选择高版本的node npm config set registry ht ...
- Member not found: ’packageRoot’ in Flutter
path/flutter/.pub-cache/hosted/pub.dartlang.org/platform-3.0.0/ lib/src/interface/local_platform.dar ...
- GraphQL Part VIII: 使用一对多查询
今天,我们引入两个新的实体来处理客户与订单.客户与订单之间是一对多的关系,一个客户可以拥有一个或者多个订单,反过来,一个订单只能被某个客户所拥有. 可以按照 Engity Framework 的约定配 ...
- nginx国密ssl测试
文章目录文件准备编译部署nginx申请国密数字证书配置证书并测试文件准备下载文件并上传到服务器,这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载. 点击下载 下载国密版openssl ...
- JVM简介—3.JVM的执行子系统
大纲 1.Class文件结构 2.Class文件格式概述 3.Class文件格式详解 4.字节码指令 5.类的生命周期和初始化 6.类加载的全过程 7.类加载器 8.双亲委派模型 9.栈桢详解 11. ...
- 操作系统messages文件位置更改
问题现象 在遇到一个问题的时候需要查看操作系统的日志,但是到操作系统上的 /var/log/messages 文件中发现该文件已经很久没有刷新过了. 这个系统之前是做过安全加固的,我怀疑它改过操作系统 ...
- [转]vue 项目npm install 报错 npm ERR! enoent undefined ls-remote -h -t ssh://git@github.com/sohee-lee7/Sq
npm install出错的解决办法 很多小伙伴可能跟我一样是个小白,还不知道怎么启动vue,然后就照着README一阵乱搞,然后npm install的时候就报了以下的错误,网上的解决办法也看不懂, ...