mybatis增删改查代码案例

简介: 本文详解MyBatis中增删改查操作的实现,涵盖SQL配置、参数与返回类型处理、单多条数据删除、组合查询等核心用法,结合代码示例,助你掌握DAO层开发要点。已收录于GitHub开源项目,欢迎关注!

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

0 前言

使用mybatis,本身不需要再写dao的实现类,此处为了保持三层架构的完整性,遂添加了接口dao的实现类。

1 增加

sql

有默认返回类型,一般是int,表示影响行数

<!-- 新增班级 -->
<insert id="addClass" parameterType="Clazz">
  <!-- 使用序列 -->
  <selectKey keyProperty="cid" order="BEFORE" resultType="int">
    select seq_class1.nextval from dual
  </selectKey>
  insert into class1 values(#{cid},#{cname})
</insert>

方法

/**
 * 新增班级,此处返回值类型int/void 都可以
 */
public int addClass(Clazz clazz) {
  SqlSession session = super.getSqlSession();
  return session.insert("com.dao.IClassDao.addClass",clazz);
}

2 修改

进行修改,需分两步进行。

2.1 步骤一:根据要修改实体的id,将该实体所有信息从数据库中查询出来

sql

需指定返回值类型

<!-- 根据id获取班级信息 -->
<select id="getClassById" parameterType="int" resultType="Clazz">
  select * from class1 where cId=#{cid}
</select>

方法

/**
 * 修改前得先获取该班级的所有信息
 */
public Clazz getClassById(int cId) {
  SqlSession session = super.getSqlSession();
  return session.selectOne("com.dao.IClassDao.getClassById",cId);
}

2.2 步骤二:该修改后的实体重新插入数据库中

sql

需指定参数类型,默认返回类型为int,不用在sql语句声明返回值,否则报错

<!-- 修改班级信息 -->
<update id="updateClass" parameterType="Clazz">
  update class1 set cName=#{cname} where cId=#{cid}    
</update>

方法

/**
 * 修改班级信息,此处返回值类型int/void 都可以
 */
public int updateClass(Clazz clazz) {
  SqlSession session = super.getSqlSession();
  return session.update("com.dao.IClassDao.updateClass",clazz);
}

3 查询

查询主要是按查询条件进行查询:一般分为根据id查询;根据name进行查询(这里表中的字段name可以重复);组合查询;无查询条件查询

3.1 类型一:根据id进行查询,例子同修改的步骤一

3.2 类型二:根据name进行查询

sql语句-->需指定参数类型和返回值类型

<!-- 根据姓名获取学生信息 -->
<select id="getStudentsBysName" parameterType="String" resultType="Student">
  select * from student1 where sName=#{sname}
</select>

对应方法

/**
 * 根据姓名获取学生信息
 */
public List<Student> getStudentsBysName(String sName) {
  SqlSession session = super.getSqlSession();
  return session.selectList("com.dao.IStudentDao.getStudentsBysName",sName);
}

小结

类型一和类型二的区别在于:方法的返回值不同,前者的返回值是唯一的,后者的返回值一般是一个集合

3.3 类型三:组合查询

需指定映射关系及类型-->map的键和值的名字保持一致,并和实体类的属性保持一致,否则运行时会报错

<parameterMap type="java.util.Map" id="paramUserMap">
  <parameter property="userName" javaType="String"></parameter>
  <parameter property="userPass" javaType="String"></parameter>
</parameterMap>

sql

需指定参数类型和返回值类型

<!-- id的值对应该类中的方法名 -->
<select id="getUsersByNamePass" parameterMap="paramUserMap" resultType="User">
  select * from user1 where 1=1
  <if test="userName != null and userName != ‘‘">
    and userName=#{userName}
  </if>
  <if test="userPass != null and userPass != ‘‘ ">
  and userPass=#{userPass}
  </if>
</select>

方法

传入的是一个map集合

/**
 * 组合查询:根据用户名和身份查询用户信息
 */
public List<User> getUsersByNamePass(Map user) {
  SqlSession session = super.getSqlSession();
  return session.selectList("com.dao.IUserDao.getUsersByNamePass", user);
}

3.4 类型四:获取表中所有的数据

sql

需指定返回值类型

<!-- 获取所有的班级信息 -->
<select id="getAllClasses" resultType="Clazz">
  select * from class1
</select>

方法

/**
 * 获取所有的班级
 */
public List<Clazz> getAllClasses() {
  SqlSession session = super.getSqlSession();
  return session.selectList("com.dao.IClassDao.getAllClasses");
}

4 删除

删除分为:单条数据删除和多条数据删除

4.1 类型一:单条数据删除

sql

需指定参数类型(默认返回int类型)

<!-- 删除学生信息 -->
<delete id="deleteStudentBysId" parameterType="int">
  delete from student1 where sId=#{sid}
</delete>

方法

/**
 * 删除学生信息
 */
public int deleteStudentBysId(int sId) { 
  SqlSession session = super.getSqlSession();
  return session.delete("com.dao.IStudentDao.deleteStudentBysId", sId);
}

4.2 类型二:删除多条数据

sql

需指定参数类型(默认返回int类型)

<delete id = "delete" parameterType = "java.util.List"> 
  delete from tests where id in 
  <foreach collection="list" item = "item" open="(" separator="," close=")">
    #{item} 
  </foreach> 
</delete>
目录
相关文章
|
11月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1619 1
Spring boot 使用mybatis generator 自动生成代码插件
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
437 21
|
人工智能 Java 数据库连接
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
1045 0
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2497 6
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
808 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
3484 2
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
577 6
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
247 2
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
1126 0