Mybatis之动态SQL实现数据的增删改查


一、所需jar包

二、XML文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//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.jdbc.Driver" /><property name="url" value="jdbc:mysql://192.168.3.29:3306/test" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments><!-- 指定xml映射文件 --><mappers><mapper resource="student.xml"></mapper></mappers>
</configuration>

三、代码分析

测试类Test

public class Test {public static void main(String[] args) throws Exception {//指定XML文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//通过xml文件生成SqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//生成sqlSessionSqlSession sqlSession=sessionFactory.openSession();//默认为false,不会自动提交,需要调用commit()方法;和下面注释的这一行效果是一样的//SqlSession sqlSession=sessionFactory.openSession(false); IStudentDao studentDao = sqlSession.getMapper(IStudentDao.class);//为接口生成JDK动态代理对象//删,通过id,批量删除向数据库中数据,注意:传到IStudentDao的数据不能直接就是一个字符串List<String> list = new ArrayList<>();list.add("fbc6f519-cac5-4f53-8f37-284fc84d9215");list.add("e4c6a8e5-7c1f-4ca8-b569-158c1912a0e5");studentDao.batchDelete(list);//增,向数据库中添加数据,对于sql语句,insert、delete、update如果返回值类型是boolean,只要执行成功就返回true,否则是false,如果返回值类型是int,返回sql语句作用的行数System.out.println(studentDao.insert(new Student("cbc6f519-cac5-4f53-8f37-284fc84d9214","Mary","111","青岛")));//改,修改数据Student student = new Student();student.setId("acd6a8e5-7c1f-4ca8-b569-158c1912a229");student.setAddress("UK");System.out.println(studentDao.update(student));//查,查询数据库信息,并实现模糊查询String name="大";String mobile="3";//sql映射文件无法对数据进行加工,计算,因此传到接口的数据要提前加工好if(name!=null) {name="%"+name+"%";}if(mobile!=null) {mobile="%"+mobile+"%";}for (Student stu : studentDao.select(mobile, name)) {System.out.println(stu.toString());//打印查询到的数据    }sqlSession.commit();//提交sql语句sqlSession.close();//释放资源}
}

Student类

public class Student {private String id;private String name;private String mobile;private String address;public Student() {}public Student(String id, String name, String mobile, String address) {super();this.id = id;this.name = name;this.mobile = mobile;this.address = address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMobile() {return mobile;}public void setMobile(String mobile) {this.mobile = mobile;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", mobile=" + mobile + ", address=" + address + "]";}}

Dao层代码

IStudentDao

/*** 学生管理数据访问层** @Snow*/
public interface IStudentDao {/*** 实现添加数据抽象方法* * @Snow*/boolean insert(Student student);/*** 实现修改数据抽象方法* * @Snow*/boolean update(Student student);/*** 实现批量删除数据抽象方法* * @Snow*/int batchDelete(List<String> list);/*** 实现查询及模糊查询抽象方法* * @Snow*/List <Student> select(@Param("mobile")String mobile,@Param("name")String name);
}

二、XML(SQL)映射文件配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jd.student.dao.IStudentDao"><!-- 数据添加 --><insert id="insert">insert into student(id,user_name,mobile,address) value(#{id},#{mobile},#{name},#{address})</insert><!-- 批量删除 --><delete id="batchDelete">delete from student where id in(<foreach item="id" collection="list" separator="," >#{id}</foreach>)</delete><!-- 数据修改 --><update id="update">update student <!-- 实现当只修改了部分的数据,能够保留下没修该的那部分数据 ,否则不需要修改的那部分数据会为空--><set><if test="name!=null">user_name=#{name}</if><if test="mobile!=null">mobile=#{mobile}</if><if test="address!=null">address=#{address}</if></set>where id=#{id}</update><!-- 数据查询并实现模糊查询 --><select id="select" resultType="com.jd.vo.Student"><!-- 指定返回值类型,可以为List集合里面的元素 -->select id,user_name name,mobile,address from student <!--使用字段的别名,使查回来的变量名和Student中的一样,它会自动的为相应的赋值 --><!-- where标签能够实现自动去除不符合规范的and,例如当name=null时,它会把mobile前面的and给去掉,sql语句就变为select id,user_name name,mobile,address from student where mobile like #{mobile}--><where><if test="name!=null">and user_name like #{name}</if><if test="mobile!=null">and mobile like #{mobile}</if></where></select>
</mapper>

Mybatis——动态SQL实现数据的增删改查相关推荐

  1. SpingBoot中使用MyBatis和pagehelper实现数据的增删改查和分页

    文章目录 一.认识MyBatis CRUD注解 映射注解 高级注解 二.用MyBatis实现数据的增加.删除.修改.查询和分页 1.创建springboot项目并引入依赖 2.实现数据表的自动初始化 ...

  2. Spring Boot MyBatis Postgres 实现对数据表增删改查操作(采用注解方式)

    1.创建Java实体类 package com.example.server;public class SceneService {private String servicename;private ...

  3. SQL Server创建数据库和数据的增删改查

    SQL Server创建数据库和数据的增删改查 本文是针对数据的增删改查,数据的创建 首先我们使用命令创建sql server数据库 D盘新建一个文件夹DB use master go --创建数据库 ...

  4. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

  5. JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)

    JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 文章目录 JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用) 环境搭建 ...

  6. php mysql增删改查实例_php连接数据库实现用户数据的增删改查实例

    下面小编就为大家带来一篇使用PHP连接数据库_实现用户数据的增删改查的整体操作示例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 main页面(主页面) 代号 姓名 性 ...

  7. Node+Vue实现对数据的增删改查

      这是一个用于学生签到的小例子.主要用到的技术有node和Vue:用node搭建小型服务器,配置好路由,前端用vue写好组件,数据库采用的是mysql. 文件结构如下:   主要是功能是对数据的增删 ...

  8. 从零开始的VUE项目-03(数据的增删改查)

    代码svn地址 (用户名:liu,密码;123) 这一篇中,我们要实现的基本就是这么个东西 这个页面就是我们创建的DataManagement.vue页面,我们的主要代码将写在这里面,这个表格我们将用 ...

  9. JDBC——商品品牌数据的增删改查操作

    JDBC练习--完成商品品牌数据的增删改查操作 一.准备环境 1.数据库表tb_brand 2.实体类Brand /*** 品牌* alt+鼠标左键,整列编辑* 在实体类中,基本数据类型建议使用其对应 ...

  10. visual studio2019连接SQL Server数据库,增删改查详细教程(C#代码)

    visual studio2019连接SQL Server数据库,增删改查详细教程(C#代码) 工具: 1.Visual Studio 2019 2.SQL Server数据库(我使用的2008) 操 ...

最新文章

  1. 如何来理解Python中的字典数据类型
  2. java 向量上的坐标点_新高三知识点-点的平移公式
  3. Oracle 用shutdown+immediate关机后启动方法
  4. id3决策树_信息熵、信息增益和决策树(ID3算法)
  5. Array 复制到ArrayList中
  6. activiti(7.0) 组任务流程CandidateUsers
  7. php error_log记录日志的使用方法和配置
  8. ubuntu chrome下载地址
  9. 影视后期好学吗?C4D精品教学合集,看完必成大神!(附链接)
  10. 计算机网络双绞线的功能,双绞线由几根组成?双绞线每根线的作用
  11. Mybatis—— 使用注解实现一对一复杂关系映射及延迟加载
  12. 由于应用程序配置不正确,未能启动该应用程序。请查看清单文件以查找可能的错误
  13. virt-manager的安装和使用
  14. stm32外设-RCC
  15. Linux——详解共享内存shared memory
  16. RK3588平台开发系列讲解(USB篇)USB 外设 CONFIG
  17. case when then 的两种写法
  18. 从智能家居产业透视实体经济多元化之辩
  19. 斯皮格尔:我们敢于采纳非常疯狂的创意
  20. 【愚公系列】2023年05月 Web渗透测试之SSRF漏洞分析与实践

热门文章

  1. CMS3.0——初次邂逅express
  2. 解决eclipse中svn插件总是提示输入密码的问题
  3. edx : Permission denied
  4. JAX-RPC学习笔记(1)-Hello World!
  5. flex 实现图片播放 方案二 把临时3张图片预加载放入内存
  6. 剑指Offer:跳台阶
  7. 空悬指针和野指针(Dangling pointer and wild pointer)
  8. iOS_SN_深浅拷贝( 百度的)_转载
  9. AspNetPager控件+repeater+Ajax+存储过程实现高效分页,还有漂亮控件样式
  10. Linq to sql(六):探究特性(四)