Mybatis系列全解(三):Mybatis简单CRUD使用介绍
封面:洛小汐
作者:潘潘
在理解中执行,在执行中理解,学习技术也循此道。
前言
上一篇文章 《Mybatis系列全解(二):Mybatis简介与环境搭建》 ,我们对 Mybatis 做了初步讲解,并搭建了一套基本环境,共同完成了一次查询操作。所以本篇文章我们在此基础上,继续拓展了插入、修改、删除三种操作,把我们的CRUD基础操作进行完善。
Mybaits系列全解 (持续更新)
- Mybatis系列全解(一):手写一套持久层框架
- Mybatis系列全解(二):Mybatis简介与环境搭建
- Mybatis系列全解(三):Mybatis简单CRUD使用介绍
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
- Mybatis系列全解(六):Mybatis最硬核的API你知道几个?
- Mybatis系列全解(七):Dao层两种实现方式
- Mybatis系列全解(八):Mybatis的动态SQL
- Mybatis系列全解(九):Mybatis的复杂映射
- Mybatis系列全解(十):Mybatis注解开发
- Mybatis系列全解(十一):Mybatis缓存全解
- Mybatis系列全解(十二):Mybatis插件开发
- Mybatis系列全解(十三):Mybatis代码生成器
- Mybatis系列全解(十四):Spring集成Mybatis
- Mybatis系列全解(十五):SpringBoot集成Mybatis
- Mybatis系列全解(十六):Mybatis源码剖析
目录
1、Mybatis查询操作回顾
2、插入操作
3、修改操作
4、删除操作
5、总结
Mybatis查询操作回顾
默认已安装 Java 开发环境、Mysql数据库、Maven 环境。
Mybatis 的查询分为7个步骤:
1、创建 maven 工程
2、添加 MyBatis 仓库坐标(非maven项目则引入jar包)
3、创建user数据表
4、编写User实体类
5、编写映射文件UserMapper.xml
6、编写核心文件SqlMapConfig.xml
7、编写测试类
1、创建 maven 工程
2、添加 MyBatis 仓库坐标
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--mybatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql驱动坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <!--单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--日志坐标--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies>
3、创建user数据表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `birthday` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
4、编写User实体类
package com.panshenlian.pojo; /** * @Author: panshenlian * @Description: 用户实体 * @Date: Create in 2:08 2020/11/28 */ public class User { private int id; private String username; private String password; private String birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday='" + birthday + '\'' + '}'; } }
5、编写映射文件UserMapper.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"> <mapper namespace="userMapper"> <select id="findAll" resultType="com.panshenlian.pojo.User"> select * from User </select> </mapper>
6、编写核心文件SqlMapConfig.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.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="/UserMapper.xml" /> </mappers> </configuration>
7、编写测试类
package com.panshenlian.service; import com.panshenlian.pojo.User; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * @Author: panshenlian * @Description: 体验测试类 * @Date: Create in 2:21 2020/11/28 */ public class MybatisTest { @Test public void testQueryUser01() throws IOException { //加载核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行sql语句 List<User> userList = sqlSession.selectList("userMapper.findAll"); // 打印结果 for (User user : userList) { System.out.println(user); } // 释放资源 sqlSession.close(); } }
最终通过 Junit 单元测试,运行结果符合预期:
工程结构参考:
插入操作
Mybatis的插入数据操作,我们一共需要两步:
- 在映射文件UserMapper.xml中添加插入语句
<!-- 插入用户操作 --> <insert id="insertUser" parameterType="com.panshenlian.pojo.User" > insert into user(username,password,birthday) values ( #{username}, #{password},#{birthday}) </insert>
- 编写插入User实体对象的 Java 代码
@Test public void testInsertUser01() throws IOException { //加载核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); // 准备插入数据库的对象 User insertUser = new User(); insertUser.setBirthday("2020-12-01"); insertUser.setUsername("panpan"); insertUser.setPassword("888"); // 执行sql语句 int rows = sqlSession.insert("userMapper.insertUser",insertUser); // 打印结果 System.out.println(rows); // 提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }
注意:当 sqlSession 执行插入、更新、删除操作时,需要提交事务,如果 openSession() 的时候使用无参构造函数,那么需要手动调用 commit() 进行事务提交,对应的插入、更新、删除操作才最终执行成功,如果是使用 openSession(true) 来打开session ,那么则表示事务自动提交,无需手工再调用 commit() 。
插入操作时,在映射文件中我们没有配置 resultType参数,即返回结果类型我们没有配置,Mybatis 默认返回 int 类型,表示插入操作影响的记录数。
上例插入操作执行结果为:1 ,表示插入成功,影响记录数量为1条。
插入操作注意问题
1、插入语句使用 insert 标签
2、在映射文件中使用 parameterType 属性指定要插入的数据类型
3、Sql语句中使用#{实体属性名}方式引用实体中的属性值
4、插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
5、插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()
修改操作
Mybatis的修改数据操作,同插入操作,也是需要两步:
- 在映射文件UserMapper.xml中添加修改语句
<!-- 修改用户操作 --> <insert id="updateUser" parameterType="com.panshenlian.pojo.User" > update user set username =#{username} where id = #{id} </insert>
- 编写修改User实体对象的 Java 代码
@Test public void testUpdateUser01() throws IOException { //加载核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); User updateUser = new User(); updateUser.setUsername("新的用户名PanPan"); updateUser.setId(1); // 执行sql语句 int rows = sqlSession.update("userMapper.updateUser",updateUser); // 打印结果 System.out.println(rows); // 提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }
执行结果如下,成功修改 id =1 的数据记录,新用户名为 新的用户名PanPan
修改操作注意问题
1、修改语句使用update标签
2、修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);
删除操作
Mybatis的删除数据操作,同以上插入与修改操作,也是需要两步:
- 在映射文件UserMapper.xml中添加删除语句
<!-- 删除用户操作 --> <insert id="deleteUser" parameterType="com.panshenlian.pojo.User" > delete from user where id=#{id} and username = #{username} </insert>
- 编写删除User实体对象的 Java 代码
@Test public void testDeleteUser01() throws IOException { //加载核心配置文件 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 获得sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获得sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); User deleteUser = new User(); deleteUser.setUsername("新的用户名PanPan"); deleteUser.setId(1); // 执行sql语句 int rows = sqlSession.delete("userMapper.deleteUser",deleteUser); // 打印结果 System.out.println(rows); // 提交事务 sqlSession.commit(); // 释放资源 sqlSession.close(); }
执行结果如下,成功删除 id =1 ,username=新的用户名PanPan的数据记录。
删除操作注意问题
1、删除语句使用 delete 标签
2、Sql语句中使用#{实体属性名}引用传递的对象属性
3、删除操作使用的API是sqlSession.delete(“命名空间.id”,Object);
删除操作也可以通过执行id的方式进行删除,例如在映射文件中把参数设置为parameterType=“java.lang.Integer”,实际 API 是sqlSession.delete(“命名空间.id”,1);
总结
我们通过本文介绍,基本掌握了 Mybatis 最基础的 CRUD 操作,后续,我们逐步深入。
本篇完,本系列下一篇我们讲《 Mybatis系列全解(四):XML配置文件与API介绍 》。
BIU ~ 文章持续更新,微信搜索「潘潘和他的朋友们」第一时间阅读,随时有惊喜。本文会在 GitHub https://github.com/JavaWorld 收录,热腾腾的技术、框架、面经、解决方案,我们都会以最美的姿势第一时间送达,欢迎 Star。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
漫画 | 前端上下500年发展史的江湖恩怨情仇~
时间总是过得很快, 似乎快得让人忘记了昨天,前端WEB领域的发展更是如此,转眼间已是近30年,时光荏苒,初心不变,在一代又一代前端人的努力下,前端已经是互联网不可或缺的一部分。 然而很多前端打工人对于前端的历史了解甚少,我是一名前端打工人,今天,本文将用漫画的形式带你倒回历史的长河,一起领略前端发展史的江湖风云纠纷、恩怨情仇… 篇后 JavaScript曾经被最认为是糟糕的语言,或者说大家当初并不认为它是一种语言,时至今日它却是最流行的语言:在GitHub 上有 60%+的开源项目都是与JavScript有关的. 而我(你)有幸成为前端人中的一员,也坚信前端未来的路会更加光明,前端的发展离不开每一位前端人的努力,仅以此篇致敬每一位优秀的前端开发者. 参考资料 前端开发 20 年变迁史 前端简史 浏览器大战 -维基百科 文中部分图片素材来源于网络,如有侵权,请联系删除 ~ 完 ~ 本文系 “ 前端布道师 ” 原创 转载请标明出处 撰稿:苏南 插画 / 排版:苏南 更多精彩,欢迎关注我们的《前端布道师》
- 下一篇
基于 Gitee + Jenkins 的开源项目自动化协作实战
摘要:在开源理念日渐活跃的今天,越来越多的人开始投身于开源,贡献了越来越多的开源项目。而随着时间的推移,更多的人开始为开源项目添砖加瓦,为某一领域的开源项目贡献出自己的力量。贡献者的增多又给开源作者带来不少审核的压力,实际上投身开源的这些开源作者基本都是业余时间来做,并没有太多的时间投入在开源项目上。本文就为了解决这类场景,介绍下如何在 Gitee 上通过 Jenkins 来为自己的开源项目开启自动化协作,旨在将一些开源相关的工作自动化,留出更多的时间投身开源事业。 Gitee & Jenkins 简介 码云 Gitee是开源中国(OSChina.net)于 2013 年推出的基于 Git 的代码托管和协作开发平台,提供代码托管服务,与开源中国社区资讯、博客、社区等版块相互补充和促进,希望以此更好地为开发者服务、构建更加完善的开源生态。经过超过七年的砥砺发展,已成为国内最大的代码托管平台。 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件,支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序运行。 开源...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题