本文共 3169 字,大约阅读时间需要 10 分钟。
尊重个人劳动成果,转载请注明出处:
本篇博客主要介绍 mybatis 中动态 SQL 的使用(增删改查)。话不多说,直接进正题了。
关键代码:
@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 ListfindAll(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 两边要加上 ` ` 呢?因为有时不加的话为报错,所以还是加上比较保险吧,避免不必要的麻烦
输出结果:
关键代码:
@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(); Mapmap = new LinkedHashMap (); map.put("id", id); map.put("name",name); sqlSession.update(nameSpace+".dynaUpdate",map); sqlSession.commit(); sqlSession.close();}
映射文件(studentMapper.xml)
UPDATE stu WHERE id = #{id} `name` = #{name},
小提示 4:第五行最后有一个 ,
号,因为 SQL 语句本身就是需要用 ,
号连接。比如:UPDATE stu SET name=? ,course = ? where id=?;
同时 set 标签会自动判断哪个是最后一个字段,并去掉最后一个 ,
号。在我的例子中,name 就是最后一个字段。
输出结果:
关键代码:
@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}
输出结果:
关键代码:
@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 ( )
输出结果: