【Mybatis】02 快速入门Part2 补完CRUD
这是我们的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接口名称-->
<mapper namespace="cn.dai.mapper.UserMapper"> <!-- 我们的SQL语句使用这种标签来实现 -->
<!-- id 是我们的Mapper接口中的 方法名称 -->
<!-- resultType 表示查询的结果类型,因为是List 这里我们直接填写泛型的元素类型就好了 -->
<select id="getUserList" resultType="cn.dai.pojo.User">
/* 这里填写我们的SQL语句 */
SELECT * FROM `user`;
</select> </mapper>
mapper
映射配置文件的根标签,有且只能存在一个
namespace
是我们所绑定的Mapper接口类
select
表示SQL语句的标签,总共是CRUD4种SQL语句标签
即我们的:
SELECT
INSERT
UPDATE
DELETE
id
我们的对应的接口的方法名称
resultType
查询后的结果集类型,是List集合就是我们所泛型的类型
parameterType
参数类型,填写注入SQL的类型即可
DAO的编写流程 ×
Mapper的编写流程 √
1、编写接口
2、编写抽象SQL方法
3、编写接口映射配置文件
4、编写SQL标签
5、回到核心配置注册映射文件
补全我们的DAO接口,口胡是Mapper
public interface UserMapper {
List<User> getUserList();
User getUserById(int id);
int addUser(User user);
int updateUserById(User user);
int deleteUserById(int id);
}
补全映射配置
<?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接口名称-->
<mapper namespace="cn.dai.mapper.UserMapper"> <!-- 我们的SQL语句使用这种标签来实现 -->
<!-- id 是我们的Mapper接口中的 方法名称 -->
<!-- resultType 表示查询的结果类型,因为是List 这里我们直接填写泛型的元素类型就好了 -->
<select id="getUserList" resultType="cn.dai.pojo.User">
/* 这里填写我们的SQL语句 */
SELECT * FROM `user`;
</select> <!-- parameterType="int" 表示参数类型,也就是说我们只能配置1个参数-->
<select id="getUserById" resultType="cn.dai.pojo.User" parameterType="int">
/* #{user_id} 表示预编译SQL注入,普通SQL注入是 ${} 这个里面的user_id是实体类的,不是数据表的 */
SELECT * FROM `user` WHERE `user_id` = #{user_id};
</select> <!-- 增删改都不需要填写结果类型,因为只返回操作的结果记录数 -->
<insert id="addUser" parameterType="cn.dai.pojo.User" >
/* 这里我们设置的自增,所以主键可以不需要设置,注入实例时主键为null即可 */
INSERT
INTO `user`(user_name,user_password)
VALUES(#{user_name},#{user_password});
</insert> <!-- 修改语句-->
<update id="updateUserById" parameterType="cn.dai.pojo.User" >
UPDATE `user`
SET
user_name = #{user_name},
user_password = #{user_password})
WHERE
user_id = #{user_id};
</update> <!-- 删除语句-->
<delete id="deleteUserById" parameterType="int">
DELETE FROM `user`
WHERE user_id = #{user_id};
</delete>
</mapper>
开始测试【核心配置已经注册了】
发现异常问题

我在这里找了很久才发现,Mybatis会将注释中的注入表达式也会读取

我们将 $ 符号和{}区分开来再进行测试
结果还是报错

因为前面的注释的预编译SQL注入也会读取
这个东西也要区分开来

再次测试,访问成功

实际上是这样映射的

我们可以把映射配置的user_id改成id试试
这样还是能被读取到,也就是说基本类型,只要类型一致,
Mybatis如果匹配不了标识符,就会根据类型匹配
只要符合类型,依然能够查询出来,不过最好还是规范书写

剩余的增删改测试
增加 INSERT
如果实体类对应主键类型是基本类型,在注入实体类对象时,这个主键不可为null,必须赋值,
在我们的数据表的主键约束中设置了自增约束,这个情况就很尴尬了
所以为什么要设置实体类的主键类型为包装类了

可以看到我们的操作结果返回了1,说明操作是成功的
但是,查看数据库之后,并没有这个记录,
这是因为Mybatis的事务管理是默认开启的!!!

执行提交
sqlSession.commit();
再次查看结果,成功

如果要关闭事物可以在获取会话对象时,注入参数为true

修改
写错一个字符都有可能不通过

@Test
public void queryOne3(){
// 获取会话对象
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 获得映射实现实例
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用接口方法
int r = mapper.updateUserById(new User(17,"阿花","332211"));
System.out.println(r);
// 成功再提交,否则无意义
if ( r > 1) sqlSession.commit();
// 释放资源
sqlSession.close();
}
测试成功

删除
@Test
public void queryOne4(){
// 获取会话对象
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 获得映射实现实例
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用接口方法
int i = mapper.deleteUserById(17);
System.out.println(i);
if ( i > 1) sqlSession.commit();
// 释放资源
sqlSession.close();
}
测试成功

出现的错误总结:
1、SQL语句注释中的注入表达式也会被Mybatis读取,
所以要小心表达式字符
2、参数的标识设置尽可能的规范
演示的这段虽然没有出错,
是因为基本类型Mybatis可以识别匹配,但是要注意!!!
3、Mybatis的事务管理的默认开启的
除了查询,增删改在执行成功的情况下需要提交
4、SQL语句不要写错.
我也是没看仔细
5、注意主键映射的Java数据类型
如果没有在数据表设置自增约束,
Java的映射数据类型,可以基本int也可以包装类
如果是自增列,Java对象注入SQL时可以写null,
int类型也不是不能写,就是主键的编号会打乱【不推荐】
【Mybatis】02 快速入门Part2 补完CRUD的更多相关文章
- Mybatis Plus (特性、快速入门、日志、CRUD)
Mybatis plus 可以节省很多的工作,所有的CRUD JPA yk-mapper Mybatis plus 偷懒的 简介: MyBatis-Plus(opens new window)(简称 ...
- mybatis框架快速入门
通过快速入门示例,我们发现使用mybatis 是非常容易的一件事情,因为只需要编写 Dao 接口并且按照 mybatis要求编写两个配置文件,就可以实现功能.远比我们之前的jdbc方便多了.(我们使用 ...
- MyBatis(1)——快速入门
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- (转) MyBatis(1)——快速入门
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- SpringData JPA快速入门和基本的CRUD操作以及Specifications条件查询
SpringData JPA概述: SpringData JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 ...
- springboot笔记02——快速入门quickstart
前言 学习一个新的框架,往往会用一个quickstart快速入门,这次就写一下springboot的quickstart程序. 开发环境 JDK 1.8 Springboot 2.1.6 Maven ...
- Mysql快速入门(看完这篇能够满足80%的日常开发)
这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...
- mybatis的快速入门
说明: 在这个部分,会写个简单的入门案例. 然后,会重新写一个,更加严格的程序案例. 一:案例一 1.最终的目录结构 2.新建一个普通的Java项目,并新建lib 在项目名上右键,不是src. 3.导 ...
- spring3.0+mybatis+spring快速入门
一.首先奉上项目目录结构: 说明: dao,mapping,model包下的所有内容可以使用Generator工具自助生成. 具体用法,可以网上学习一下,比较简单,主要做以下工作: 1.提供相关的数据 ...
- MyBatis框架——快速入门
主流的ORM框架(帮助开发者实现数据持久化工作的框架): 1.MyBatis: 半自动化ORM框架,半自动:指框架只完成一部分功能,剩下的工作仍需开发者手动完成. MyBatis 框架没有实现 POJ ...
随机推荐
- Centos7安装Nginx教程,一步安装http和https
nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...
- The solution of P9194
10黑寄. problem & blog 考虑到处理加边并不简单,所以我们可以考虑一个黑点 \(p\),连边\((u,p)(p,v)\). 考虑在现在这棵树上连个点在原图中有变相连相当于有一个 ...
- 红米K70E支付宝无指纹支付选项的解决方法
红米K70E这台手机,支付宝里无指纹支付选项,百度了一下,也没结果.自己摸索了下,终于折腾出了指纹支付. 解决方法: 在手机-设置-指纹.面部与密码-指纹解锁-指纹支付-支付宝-更新证书. 杀掉支付宝 ...
- Linux常用耗资源命令汇总
在Linux中,以下命令可能在处理大量数据或复杂操作时比较消耗资源.一般来说,涉及大量数据处理.计算或者I/O操作的命令会比较耗费系统资源. 注意:所有命令资源消耗都是相对的,基于文件的处理量来展 ...
- firewall-cmd设置NAT转换
配置ipv4转发 修改servera配置文件/etc/sysctl.conf ,修改参数为1 net.ipv4.ip_forward = 1 配置生效: sysctl -p 修改网卡的zone [ro ...
- Kubernetes(K8s)最新版搭建
Kubernetes简单介绍 Kubernetes意为舵手,简称K8s. 前身是Google的Borg.所以一开源就吸引了一大批注意力. 因为谷歌,所以墙.在国内搭建K8s非常头疼. 下面我就来介绍一 ...
- ubuntu 18.0.4.6部署k8s 1.24
一.系统安装 https://ubuntu.com/download/server 二.安装containerd sudo su - apt-get remove docker \ docker-cl ...
- Android Framework:如何让 App 拿到Power key 值
Android app:如何让 App 拿到Power key 值 原文(有删改):https://blog.csdn.net/qq_37858386/article/details/10383566 ...
- 基于 SQLite 3 的 C 学习:2-高级操作
基于 SQLite 3 的 C/C++ 学习:2-高级操作与有关函数 背景 基于 SQLite 3 的 C/C++ 学习:开发流程 与 基本函数 中,我们简单介绍了有关 SQLite3 函数的使用. ...
- 【Autoware】Autoware安装教程
此篇主要是从自己的csdn copy 在博客园上备份一下哈~ 前提:大家需要换源[软件源和pip源]:git clone的时候走博主给的Gitee的链接吧 不然得等个十万年... 如果想看最终是啥样的 ...