动态SQL语句是核心之一,这里我们通过几个示例来演示
一 多条件查询专题
1.通过恒等式完成动态SQL语句
涉及到if标签
user_id,user_name,sex,money,birthday ${alias}.user_id,${alias}.user_name,${alias}.sex,${alias}.money,${alias}.birthday
- 映射文件
- Java测试代码
@Test public void IF标签01(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); Mapquery = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List userList = sqlSession.selectList(User.class.getName()+".if01", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解说明
2.where标签和if标签组合
- 如果发现标签內有内容,那么会在内容的最前面加入关键字 where
- 如果有内容,会检查内容的最前面是否含有 AND空格 或者 OR空格 ,自动将其抹掉
- 映射文件
- Java测试代码
@Test public void IF标签02(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); Mapquery = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List userList = sqlSession.selectList(User.class.getName()+".if02", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解说明
3.trim标签和if标签
- 映射文件
- Java测试代码
@Test public void trim标签(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); Mapquery = new HashMap<>(); query.put("name", "悟"); query.put("sex", "男"); List userList = sqlSession.selectList(User.class.getName()+".if03", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解说明
二 更新操作
1.set标签
- 当你发现有内容的时候,在内容的最前面加入 set
- 当你发现有内容的时候,检查内容的最后面是否有逗号"," 如果将其抹掉
- 映射文件
UPDATE oa_user WHERE user_id=#{user_id} user_name=#{user_name}, sex=#{sex}, money=#{money}, birthday=#{birthday},
- Java测试代码
@Test public void 更新操作_变更数据库(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); //数据 User user = new User(); user.setUser_id(3); user.setUser_name("天蓬元帅"); //日期的转换 String date = "1998-09-09"; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); user.setBirthday(df.parse(date)); int row =sqlSession.update(User.class.getName()+".update01", user); System.out.println(row); //事务的提交 sqlSession.commit(); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解说明
2.trim标签完成更新
- 映射文件
UPDATE oa_user WHERE user_id=#{user_id} user_name=#{user_name}, sex=#{sex}, money=#{money}, birthday=#{birthday},
- Java测试代码
@Test public void 更新操作_TRIM标签_变更数据库(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); //数据 User user = new User(); user.setUser_id(3); user.setUser_name("天蓬元帅123"); //日期的转换 String date = "1998-10-09"; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); user.setBirthday(df.parse(date)); int row =sqlSession.update(User.class.getName()+".update02", user); System.out.println(row); //事务的提交 sqlSession.commit(); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
三 choose 标签简单使用
- 映射文件
- Java测试代码
@Test public void choose标签(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); Mapquery = new HashMap<>(); query.put("sex", "女123213"); List userList = sqlSession.selectList(User.class.getName()+".choose01", query); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
四 小于号问题
- 映射文件
- Java测试代码
@Test public void 小于号的解决问题(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); ListuserList = sqlSession.selectList(User.class.getName()+".less01", 1.0*800); System.out.println(userList); userList = sqlSession.selectList(User.class.getName()+".less02", 1.0*600); System.out.println(userList); } finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解说明
请参考附录1说明
五 动态添加语句
- 映射文件
INSERT INTO oa_user user_name, sex, money, birthday, #{user_name}, #{sex}, #{money}, #{birthday},
- Java测试代码
@Test public void 动态的添加语句(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); //数据 User user = new User(); user.setUser_name("刘备12333333"); //日期的转换 String date = "1998-10-09"; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); user.setBirthday(df.parse(date)); user.setMoney(1111.11); int row =sqlSession.insert(User.class.getName()+".add01", user); System.out.println(row); //事务的提交 sqlSession.commit(); System.out.println(user); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
六 foreach标签
1.数组方式
- 映射方式
DELETE FROM oa_user WHERE user_id in #{shxt}
- Java测试代码
@Test public void 传递数组删除规则(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); int row = sqlSession.delete(User.class.getName()+".delete01", new int[]{5,6}); //事务的提交 sqlSession.commit(); System.out.println(row); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
2.List方式
- 映射文件
DELETE FROM oa_user WHERE user_id in #{shxt}
- Java测试代码
@Test public void 传递集合删除规则(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); ListtempList = new ArrayList<>(); tempList.add(8); tempList.add(9); int row = sqlSession.delete(User.class.getName()+".delete02", tempList); //事务的提交 sqlSession.commit(); System.out.println(row); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
3.Map方式
- 映射方式
DELETE FROM oa_user WHERE user_id in #{shxt}
- Java测试代码
@Test public void 传递Map删除规则(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); ListtempList = new ArrayList<>(); tempList.add(7); tempList.add(10); Map map = new HashMap (); map.put("id_array", tempList); int row = sqlSession.delete(User.class.getName()+".delete03", map); //事务的提交 sqlSession.commit(); System.out.println(row); }catch (Exception ex) { ex.printStackTrace(); }finally { MyBatisUtils.closeSqlSession(sqlSession); } }
- 图解方式
4.批量添加
- 映射文件
INSERT INTO oa_user VALUES (#{user.user_name},#{user.sex},#{user.money})
附录1 : MyBatis在xml文件中处理大于号小于号的方法
第一种方法:
用了转义字符把>和<替换掉,然后就没有问题了。
SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE
附:XML转义字符
第二种方法
因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析
你的可以写成这个: mapper文件示例代码