浙江省建设执业资格中心网站,石家庄网站建设云图,成全动漫免费观看在线看,中国最新网络公司排名目录
一、动态sql
1.set、if
2.foreach
二、转义符
三、缓存cache
1. 一级缓存
2. 二级缓存 一、动态sql
1.set、if 在update语句中使用set标签#xff0c;动态更新set后的sql语句#xff0c;#xff0c;if作为判断条件。 update idupdateStuent pa…目录
一、动态sql
1.set、if
2.foreach
二、转义符
三、缓存cache
1. 一级缓存
2. 二级缓存 一、动态sql
1.set、if 在update语句中使用set标签动态更新set后的sql语句if作为判断条件。 update idupdateStuent parameterTypeStudentupdate studentsetif testnum!0num#{num},/ifif testname!nullname#{name},/ifif testgender!0gender#{gender}/if/setwhere id #{id}/update
2.foreach
foreach对集合进行遍历尤其是in条件语句 delete iddeleteStudents parameterTypelist delete from student where id inforeach collectionlist itemitem open( separator, close)#{item}/foreach/delete
collection 是传入参数名item为元素名separator代表元素之间的间隔符。
详细动态sql可查看官网 mybatis – MyBatis 3 | 动态 SQL
二、转义符
1.在 mybatis 中的 xml 文件一些特殊符号需要转译:
特殊字符转译字符lt;quot;’apos;amp;gt;
2.使用![CDATA[]]
通过![CDATA[ 特殊字符 ]]包裹特殊字符也可以 !--转义字符 号会报错 号不会报错 --select idfindstuTurn resultTypeStudentselect id,num,gender from student where num lt; 1000/selectselect idfindstuTurn2 resultTypeStudentselect id,num,gender from student where num ![CDATA[ ]] 1000/select 注意 号会报错 号不会报错 如果![CDATA[ ]] 里有if /if where /wherechoose /choose trim /trim 等这些标签都不会被解析所以只把有特殊字符的语句放在 ![CDATA[ ]] 尽量缩小![CDATA[ ]]的范围。 三、缓存cache
缓存作用让程序更快的访问数据减少对数据库的访问压力。
缓存原理从数据库中查询出来的对象在使用完后不要销毁而是存储在内存缓存中当再次需要获取该对象时直接从内存缓存中直接获取不再向数据库执行select 语句从而减少了对数据库的查询次数因此提高了数据库的性能。
mybatis有两种缓存方式
1. 一级缓存 在同一个SqlSession中执行相同的sql且参数也相同完全相同的sql查询第二次查询时直接从sqlSession中获取而不再从数据库中获取。 在没有默认配置情况下mybatis开启一级缓存。
例如 Testvoid testCache(){SqlSession sqlSession MybatisUtil.getSqlsession();StudentDao studentDao sqlSession.getMapper(StudentDao.class);ListStudent students studentDao.findstuTurn();System.out.println(students);ListStudent student2 studentDao.findstuTurn();sqlSession.commit();sqlSession.close();}
日志中只显示一条查询 一级缓存失效 sqlSession.close();sqlSession.clearCache();SqlSession 中执行了任何一个修改操作(update()、delete()、insert()) 都会清空缓存的数据。 2. 二级缓存
二级缓存是 SqlSessionFactory 级别的数据存放在SqlSessionFactory中。
需要手动启动:
1.在核心配置文件中开启二级缓存 !--开启二级缓存--setting namecacheEnabled valuetrue/
2.将 POJO 类实现序列化接口 implements Serializable
3.在mapper映射文件中添加cache标签表示此mapper开启二级缓存 cache flushInterval100000 /cache flushInterval可以设置刷新时间缓存失效 当 SqlSeesion 关闭时,会将数据存入到二级缓存。 示例 Testvoid testCache1(){SqlSession sqlSession MybatisUtil.getSqlsession();StudentDao studentDao sqlSession.getMapper(StudentDao.class);ListStudent students studentDao.findstuTurn();System.out.println(students);sqlSession.commit();//sqlSession关闭sqlSession.close();SqlSession sqlSession2 MybatisUtil.getSqlsession();StudentDao studentDao2 sqlSession2.getMapper(StudentDao.class);ListStudent students2 studentDao2.findstuTurn();System.out.println(students2);sqlSession2.commit();sqlSession2.close();}
结果只查询一次