MyBatis学习笔记2
CRUD
1.namespace
namespace中的包名要和mapper接口的包名一致!
2.select
选择查询语句
id:就是对应的namespace中的方法名;
resultType:Sql语句执行的返回值!
parameterType:参数类型
增删改必须提交事务:sqlSession.commit();
1.编写接口
List<User> getUserList();//根据id查询用户User getUserById(int id);//insert一个用户;int addUser(User user);//修改用户int updateUser(User user);//删除用户int deleteUser(int id);
2.编写对应的mapper中的Sql语句
<select id="getUserList" resultType="pojo.User">select * from mybatis.user</select><select id="getUserById" parameterType="int" resultType="pojo.User">select * from mybatis.user where id = #{id}</select><insert id="addUser" parameterType="pojo.User" >insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});</insert><update id="updateUser" parameterType="pojo.User">update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id};</update><delete id="deleteUser" parameterType="int">delete from mybatis.user where id= #{id};</delete>
3.测试
public void test(){//1.获得SqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();//2.执行Sql--方式一:getMapperUserMapper userDao = sqlSession.getMapper(UserMapper.class);List<User> userList = userDao.getUserList();for (User user : userList) {System.out.println(user);}//关闭SqlSessionsqlSession.close();}
public void getUserById(){SqlSession sqlSession1 = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession1.getMapper(UserMapper.class);User user = mapper.getUserById(1);System.out.println(user);sqlSession1.close();}
3.Insert
public void addUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.addUser(new User(5,"jim","123123"));//提交事务sqlSession.commit();sqlSession.close();}
4.Update
public void updateUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.updateUser(new User(5,"jack2","123456"));sqlSession.commit();sqlSession.close();}
5.Delete
public void deleteUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);mapper.deleteUser(5);sqlSession.commit();sqlSession.close();}
万能的Map
假设我们的实体类或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
int addUser2(Map<String,Object>map);
<insert id="addUser2" parameterType="map" >insert into mybatis.user (id,name,pwd) values (#{userid},#{username},#{userpwd});</insert>
public void addUser2(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("userid",5);map.put("username","jack3");map.put("userpwd","123123");mapper.addUser2(map);sqlSession.commit();sqlSession.close();}
模糊查询
1.在Java代码执行的时候,传递通配符%%
List<User> userList = userDao.getUserList2("%李%");
select * from mybatis.user where name like #{values};
2.在sql拼接中使用通配符
select * from mybatis.user where name like "%"#{values}"%";
List<User> userList = userDao.getUserList2("李");
配置解析
mybatis-config.xml
mybatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
可以直接引入外部文件
可以在其中增加一些属性配置
如果两个文件有同一个字段,优先使用外部配置文件的!
类型别名(typeAliases)
<!--可以给实体类起别名--><typeAliases><typeAlias type="pojo.User" alias="user"/></typeAliases>
扫描实体类的包,它的默认别名就是这个类的类名,首字母小写
<typeAliases><package name="pojo"/>
</typeAliases>
实体类比较少的时候,使用第一种
实体类多的时候,使用第二种
第一种可以DIY别名,第二种不可以(可以使用注解@alias)
映射器
<mappers><mapper resource="dao/UserMapper.xml"/></mappers>
作用域和生命周期
SqlSessionFactoryBuilder:一旦创建SqlSession就不在需要,一般设置为局部变量
SqlSessionFactory:可以理解为数据库连接池,一旦被创建就一直存在
SqlSession:可以理解为连接池中的请求,实例是不安全的线程,不能被共享,使用完毕就关闭。
属性名和字段名不一致问题
解决办法:起别名
<select id="getUserById" parameterType="int" resultType="user">select id,name, pwd as password from mybatis.user where id =#{id}</select>
resultMap结果集映射
<resultMap id="UserMap" type="user"><result column="id" property="id"/><result column="name" property="name"/><result column="pwd" property="password"/></resultMap>
<select id="getUserById" resultMap="UserMap">select * from mybatis.user where id = #{id}</select>
相关文章:
MyBatis学习笔记2
CRUD 1.namespace namespace中的包名要和mapper接口的包名一致! 2.select 选择查询语句 id:就是对应的namespace中的方法名; resultType:Sql语句执行的返回值! parameterType:参数类型 增删改必须提交事务&…...
spring总结
目录 什么是Spring? Spring的优缺点? 优点: 缺点: Spring IOC的理解 Spring AOP的理解 事务的边界为什么放在service层? Spring Bean的生命周期 什么是单例池?作用是什么? 单例Bean的优势 Bean…...
记录--说一说css的font-size: 0
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 平常我们说的font-size:0;就是设置字体大小为0对吧,但是它的用处不仅仅如此哦,它还可以消除子行内元素间额外多余的空白! 问题描述ÿ…...
Matlab实现支持向量机算法(附上多个完整仿真源码)
支持向量机是一种常见的机器学习算法,它可以用于分类和回归问题。在Matlab中使用支持向量机,可以方便地构建和训练模型,并进行预测和评估。本文将介绍Matlab支持向量机的基本原理以及一个简单的分类案例。 文章目录 1. 支持向量机的基本原理2…...
AIGC大模型ChatGLM2-6B:国产版chatgpt本地部署及体验
1 ChatGLM2-6B介绍 ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练,它具备多领域知识、代码能力、常识推理及运用能力;支持与用户通过自然语言对话进行交互,处理多种自然语言任务…...
[国产MCU]-BL602开发实例-开发环境搭建
开发环境搭建 文章目录 开发环境搭建1、BL602介绍2、软件准备3、源码编译3.1 编译内置工程3.2 自定义工程、自定义组件添加与编译4、固件下载BL602 是一款Wi-Fi + BLE组合的芯片组,用于低功耗和高性能应用开发。无线子系统包含2.4G无线电,Wi-Fi 802.11b/g/n和BLE 5.0 基带/MA…...
春秋云镜 CVE-2020-26048
春秋云镜 CVE-2020-26048 CuppaCMS 任意文件上传 靶标介绍 CuppaCMS是一套内容管理系统(CMS)。 CuppaCMS 2019-11-12之前版本存在安全漏洞,攻击者可利用该漏洞在图像扩展内上传恶意文件,通过使用文件管理器提供的重命名函数的自…...
使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用
在诸如广告、推荐等系统中,我们往往会涉及过滤、召回和排序等过程。随着系统业务变得复杂,代码的耦合和交错会让项目跌入难以维护的深渊。于是模块化设计是复杂系统的必备基础。这篇文章介绍的业务框架脱胎于线上多人协作开发、高并发的竞价广告系统&…...
一个.NET开发的Web版Redis管理工具
今天给大家推荐一款web 版的Redis可视化工具WebRedisManager,即可以作为单机的web 版的Redis可视化工具来使用,也可以挂在服务器上多人管理使用的web 版的Redis可视化工具。 WebRedisManager基于SAEA.Socket通信框架中的SAEA.RedisSocket、SAEA.WebApi两…...
javaAPI(四):jdk8中的日期时间API
新日期时间API出现的背景 jdk8之前时间日期API 如果我们可以跟别人说:“我们在1502653933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。jdk 1.0中包含了一个java.util.Date类&am…...
解决在mybatis中出现的org.apache.ibatis.exceptions.PersistenceException~
我在使用mybatis中的注解对数据库中的信息进行操作时,出现了下述错误 我在mapper接口中定义了该方法,并且使用注解绑定了对应的SQL语句 //增加用户信息 Insert("insert into user values(#{id},#{name},#{password})") int addUser(user user…...
Vue + ElementUI 实现可编辑表格及校验
效果 完整代码见文末 实现思路 使用两个表单分别用于实现修改和新增处理。 通过一个editIndex变量判断是否是编辑状态来决定是否展示输入框,当点击指定行的修改后进行设置即可: <el-table-columnv-for"(column, index) in columns":key&qu…...
中介者模式——协调多个对象之间的交互
1、简介 1.1、概述 如果在一个系统中对象之间的联系呈现为网状结构,如下图所示: 对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对…...
启动Flink显示初始化状态怎么解决?
启动Flink显示初始化状态怎么解决? Flink On Yarn模式 问题 flnk任务在跑的过程中, 有时候任务停掉了 ,不过我有 定时任务,可以把失败的flink任务拉起来,但是因为最新的checkpoint做失败了,导致脚本无法拉…...
VB+SQL采购管理系统设计与实现
摘 要 本系统是基于为轴承企业采购部门开发的系统。课题主要采用自上而下的结构化程序设计方法与面向对象方法相结合的方法,致力于达到标准的现代化物流管理要求。帮助轴承企业采购部门全面实现电子化、自动化、标准化的现代化先进管理模式。 该系统使用Visualbasic.net编程…...
TBB库中实现协程(coroutine)的源码说明
源码请见: https://github.com/oneapi-src/oneTBB/blob/master/src/tbb/co_context.h 在windows系统,TBB(也就是intel 的 oneTBB库),通过windwos fiber(纤程)来实现协程(coroutine)。 创建一个协程,代码很简洁: inline void create_coroutine(corouti…...
【CSS弹性盒模型 display:flex;常用参数及常见的布局】
CSS弹性盒模型 display:flex;常用参数flex-directionjustify-contentalign-itemsflex-wrapflex-flowalign-contentorderflex-growflex-shrinkflex-basis 常见的布局1. 水平居中2. 垂直居中3. 水平垂直居中4. 等分布局5. 响应式布局6. 网格布局 常见的布局封装 display:flex;常用…...
golang函数传参——值传递理解
做了五年的go开发,却并没有什么成长,都停留在了业务层面了。一直以为golang中函数传参,如果传的是引用类型,则是以引用传递,造成这样的误解,实在也不能怪我。我们来看一个例子,众所周知…...
Liunx环境下git的详细使用(gitee版)
Liunx环境下git的详细使用(gitee版) 1.git是什么2.git操作2.1在gitee创建一个仓库2.2.gitignore2.3.git 3.git三板斧3.1add3.2 commit3.3push 4.git其他命令4.1查看当前仓库状态4.2查看提交日志4.3修改git里面文件名称4.4删除文件4.5修改远端仓库内容 1.…...
exoplayer的使用-2,与flutter相互通信
上一次解决的问题是ac3这些exoplayer本身不支持音频,添加了ffmpeg扩展实现软解码. 另一个问题是flutter端的内置字幕显示不了,也不打算再继续探讨了,换成native实现播放器.由于主项目是flutter的,所以涉及到了相互通信. 当前文章主要涉及到flutter与native相互通信功能 通信有…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
