(二) 使用Mybatis完成CRUD操作 - Titan的Mybatis系列学习笔记
Mybatis 学习笔记
Author: Titan
Start Date: 2020-05-04
Mybatis系列的学习笔记是为本人原创系列文章。
遵循 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
转载需注明来源 Titan笔记 https://www.titan6.cn/
使用Mybatis完成CRUD操作
1. 插入数据操作
我们先在DAO接口中新增一个saveUser的方法,传入的是一个User类对象。
// 保存一个新用户数据
void saveUser(User user);
如果要进行插入数据操作,需要在Mybatis的对应DAO配置文件中进行以下的配置
<insert id="saveUser" parameterType="cn.titan6.beans.User">
INSERT INTO user(username,address,sex,birthday)VALUES (#{username},#{address},#{sex},#{birthday});
</insert>
显然,insert标签的id对应的是DAO中的插入方法,parameterType 是要传入的实体类,这里即为User类。
在其中的SQL语句中,用#{keyName}的方式来对应实体类中的字段名,比如#{username} 对应的是 User中的username字段。
写一个Test方法来测试新增用户的插入数据操作(其中省略了session,userDao的初始化操作)
// 保存数据操作
@Test
public void addUser() {
User user = new User();
user.setUsername("NewTitan");
user.setAddress("河南省信阳市");
user.setSex("男");
user.setBirthday(new Date());
userDao.saveUser(user);
session.commit();
// 获取ID
System.out.println(user.getId());
}
我们新建了一个User对象并设置了其相关的信息,通过调用userDao的saveUser方法,成功将这个User的信息插入到数据库中了。
需要注意的是:需要除了查询操作以外,进行增删改操作的时候Mybatis默认是存在事务关系的,并且关闭了自动提交(auto commit),如果你没有加上 session.commit() 语句的话,你会发现这个插入操作并不会成功的执行,也就是没有提交到数据库中。
2. 更新数据的操作
如果我们想根据一个用户的id来更新其用户名,地址等信息,该如何操作呢?其实和插入数据异曲同工。
首先在UserDao的映射配置文件中加入更新数据操作的映射配置
<!-- 更新数据 -->
<update id="updateUser" parameterType="cn.titan6.beans.User">
UPDATE user SET username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} WHERE id=#{id};
</update>
对应地,UserDao接口中也要有updateUser这个方法
// 更新用户数据
void updateUser(User user);
这样我们就可以用一个Test类来测试一下更新数据的方式
// 更新数据操作
@Test
public void updateUser() {
User user = new User();
user.setId(49);
user.setUsername("TitanHW");
user.setAddress("河南省信阳市");
user.setSex("男");
user.setBirthday(new Date());
userDao.updateUser(user);
session.commit();
}
3. 删除数据的操作
首先在UserDao的映射配置文件中加入删除数据操作的映射配置
<delete id="deleteUser" parameterType="Integer">
DELETE FROM user WHERE id = #{id};
</delete>
这里我们通过 ID 来选择要进行删除的用户,parameterType可以填 Integer。
对应地,UserDao接口中也要有deleteUser这个方法
void deleteUser(Integer id);
然后在Test中调用即可
4. 根据条件查询数据
如果我们想根据一个用户的id来找到用户,或者通过用户名来模糊查询符合条件的用户,就应该这样:
在UserDao的映射配置文件的配置如下
<!-- 根据ID查询数据 -->
<select id="findById" parameterType="Integer" resultType="cn.titan6.beans.User">
SELECT * FROM user WHERE id = #{id};
</select>
<!-- 根据Username查询数据 -->
<select id="findByName" parameterType="String" resultType="cn.titan6.beans.User">
SELECT * FROM user WHERE username LIKE #{name};
</select>
UserDao接口:
// 根据 id 查询数据
User findById(Integer id);
// 根据Username查询数据
List<User> findByName(String username);
Test测试方法:
// 查询数据操作
@Test
public void findUser() {
User user = userDao.findById(49);
System.out.println(user.getUsername());
}
// 模糊查询操作
@Test
public void findUserByName() {
List<User> users = userDao.findByName("%Titan%");
for (User user : users) {
System.out.println(user.getUsername() + " ---- " + user.getAddress());
}
}
需要注意的是,在 findUserByName 的模糊查询方法中,我们需要传入一个%Titan%的LIKE字段,如果简单的传入Titan是无法模糊查询所有信息的。当然也可以在配置文件中进行处理,这里不具体介绍。
- Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
- hdu ---(4517)小小明系列故事——游戏的烦恼(Dp)
- HTTP加速器varnish安装小记(1)
- 手把手教你估算深度神经网络的最优学习率(附代码&教程)
- 批处理判断第一个硬盘的最后一个分区并进入
- MVCC原理探究及MySQL源码实现分析
- 关于热点数据导出与加载的影响,多的是你不知道的事
- 【Python】30行代码教你将微信变成智能回复机器人
- 【python爬虫】知乎互联网话题问答内容可视化分析
- “mysqlbinlog”工具做binlog server靠谱吗?
- 看各路神仙如何大战MySQL insecure warning报警有感
- 由optimizer_switch所引起的诡异问题
- 【Oracle 12c Flex Cluster专题 】— Leaf Node的故障迁移
- MySQL中的统计信息相关参数介绍
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 关于laravel框架中的常用目录路径函数
- Java byte数组操纵方式代码实例解析
- php桥接模式应用案例分析
- PHP设计模式之中介者模式(Mediator Pattern)入门与应用案例详解
- laravel 出现command not found问题的解决方案
- PHP怎么搭建百度Ueditor富文本编辑器
- 使用composer命令加载vendor中的第三方类库 的方法
- PHP批斗大会之缺失的异常详解
- Laravel 6.2 中添加了可调用容器对象的方法
- php实现微信企业转账功能
- 在 Laravel 6 中缓存数据库查询结果的方法
- PHP操作XML中XPath的应用示例
- Laravel手动返回错误码示例
- laravel添加前台跳转成功页面示例
- PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解