目录
一、Mybatis的动态SqlMybatis的动态sql可以让我们在xml文件中,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能
使用foreach和if标签
- <select id="list3" resultType="com.zjy.model.Book" parameterType="com.zjy.model.BookVo">
- select * from t_mvc_book where bid in
- <foreach collection="bookIds" open="(" close=")" separator="," item="bid">
- #{bid}
- foreach>
- select>

使用if标签将sql进行拼接,当我们对事务进行修改的时候,如果没有把值传过来,那么当我们点击修改之后,结果不会变为null,会保持原来的值不变,所以动态拼接sql可以减少资源错误
-
id="updateByPrimaryKeySelective" parameterType="com.zjy.model.Book" > - update t_mvc_book
- <set >
- <if test="bname != null" >
- bname = #{bname,jdbcType=VARCHAR},
-
- <if test="price != null" >
- price = #{price,jdbcType=REAL},
-
-
- where bid = #{bid,jdbcType=INTEGER}
-
1.1参数中直接加入%%
1.2使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)
${...}和#{...}的区别:参数类型为字符串,#会在前后加单引号['],$则直接插入值

1.3 SQL字符串拼接CONCAT
- <select id="selectBooksLike1" resultType="com.zjy.model.Book" parameterType="java.lang.String">
- select * from t_mvc_book where bname like #{bname}
- select>
- <select id="selectBooksLike2" resultType="com.zjy.model.Book" parameterType="java.lang.String">
- select * from t_mvc_book where bname like '${bname}'
- select>
- <select id="selectBooksLike3" resultType="com.zjy.model.Book" parameterType="java.lang.String">
- select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
- select>
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型如果是单表的情况下,resultType和resultMap都可以使用
多表的情况下,必须使用resultMap
使用resultType返回List
必须要以参数的形式传递 使用resultType返回List
使用resultType返回Map
,适用于多表查询返回单个结果集
为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>5.1.2version>
- dependency>
- <plugins>
-
- <plugin interceptor="com.github.pagehelper.PageInterceptor">
- plugin>
- plugins>
- //利用第三方插件进行分页
- List<Map> listPager (Map map, PageBean pageBean);
- @Override
- public List<Map> listPager(Map map, PageBean pageBean) {
-
- if(pageBean != null && pageBean.isPagination()){
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- }
- List<Map> list = bookMapper.listPager(map);
- if(pageBean != null && pageBean.isPagination()){
- PageInfo pageInfo = new PageInfo(list);
- System.out.println("页码:"+pageInfo.getPageNum());
- System.out.println("页大小:"+pageInfo.getPageSize());
- System.out.println("总记录:"+pageInfo.getTotal());
- pageBean.setTotal(pageInfo.getTotal()+"");
- }
- return list;
- }
-
- @Test
- public void listPager() {
-
- System.out.println("mybatis中模糊查询#与$的区别.....");
- Map map=new HashMap();
- map.put("bname","圣墟");
- PageBean pageBean=new PageBean();
- pageBean.setPage(4);
- List<Map> ms=this.bookBiz.listPager(map,pageBean);
- ms.forEach(System.out::println);
- }

>(>)
<(<)
&(&)
空格( )
- <select id="list6" resultType="com.zjy.model.Book" parameterType="com.zjy.model.BookVo">
- select * from t_mvc_book
- <where>
- <if test="null != min and min != ''">
-
- if>
- <if test="null != max and max != ''">
- price ]]>
- if>
- where>
- select>
-
- <select id="list7" resultType="com.zjy.model.Book" parameterType="com.zjy.model.BookVo">
- /**
- * 处理特殊字符
- * @param bookVo
- * @return
- */
- List
list6(BookVo bookVo); -
-
- /**
- * 处理特殊字符
- * @param bookVo
- * @return
- */
- List
list7(BookVo bookVo);