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相互通信功能 通信有…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...