1.模糊查询
基础打的不牢靠,用的时候就是各种错;
在springmvc用到模糊查询的时候,编写xml的mapper映射文件就出错了;
例如:
查询名字里带有张字的用户;很简单的一条sql;
select * from THEUSER where userName like '%张%';
写在xml里面:这不是唯一方法,只是我感觉自己用起来简单,容易记住的方法
使用bind标签联合拼接sql;
<!--模糊查询-->
<select id="selectType" parameterType="User" resultType="User">
select * from THEUSER
<where>
<if test="userId != null">
<bind name="id" value="'%'+userId+'%'"/>
and userId like #{id}
</if>
<if test="userName != null">
<bind name="name" value="'%'+userName+'%'"/>
and userName like #{name}
</if>
</where>
</select>
2.springmvc中mybatis的分页插件
1.首先要在pom文件中添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
2.配置文件applicationContext中配置;
在mybatis工厂中配置
<!-- 声明 mybatis SqlSessionFactory 工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="glut.lz.model" />
<!--分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=oracle
supportMethodsArguments=true
rowBoundsWithCount=true
offsetAsPageNum=true
pageSizeZero=false
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
3.test测试分页插件
select 简单的查询全部select * 就可以了
查询3步顺序
- 首页启用分页插件设置当前查询的页码和每页显示的记录数;
- 调用查询方法
- 获得的列表进行分页处理–pages
- 得到要查询的—当前页–pages里的list属性
@Test
public void testAll() {
/*1.调用分页插件*/
PageHelper.startPage(2, 5);
/*2.查询*/
List<User> users = userService.selectAll();
/*3.获得分页结果*/
PageInfo<User> pages = new PageInfo<>(users);
List<User> list = pages.getList();
for (User user : list) {
System.out.println(user);
}
}
pages的其他属性;
4.jsp中使用jstl和el表达式分页效果
最后一行显示上下页转换方法
<tr>
<td colspan="4" style="text-align: center">
<div class="col-md-4" style="text-align: right">
<c:if test="${pageNo gt 1}">
<a href="manager/select/1">首页</a>
</c:if>
</div>
<div class="col-md-4" style="text-align: center">
<c:if test="${pageNo gt 1}">
<%--上一页--%>
<a href="manager/select/${pageNo-1}">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
</c:if>
<%--当前页--%>
<span>${pageNo}</span>
<c:if test="${pageNo lt pages}">
<%--下一页--%>
<a href="manager/select/${pageNo+1}">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</c:if>
</div>
<div class="col-md-4" style="text-align: left">
<c:if test="${pageNo lt pages}">
<a href="manager/select/${pages}">尾页</a>
</c:if>
<span>共${pages}页,${total}个用户</span>
</div>
</td>
</tr>
3.&{}和 #{}的坑
在mybatis的映射文件中,动态传递参数的方式有两种;
- ${} 拼接符
- #{} 占位符
区别;
- ${} 拼接符 --sql拼接,是直接编译执行,变量的替换是在dbms数据库管理系统之外,替换后不会加上引号;
- #{} 占位符 --sql预编译,是预编译执行,变量的替换是在dbms中,替换后会加上引号;