博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 学习记录(3)—— 动态 sql
阅读量:2059 次
发布时间:2019-04-29

本文共 3169 字,大约阅读时间需要 10 分钟。

尊重个人劳动成果,转载请注明出处:

本篇博客主要介绍 mybatis 中动态 SQL 的使用(增删改查)。话不多说,直接进正题了。

1. 动态查询

关键代码:

@Testpublic void main() throws Exception {    StudentDao studentDao = new StudentDao();    // 输出动态查询结果    System.out.println(studentDao.findAll(1,null));    System.out.println(studentDao.findAll(null,"a"));    System.out.println(studentDao.findAll(1,"czd1"));}// 动态查询public List
findAll(Integer id, String name) throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); Map
map = new LinkedHashMap
(); map.put("id", id); map.put("name",name); return sqlSession.selectList(nameSpace + ".findAll", map); }

小提示 1:在动态 SQL 中,因为 id 的值可能为 null,所以要使用 Integer 类,因为它能够接收 null,如果是 int 接收 null 的话则会报错。

映射文件(studentMapper.xml)

小提示 2:<if test="id!=null"> 中的 id 是 map 集合的 key 名称,不是 value 值。同理,下面的 name 也是 map 集合的 key 名称。而 AND id = #{id}左边的 id 是表字段名,右边的 id 依然是 map 集合中的 key 名称

小提示 3:另外为什么我的 name 两边要加上 ` ` 呢?因为有时不加的话为报错,所以还是加上比较保险吧,避免不必要的麻烦

输出结果:

这里写图片描述

2. 动态更新

关键代码:

@Testpublic void main() throws Exception {    StudentDao studentDao = new StudentDao();    // 动态更新    studentDao.dynaUpdate(16,"aaa");}public void dynaUpdate(Integer id, String name) throws Exception {    SqlSession sqlSession = sqlSessionFactory.openSession();    Map
map = new LinkedHashMap
(); map.put("id", id); map.put("name",name); sqlSession.update(nameSpace+".dynaUpdate",map); sqlSession.commit(); sqlSession.close();}

映射文件(studentMapper.xml)

UPDATE stu
`name` = #{name},
WHERE id = #{id}

小提示 4:第五行最后有一个 , 号,因为 SQL 语句本身就是需要用 , 号连接。比如:UPDATE stu SET name=? ,course = ? where id=?;

同时 set 标签会自动判断哪个是最后一个字段,并去掉最后一个 , 号。在我的例子中,name 就是最后一个字段。

输出结果:

这里写图片描述

3. 动态删除

关键代码:

@Testpublic void main() throws Exception {    StudentDao studentDao = new StudentDao();    // 动态删除    studentDao.dynaDelete("22","23","24");} public void dynaDelete(String... ids) throws Exception {        SqlSession sqlSession = sqlSessionFactory.openSession();        sqlSession.delete(nameSpace + ".dynaDelete", ids);        sqlSession.commit();        sqlSession.close();}

映射文件(studentMapper.xml)

DELETE FROM stu WHERE id IN
#{ids}

输出结果:

这里写图片描述

4. 动态插入

关键代码:

@Testpublic void main() throws Exception {    StudentDao studentDao = new StudentDao();// 动态插入    Student student1 = new Student();    student1.setName("test");    studentDao.dynaInsert(student1);    Student student2 = new Student();    studentDao.dynaInsert(student2);}public void dynaInsert(Student student) throws Exception {    SqlSession sqlSession = sqlSessionFactory.openSession();    sqlSession.update(nameSpace + ".dynaInsert", student);    sqlSession.commit();    sqlSession.close();}

映射文件(studentMapper.xml)

`name`
#{name}
INSERT INTO stu (
)VALUES (
)

输出结果:

这里写图片描述

你可能感兴趣的文章
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
AJAX 自己研究玩的
查看>>
javascript(js)数组操作
查看>>
用JavaScript脚本实现Web页面信息交互
查看>>
window 窗口对象操作
查看>>
公司一位老员工愤然离去的留信!崩溃!
查看>>
C#技巧:网页表单自动填写技术(以gmail为例)
查看>>
C#基础概念二十五问
查看>>
C#在Excel中将连续多列相同数据项合并
查看>>
C#如何把html中的相对路径变成绝对路径
查看>>
用C#编写发手机中文短信息Windows服务
查看>>