欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > MyBatis实战笔记

MyBatis实战笔记

2025/4/3 4:33:29 来源:https://blog.csdn.net/2301_76371717/article/details/146587516  浏览:    关键词:MyBatis实战笔记

一、前言知识介绍

 1.ORM框架

对数据库的表和POJO(Plain Ordinary Java Object)Java对象的做映射的框架。常见的有hibernate (ssh)、JPA - Spring Data JPA、mybatis。

2.MyBatis的优点

  • 支持自定义 SQL、存储过程以及高级映射
  • 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • 通过简单的 XML 或注解来配置和映射 Java对象 到 数据库中的记录
  • 官方学习地址:https://mybatis.org/mybatis-3/

3.底层原理 

  • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心
  • SqlSessionFactory 的实例通过 SqlSessionFactoryBuilder 获得
  • SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
  • 工厂设计模式里面 需要获取SqlSession ,里面提供了在数据库执行 SQL 命令所需的所有方法

二、项目环境搭建

1.创建maven项目

2.相关配置逻辑

具体项目结构

  • 在pom.xml中添加相关依赖
<dependencies><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><!-- 使用JDBC链接mysql的驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency></dependencies>
  • 创建mybatis配置文件:config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置数据连接的环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/xdclass?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/><property name="username" value="root"/><property name="password" value="xdclass.net"/></dataSource></environment></environments>
<!--配置mapper映射文件:VideoMapper.xml--><mappers><mapper resource="mapper/VideoMapper.xml"/></mappers>
</configuration>
  • 实现驼峰映射:在该文件中添加映射配置
<!--下划线自动映射驼峰字段,加在文件顶部,即configuration的第一个配置--><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
  • 存放sql文件,实现增删改查业务:VideoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--
namespace: 名称空间,一般需要保持全局唯一, 最好是和dao层的java接口一致,
可以映射 sql语句 到对应的方法名称和参数、返回类型mybatis是使用接口动态代理-->
<mapper namespace="net.xdclass.online_class.dao.VideoMapper"><!--statement sqlid: 当前mapper下需要唯一resultType : sql查询结果集的封装--><select id="selectById" resultType="net.xdclass.online_class.domain.Video">select * from video where id = #{video_id}</select></mapper>
  • 常用配置可去官方文档:https://mybatis.org/mybatis-3/zh/configuration.html#

parameterType用来指定传入参数的类型,包括基本数据类型和引用数据类型,但最主要的配置是Java自定义对象;

ResultType用来指定返回参数的类型,与传入参数的类型相同。

可以通过在config中配置文件中配置typeAlias实现给类取别名,以简化Java自定义对象的配置。

<!-- 配置别名 --><typeAliases><package name="net.xdclass.online_class.domain"/></typeAliases>

xml文件简化配置

<select id="selectById" resultType="Video">select * from video where id = #{video_id}</select>

 jdbcType可实现将java类型映射为数据库类型(当字段可为NULL时,才需要指定),指定的是需要映射的数据库类型,注意是指定传入参数的数据类型。

<!--左边字段对应数据库,右边字段对应实体类  -->settitle = #{title,jdbcType=VARCHAR},summary = #{summary,jdbcType=VARCHAR},
 

 三、具体业务逻辑实现

 1.项目结构 

常见的src目录结构

controller 存放控制器;service 存放业务接口;impl 存放业务接口或数据访问接口实现类;

dao 存放数据访问接口;domain 存放实体类;util 存放工具类;config 存放配置

  • 创建实体类:Video
package net.xdclass.online_class.domain;import java.util.Date;/***  视频类*/
public class Video {/*** 主键*/private int id;/*** 视频标题*/private String title;/*** 视频详情*/private String summary;/***视频封面图*/private String coverImg;/*** 价格*/private int price;/*** 创建时间*/private Date createTime;/*** 评分*/private double point;public String getSummary() {return summary;}public void setSummary(String summary) {this.summary = summary;}public String getCoverImg() {return coverImg;}public void setCoverImg(String coverImg) {this.coverImg = coverImg;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public double getPoint() {return point;}public void setPoint(double point) {this.point = point;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@Overridepublic String toString() {return "Video{" +"id=" + id +", title='" + title + '\'' +", summary='" + summary + '\'' +", coverImg='" + coverImg + '\'' +", price=" + price +", createTime=" + createTime +", point=" + point +'}';}
}
  • 创建数据访问接口:VideoMapper 
package net.xdclass.online_class.dao;import net.xdclass.online_class.domain.Video;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface VideoMapper {/*** 根据视频id查找视频对象* @param videoId* @return*///@Param注解的作用是给参数取别名,在xml中可以直接使用别名来引用该参数Video selectById(@Param("video_id") int videoId);/*** 查询全部视频列表* @return*/List<Video> selectListByXML();/*** 查询全部视频列表* @return*/@Select("select * from video")List<Video> selectList();}
  • 创建启动类:SqlSessionDemo

2.实现逻辑

sql映射方法有两种,一种是通过编写.xml配置文件来存放sql的查询语句;一种是在dao层接口中,通过注解来直接映射

package net.xdclass.online_class;import net.xdclass.online_class.dao.VideoMapper;
import net.xdclass.online_class.domain.Video;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class SqlSessionDemo {public static void main(String [] args) throws IOException {//配置文件路径String resouce = "config/mybatis-config.xml";//读取配置文件InputStream inputStream =  Resources.getResourceAsStream(resouce);//构建Session工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取Sessiontry(SqlSession sqlSession = sqlSessionFactory.openSession(true)){//获取Mapper接口的实现类对象VideoMapper videoMapper = sqlSession.getMapper(VideoMapper.class);//调用方法Video video = videoMapper.selectById(42);//通过xml配置文件来实现映射System.out.println(video.toString());//通过注解实现映射List<Video> videoList =  videoMapper.selectList();//            List<Video> videoList = videoMapper.selectListByXML();System.out.println(videoList.toString());}}}

程序执行过程1,通过xml文件来实现映射:首先执行启动类SqlSessionDemo-------->通过session获得mapper接口对象------->调用dao层中mapper接口中的方法selectById------->将传入的id映射到VideoMapper.xml中执行sql语句--------->将结果通过resultType映射成Video实体类型------->打印输出。

程序执行过程2,通过注解来实现映射:首先执行启动类SqlSessionDemo-------->通过session获得mapper接口对象------->调用dao层中mapper接口中的方法selectList------->通过注解实现映射( @Select("select * from video"))------->打印输出。(适用于sql简单,没有过多的表关联)

3.配置打印sql功能

 在pom.xml中配置

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version>
</dependency>

 配置日志输出文件:在resources目录下创建log4j.properties文件

log4j.rootLogger=ERROR, stdout
log4j.logger.net.xdclass=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.实现多条件查询

在VideoMapper.xml文件中配置sql查询语句

<select id="selectByPointAndTitleLike" resultType="net.xdclass.online_class.domain.Video">select * from video where point=#{point} and title like concat('%', #{title},'%')</select>

 在dao层的VideoMapper接口中添加查询方法

 //多参数查询:由评分与标题模糊查询List<Video> selectByPointAndTitleLike(@Param("point") double point,@Param("title") String title);

@Param("指定参数名") 用来为指定的参数起别名。

在启动类SqlSession中调用并打印

//多参数查询
List<Video> videoList1 = videoMapper.selectByPointAndTitleLike(8.7,"HTML");System.out.println(videoList1.toString());

 5.实现新增记录

在VideoMapper.xml中添加sql语句

<!--jdbcType用来防止当参数无取值时,将java类型映射成数据库类型--><insert id="add" parameterType="net.xdclass.online_class.domain.Video">INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`, `create_time`, `point`)VALUES(#{title,jdbcType=VARCHAR},#{summary,jdbcType=VARCHAR},#{coverImg,jdbcType=VARCHAR},#{price,jdbcType=INTEGER},#{createTime,jdbcType=TIMESTAMP},#{point,jdbcType=DOUBLE});</insert>

在 VideoMapper接口中添加方法

  /*** 新增一条视频记录* @param video* @return*/int add(Video video);

在启动类中调用执行

            //新增一条视频记录Video video1 = new Video();video1.setTitle("java核心技术");video1.setSummary("java核心技术视频");video1.setCoverImg("www.xdclass.net/cover.jpg");video1.setPrice(100);video1.setPoint(8.8);System.out.println(videoMapper.add(video1));System.out.println(video1.toString());//新增成功后会返回主键id

6.批量插入多条记录

通过foreach循环语句来实现

在VideoMapper.xml中添加sql语句

<!--批量插入--><insert id="addBatch" parameterType="net.xdclass.online_class.domain.Video" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`, `create_time`, `point`)VALUES<foreach collection="list" item="video" separator=",">(#{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},#{video.coverImg,jdbcType=VARCHAR},#{video.price,jdbcType=INTEGER},#{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE})</foreach></insert>

在 VideoMapper接口中添加方法

 /*** 增加视频信息* @param list* @return* /int addBatch(List<Video> video);

在启动类中调用批量新增的方法

            //批量新增Video video2 = new Video();video2.setTitle("python核心技术");video2.setSummary("python核心技术视频");video2.setCoverImg("www.xdclass.net/python.jpg");video2.setPrice(9900);video2.setPoint(9.0);Video video3 = new Video();video3.setTitle("c++核心技术");video3.setSummary("c++核心技术视频");video3.setCoverImg("www.xdclass.net/c++.jpg");video3.setPrice(8800);video3.setPoint(8.5);List<Video> videoList2 = new ArrayList<>();//存放要新增的视频对象videoList2.add(video2);//将视频对象添加到列表中videoList2.add(video3);System.out.println(videoMapper.addBatch(videoList2));//调用方法实现批量新增System.out.println(videoList2.toString());

7.更新语法

建数据库表的语句

CREATE TABLE `video` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(524) DEFAULT NULL COMMENT '视频标题',`summary` varchar(1026) DEFAULT NULL COMMENT '概述',`cover_img` varchar(524) DEFAULT NULL COMMENT '封面图',`price` int(11) DEFAULT NULL COMMENT '价格,分',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`point` double(11,2) DEFAULT '8.70' COMMENT '默认8.7,最高10分',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `video` (`id`, `title`, `summary`, `cover_img`, `price`, `create_time`, `point`)
VALUES(30,'互联网架构之JAVA虚拟机JVM零基础到高级实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-mawen.png',3980,'2021-06-24 22:14:00',9.10),(31,'权限框架Shiro+SpringBoot2.x零基础到高级实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Shiro/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Shiro/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-shiro.png',2980,'2021-06-24 22:14:00',8.90),(32,'新版Maven3.5+Nexus私服搭建全套核心技术','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-mawen.png',1980,'2021-03-04 22:14:00',8.90),(33,'JavaScript核心基础到进阶之路','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/javascript/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/javascript/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-JavaScript.png',2980,'2021-03-04 22:14:00',8.80),(34,'HTML5+CSS3前端开发教程flex布局项目实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/HTML5%2BCSS3/%E8%AF%A6%E6%83%85%E5%9B%BE.jpeg','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/HTML5%2BCSS3/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-HTML5%2BCSS3-flex.png',3980,'2021-07-04 22:14:00',8.80),(35,'HTML5+CSS3电商项目综合实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Html5%2Bcss3%2Bjs%E7%94%B5%E5%95%86%E7%BB%BC%E5%90%88%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Html5%2Bcss3%2Bjs%E7%94%B5%E5%95%86%E7%BB%BC%E5%90%88%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-HTML5%2BCSS3.png',3980,'2021-08-04 22:14:00',8.70),(36,'20年录制ES6教程ES7ES8实战应用','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/ES6/%E8%AF%A6%E6%83%85%E5%9B%BE.jpeg','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/ES6/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-es6.png',3980,'2021-08-04 22:14:00',8.70),(37,'20年微服务Dubbo+SpringBoot2.X优惠券项目实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Springboot%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%BC%98%E6%83%A0%E5%88%B8%E7%B3%BB%E7%BB%9F%E5%AE%9E%E6%88%98/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Springboot%E5%BE%AE%E6%9C%8D%E5%8A%A1%E4%BC%98%E6%83%A0%E5%88%B8%E7%B3%BB%E7%BB%9F%E5%AE%9E%E6%88%98/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-Springboot.png',14880,'2021-08-07 22:14:00',9.10),(38,'20年Linux/Centos7视频教程零基础入门到高实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Linux/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/Linux/gw-linux.png',3980,'2021-08-17 22:14:00',9.10),(39,'20年全新React零基础到单页面项目实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/React/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/React/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-react.png',6980,'2021-08-17 22:14:00',9.10),(40,'全新微信小程序零基础到项目实战','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-%E5%B0%8F%E7%A8%8B%E5%BA%8F.png',5980,'2021-01-18 22:14:00',9.10),(41,'玩转搜索框架ElasticSearch7.x实战','https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/video/2019_backend/elasticsearch7_detail.jpeg','https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/video/2019_backend/elasticsearch7.png',4880,'2021-01-10 22:14:00',8.70),(42,'全新elementUI项目实战教程Vue整合Echarts后台权限','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Element/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/Element/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-elemenui.png',5980,'2021-01-10 22:14:00',8.70),(43,'20年Python3.7零基础入门到爬虫实战','https://file.xdclass.net/video/2020/Python/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/Python/gw-python.png',3980,'2021-01-10 22:14:00',8.90),(44,'2020版全新JDK8~JDK13全套新特性教程','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/JDK8/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/JDK8/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-JDK.png',3980,'2021-01-10 22:14:00',9.30),(45,'Docker实战视频教程入门到高级dockerfile/compose-Harbor','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Docker/%E8%AF%A6%E6%83%85%E5%9B%BE.jpeg','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Docker/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-docker.png',5980,'2021-01-10 22:14:00',9.30),(46,'新版javase零基础到高级教程小白自学编程','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E6%96%B0%E7%89%88javase/%E8%AF%A6%E6%83%85%E5%9B%BE.png','https://file.xdclass.net/video/2020/%E6%96%B0%E7%89%88javase/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-javase.png',3980,'2021-01-24 22:14:00',8.80),(47,'Nodejs教程零基础入门到项目实战前端视频教程','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/node/%E5%AE%98%E7%BD%91%E8%AF%A6%E6%83%85%E5%9B%BE-node.png','https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/node/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-node.png',6980,'2021-01-24 22:14:00',8.90);

在VideoMapper.xml中添加sql语句

<update id="updateVideo" parameterType="net.xdclass.online_class.domain.Video">UPDATE video<!--左边字段对应数据库,右边字段对应实体类  -->settitle = #{title,jdbcType=VARCHAR},summary = #{summary,jdbcType=VARCHAR},cover_img = #{coverImg,jdbcType=VARCHAR},price = #{price,jdbcType=INTEGER},id = #{id,jdbcType=INTEGER},point = #{point,jdbcType=INTEGER},create_time = now()WHEREid = #{id}</update>

在 VideoMapper接口中添加方法 

    //更新int updateVideo(Video video);

 在启动类中调用批量新增的方法

           //更新video3.setId(42);video3.setTitle("C++核心技术11111");videoMapper.updateVideo(video3);System.out.println(video3.toString());

8.动态更新

if else标签实现:在test中编写查询条件(填写java类型),标签中填写要执行的操作

通过trim标签来规范sql语句:prefix来指定语句前缀头,suffixOverrides来指定语句覆盖后缀尾。

  •  在.xml文件中编写sql语句

id指定Mapper接口中的方法名,parameterType指定返回的类型

<update id="updateVideoSelective" parameterType="net.xdclass.online_class.domain.Video">update video<trim prefix="set" suffixOverrides=","><if test="title != null "> title = #{title,jdbcType=VARCHAR},</if><if test="summary != null "> summary = #{summary,jdbcType=VARCHAR},</if><if test="coverImg != null "> cover_img = #{coverImg,jdbcType=VARCHAR},</if><if test="price != 0 "> price = #{price,jdbcType=INTEGER},</if><if test="createTime !=null "> create_time = #{createTime,jdbcType=TIMESTAMP},</if><!-- 特别注意: 一定要看pojo类里面的是基本数据类型,还是包装数据类型--><if test="point != null "> point = #{point,jdbcType=DOUBLE},</if></trim>whereid = #{id}</update>

 Mapper接口

    //选择性更新int updateVideoSelective(Video video);

启动类

            //调用方法Video video = videoMapper.selectById(42);//通过xml配置文件来实现映射System.out.println(video.toString());//更新video.setTitle("22222222222222222222");System.out.println(videoMapper.updateVideoSelective(video));

 9.删除语句

删除某个时间段之后 且金额大于 10元的数据

通过转义字符来避免sql的语法符号和xml里面的冲突,<![CDATA[ 要转义的符号 ]]>

  • xml文件
<delete id="deleteByCreateTimeAndPrice" parameterType="java.util.Map">delete from video where create_time <![CDATA[ > ]]> #{createTime} and price <![CDATA[ >= ]]> #{price}</delete>
  • Mapper接口
    //根据价格和时间删除int deleteByCreateTimeAndPrice(Map<String,Object> map);
  • 启动类
            //编写删除标准:根据价格和时间删除Map<String,Object> map=new HashMap<>();map.put("price",100);map.put("createTime","2021-08-01 00:00:00");System.out.println(videoMapper.deleteByCreateTimeAndPrice(map));System.out.println(videoList.toString());


 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词