MyBatis的增删改查

news/2025/1/17 3:40:14/

2023.10.29

        本章学习MyBatis的基本crud操作。

insert

java程序如下:

①使用map集合传参

@Testpublic void testInsertCar(){SqlSession sqlSession = SqlSessionUtil.openSession();//先将数据放到Map集合中,在sql语句中使用 #{map集合的key} 来完成传值,#{} 等同于JDBC中的 ? ,#{}就是占位符Map<String,Object> map = new HashMap<>();map.put("carNum", "1029");map.put("brand", "马自达");map.put("guidePrice", 50.3);map.put("produceTime", "2023-10-29");map.put("carType", "燃油车");// 执行SQL语句(使用map集合给sql语句传递数据)int count = sqlSession.insert("insertCar", map);System.out.println("插入了几条记录:" + count);sqlSession.commit();sqlSession.close();}

②使用pojo传参

@Testpublic void testInsertCarByPOJO(){SqlSession sqlSession = SqlSessionUtil.openSession();Car car = new Car(null,"1029","马自达",50.3,"2023-10-29","燃油车");int count = sqlSession.insert("insertCar",car);System.out.println(count);sqlSession.commit();sqlSession.close();}

SQL语句如下:

<insert id="insertCar">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values (null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType});
</insert>

 运行结果:

ps:如果采用map集合传参,#{} 里写的是map集合的key,如果key不存在不会报错,数据库表中会插入NULL。

ps:如果采用POJO传参,#{} 里写的是POJO类中get方法的方法名去掉get之后将剩下的单词首字母变小写(例如:getAge对应的是#{age},getUserName对应的是#{userName}),如果这样的get方法不存在会报错。

delete

需求:根据car_num进行删除。

java程序如下:

@Testpublic void testDeleteById(){SqlSession sqlSession = SqlSessionUtil.openSession();int count = sqlSession.delete("deleteById",2);sqlSession.commit();sqlSession.close();}

sql语句如下:

    <delete id="deleteById">delete from t_car where id = #{id}</delete>

运行结果:

 

 ps:当占位符只有一个的时候,${} 里面的内容可以随便写。

update

java代码如下:

    @Testpublic void testUpdateById(){SqlSession sqlSession = SqlSessionUtil.openSession();Car car = new Car(21L,"1029","宝马7系",66.6,"1999-11-23","燃油车");int count = sqlSession.update("updateById",car);System.out.println(count);sqlSession.commit();sqlSession.close();}

sql语句如下:

    <update id="updateById">update t_car setcar_num = #{carNum}, brand = #{brand},guide_price = #{guidePrice}, produce_time = #{produceTime},car_type = #{carType}where id = #{id}</update>

运行结果:

select 

查询一条数据:

需求:查询id为21的Car信息

java代码如下:

    @Testpublic void testSelectCarById(){// 获取SqlSession对象SqlSession sqlSession = SqlSessionUtil.openSession();// 执行SQL语句Object car = sqlSession.selectOne("selectCarById", 21);System.out.println(car);}

sql语句如下:

    <select id="selectCarById" resultType="pojo.Car">selectid, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carTypefromt_carwhereid = #{id}</select>

运行结果:

ps:当查询结果的字段名和java类的属性名对应不上的话,可以采用as关键字起别名 。

查询多条数据:

java代码如下:

    @Testpublic void testSelectCarAll(){// 获取SqlSession对象SqlSession sqlSession = SqlSessionUtil.openSession();// 执行SQL语句List<Object> cars = sqlSession.selectList("selectCarAll");// 输出结果cars.forEach(car -> System.out.println(car));}

sql语句如下:

    <!--虽然结果是List集合,但是resultType属性需要指定的是List集合中元素的类型。--><select id="selectCarAll" resultType="pojo.Car"><!--记得使用as起别名,让查询结果的字段名和java类的属性名对应上。-->selectid, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carTypefromt_car</select>

由于我数据库只有一条记录,先手动添加几条记录:

运行查询语句,结果为:

 

ps:在SQL Mapper配置文件中<mapper>标签的namespace属性可以翻译为命名空间,这个命名空间主要是为了防止sqlId冲突的。


http://www.ppmy.cn/news/1187083.html

相关文章

资深8年测试总结,接口测试常用测试点汇总(精辟详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口测试是测试系…

11、插件注入到vue实例中

新建插件 nuxt-demo2\plugins\vue-inject.js import Vue from "vue"Vue.prototype.$test function (str) {console.log(str) }配置插件 nuxt-demo2\nuxt.config.js export default {...// Plugins to run before rendering page: https://go.nuxtjs.dev/config-…

Linux 虚拟内存参数配置

一、问题出发点 Jun 1 10:30:21 audit1 kernel: swapper: page allocation failure. order:1, mode:0x20 Jun 1 10:30:21 audit1 kernel: Pid: 0, comm: swapper Tainted: G --------------- T 2.6.32-431.20.3.el6.x86_64 #1 Jun 1 10:30:21 audit1 kernel: Call Trace: Jun …

20年残疾人经历的软件工程硕士恢复健全后开始在互联网领域创业

可能很多朋友都认识我了&#xff0c;在我 5 岁的时候&#xff0c;出了一场意外&#xff0c;当时由于家庭经济不允许还有医疗条件不允许等一些原因&#xff0c;左腿落下来残疾。 今年年后&#xff0c;在山东一家医院做了腿部手术&#xff0c;恢复了健全。 在这 20 多年的残疾人…

随机链表的复制(C++解法)

题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节…

数字经济之于城市碳排放:“加速器”抑或“减速带”?

数据简介&#xff1a;数字经济是我国经济高质量发展的核心驱动力&#xff0c;在提升碳福利绩效过程中发挥重要作用&#xff0c;其在许多方面都能提供减少碳排放的机会。通过数字化和物联网技术&#xff0c;能源系统、交通运输、城市规划等领域可以实现智能化管理和优化&#xf…

使用requests库进行HTTP爬虫编程

目录 一、安装requests库 二、发送HTTP请求 三、解析HTML页面 四、处理HTTP响应和异常 五、使用代理和会话管理 六、使用多线程或多进程提高效率 七、数据存储和处理 八、注意事项和总结 在当今的数字化世界中&#xff0c;数据已经成为了一种宝贵的资源。而网络爬虫程序…

JVM基础:字节码文件详解①

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Java虚拟机的组成二、字节码文件的组成2.1 为什么要了解字节码文件&#xff1f;2.2 如何“窥探”字节码文件的奥秘&#xff1f;2.2.1 使用工具打开字节码文件2.…