mybatis动态sql,分页
作者:互联网
1、基础增删改查
来自逆向生成
代码示例:只选取了新增和查询
增
<insert id="insert" parameterType="com.csf.model.Book" >
insert into t_mvc_book (bid, bname, price
)
values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL}
)
</insert>
查
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from t_mvc_book
where bid = #{bid,jdbcType=INTEGER}
</select>
标签名就是方法类型,各属性:
id:方法名
parameterType:返回类型
然后具体的sql语句在标签内容中,这里就可以通过if和foreach实现动态sql。
例如:
使用foreach进行查询
<select id="selectBooksIn" resultType="com.javaxl.model.Book" parameterType="java.util.List">
select * from t_mvc_book where bid in
<foreach collection="bookIds" open="(" close=")" separator="," item="bid">
#{bid}
</foreach>
</select>
使用foreach循环,得到一个数据集合,再根据数据集合进行查询。
if实现在默认生成的那几个方法中有。
2、#与$的区别
都用于在sql语句中引用参数的值
#:在语句中会自带单引号,不需要手动加入单引号,不过灵活性欠缺
$:用法与上面的差不多,不过不会带单引号,所以在使用时更加灵活,不过因此也有sql注入的风险。
3、查询语句结果集的配置
五种情况
1 使用resultMap返回自定义类型集合
2 使用resultType返回List<T>
3 使用resultType返回单个对象
4 使用resultType返回List<Map>,适用于多表查询返回结果集
5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
分别对应各种应用场景
其中resultMap适合在查询自定义实体类的情况
而其他的,适用于返回值是由jdk提供的数据类型而非自定义实体类的情况
4、分页查询
在pom.xml中导入分页插件的pom依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
在mybatis的主配置文件中将pagehelper插件配置到mybatis中
<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
在具体的使用时,需要在查询语句前开启分页
if(pageBean != null && pageBean.isPagination()){
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}
这里传入的参数是起始下标和偏移量
在查询语句后,对结果集进行处理
这里借助pageBean,更方便我们查看结果
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()+"");
}
5、特殊字符的处理
因为是使用xml文件来写sql语句,像大于、小于号就不能再使用了,因为会与xml文件格式有冲突。
1、使用特殊标签包裹
<![CDATA[ ]]>
使用:
<select id="userInfo" parameterType="java.util.HashMap" resultMap="user">
SELECT id,newTitle, newsDay FROM newsTable WHERE 1=1
AND newsday <![CDATA[>=]]> #{startTime}
AND newsday <![CDATA[<= ]]>#{endTime}
]]>
</select>
2、转义
特殊字符 转义序列
< <
> >
& &
" "
' '
标签:语句,分页,bid,sql,查询,pageBean,mybatis,pageInfo 来源: https://blog.csdn.net/weixin_55966394/article/details/121904474