MyBatis系列:(5)动态SQL
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,1、动态SQL操作之查询查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL select emp_id,emp_name,emp_sal from emp
千家信息网最后更新 2025年11月08日MyBatis系列:(5)动态SQL
1、动态SQL操作之查询
查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL
2、动态SQL操作之更新
更新条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL
update emp where emp_id = #{pid} emp_name = #{pname}, emp_sal = #{psal},
3、动态SQL操作之删除
根据多个id进行删除
delete from emp where emp_id in #{pid} delete from emp where emp_id in #{pid}
4、动态SQL操作之添加
根据条件,添加数据
emp_id, emp_name, emp_sal, #{id}, #{name}, #{sal}, insert into emp( ) values( )
5、参考代码
准备SQL
CREATE TABLE Emp( emp_id INT(5) PRIMARY KEY, emp_name VARCHAR(20), emp_sal DOUBLE(8,2));
Emp.java
package com.rk.entity;public class Emp { private Integer id; private String name; private Double sal; public Emp(){} public Emp(Integer id, String name, Double sal) { this.id = id; this.name = name; this.sal = sal; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getSal() { return sal; } public void setSal(Double sal) { this.sal = sal; } }EmpMapper.xml
update emp where emp_id = #{pid} emp_name = #{pname}, emp_sal = #{psal}, delete from emp where emp_id in #{pid} delete from emp where emp_id in #{pid} emp_id, emp_name, emp_sal, #{id}, #{name}, #{sal}, insert into emp( ) values( )
mybatis.xml
db.properties
mysql.driver=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://127.0.0.1:3306/testdbmysql.username=rootmysql.password=rootoracle.driver=oracle.jdbc.driver.OracleDriveroracle.url=jdbc:oracle:thin:@127.0.0.1:1521:orcloracle.username=scottoracle.password=tiger
MyBatisUtils.java
package com.rk.utils;import java.io.IOException;import java.io.Reader;import java.sql.Connection;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtils { private static ThreadLocal threadLocal = new ThreadLocal(); private static SqlSessionFactory sqlSessionFactory; static{ try { Reader reader = Resources.getResourceAsReader("mybatis.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } private MyBatisUtils() {} public static SqlSession getSqlSession(){ SqlSession sqlSession = threadLocal.get(); if(sqlSession == null){ sqlSession = sqlSessionFactory.openSession(); threadLocal.set(sqlSession); } return sqlSession; } public static void closeSqlSession(){ SqlSession sqlSession = threadLocal.get(); if(sqlSession != null){ sqlSession.close(); threadLocal.remove(); } } public static void main(String[] args) { Connection conn = MyBatisUtils.getSqlSession().getConnection(); System.out.println(conn!=null ? "连接成功" : "连接失败"); }} EmpDao.java
package com.rk.dao;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.rk.entity.Emp;import com.rk.utils.MyBatisUtils;public class EmpDao { /** * 动态SQL之SELECT */ public List dynamicFind(Integer id,String name,Double sal){ SqlSession sqlSession = null; try { Map map = new HashMap(); map.put("pid", id); map.put("pname", name != null ? "%"+name+"%" : null); map.put("psal", sal); sqlSession = MyBatisUtils.getSqlSession(); return sqlSession.selectList(Emp.class.getName() + ".dynamicFind", map); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ MyBatisUtils.closeSqlSession(); } return null; } @Test public void testDynamicFind(){ EmpDao dao = new EmpDao(); //List list = dao.dynamicFind(1,null, null); //List list = dao.dynamicFind(null,"tom", null); //List list = dao.dynamicFind(null,null, 350D); List list = dao.dynamicFind(null,"tom", 350D);// List list = dao.dynamicFind(0,"tom", 25D); if(list != null && list.size()>0){ for(Emp emp : list){ System.out.println( emp.getName() + ":"+emp.getSal()); } } } /** * 动态SQL之UPDATE */ public int dynamicUpdate(Integer id,String name,Double sal){ SqlSession sqlSession = null; try { Map map = new HashMap(); map.put("pid", id); map.put("pname", name); map.put("psal", sal); sqlSession = MyBatisUtils.getSqlSession(); int i=sqlSession.update(Emp.class.getName() + ".dynamicUpdate", map); sqlSession.commit(); return i; } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ MyBatisUtils.closeSqlSession(); } return 0; } @Test public void testDynamicUpdate(){ int i = dynamicUpdate(3,"Lucy",null); System.out.println("本次操作影响"+i+"行数据"); } /** * 动态SQL之DELETE(数组版本) */ public int dynamicDeleteArray(int... ids){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); int i=sqlSession.update(Emp.class.getName() + ".dynamicDeleteArray", ids); sqlSession.commit(); return i; } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ MyBatisUtils.closeSqlSession(); } return 0; } @Test public void testDynamicDeleteArray(){ int i = dynamicDeleteArray(3,2); System.out.println("本次操作影响"+i+"行数据"); } /** * 动态SQL之DELETE(集合版本) */ public int dynamicDeleteList(List ids){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); int i=sqlSession.update(Emp.class.getName() + ".dynamicDeleteList", ids); sqlSession.commit(); return i; } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ MyBatisUtils.closeSqlSession(); } return 0; } @Test public void testDynamicDeleteList(){ List ids = new ArrayList(); ids.add(1); ids.add(4); int i = dynamicDeleteList(ids); System.out.println("本次操作影响"+i+"行数据"); } /** * 动态SQL之INSERT */ public int dynamicInsert(Emp emp){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); int i=sqlSession.insert(Emp.class.getName() + ".dynamicInsert", emp); sqlSession.commit(); return i; } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); } finally{ MyBatisUtils.closeSqlSession(); } return 0; } @Test public void testDynamicInsert(){ Emp emp = new Emp(1, null, 30D); int i = dynamicInsert(emp); System.out.println("本次操作影响"+i+"行数据"); }}
动态
数据
情况
影响
条件
片段
版本
语法
更新
查询
成功
代码
多个
数组
准备
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
培训软件开发开源
数据库驱动是干嘛用的
网吧服务器管理方
数据库系统数据共享的好处有
软件开发 超极本推荐
手机当作电梯服务器
数据库教室对应的课程
共建网络文明共享网络安全黑板报
软件开发企业常规体系建设证书
铁路网络安全学习心得体会
软件开发属it行业吗
计算机网络安全学年论文选题
计算机网络技术思政
网络安全秘钥是什么
三一软件开发岗位职责
网络安全教育黑板报边框
网络安全黑板报讲解
阿里巴巴网络安全部门是谁
实验4 数据库的安全性
社交软件开发专业 青岗科技
计算机网络技术基本情况
梅州数据链软件开发报价表
网络安全和域名解析
软件开发企业非技术类费用
博软软件开发有限公司
信息网络安全行业自律
世界网络的根服务器
网络安全志愿者 ppt
知识数据库 结构
为了迎接网络安全周