使用MyBatis实现条件查询总结

本文详细介绍了MyBatis中如何使用SQL映射文件进行条件查询,包括单条件、多条件查询,以及使用resultMap进行结果映射。还涵盖了insert、update、delete操作,事务控制,以及@Param注解的使用。此外,讨论了association和collection在一对多映射中的应用,并讲解了resultMap的自动映射级别设置。
摘要由CSDN通过智能技术生成

SQL映射文件

	Mybatis真正强大的是在于它的SQL映射语句,也是它的流弊之处。
它的功能强大,SQL映射文件的配置却比较简单。
使用SQL映射文件可以减少50%以上的代码量。
Mybatis专注于SQL,对于开发人员来说可极大限度地进行SQL调优,以保证性能,
下面是SQL映射文件的几个顶级元素配置
  1. mapper 它是映射文件的根节点,只有一个属性就是 namespace(命名空间)它的作用是区分不同的mapper,里面的参数是全局唯一的,绑定DAO层接口,即面向接口编程 namespace绑定某个接口之后,就可以不写该接口的实现类,因为mybatis会根据接口的完整名称来找到对应的mapper配置来执行SQL语句。因此namespace的命名必须跟你设置的接口同名比如
    接口内容
    mapper.xml文件
    2.cache:配置给命名空间的缓存
<!-- cache配置 -->
<cache 
	eviction="FIFO"
 	flushInterval="60000"
    size="512" 
 	readOnly="true" />

在mapper文件配置支持cache后如果需要对个别查询进行调整,可以单独设置cache,代码如下

	<select id="selectTest" resultType="int" useCache="true">
        select id from text where id = 1
    </select>

由于Mybatis框架不擅长缓存查询结果数据集,所以不对它进一步了解,所以采用OSCahe,Memcached等专门的缓存服务器做更为合理。
3.cache-ref:从其他命名空间引用缓存
4.resultMap:用于描述数据库结果集合对应关系
5.SQL:可以重用的SQL 块,也可以被其他语句引用
6.insert:映射插入语句
7.delete:映射删除语句
8.update:映射更新语句
9.映射查询语句

使用SELECT完成单条件查询

Select 元素的属性 id 命名空间中唯一的标识符,可以被用来引用这条语句 
ParameterType 表示查询语句传入参数的类型的完全限定名或别名,
它支持基础数据类型和复杂数据类型

映射类型
除了内建的类型别名外,还可以为自定义的类设置别名,该表格只列出了部分映射,其他的别名请参考mybatis的帮助文档,ResultType 查询语句返回结果类型的完全限定名或别名。别名的使用方式与parameterType是一样的

<select id="selectTest" resultType="User" parameterType="string">
        select * from text where name = #{
   name}
    </select>

这是一个 id为 selectTest的SQL映射语句 ,它的参数类型为 string 也可为复杂类型,返回值是 User类型,如果使用类 做返回值的话 类中的字段设置的和数据库表的字段一致,这样可以使数据库和类中的属性自动匹配以便开发(注意如果数据库表和实体类的属性命名不一样则需要手动配置),参数类型为 #{参数名} 它会告诉Mybatis生成PreparedStatement参数 ,对于JDBC该参数会被识别成 ? 若采用JDBC来实现代码如下:

String sql = "select * from text where name = ? ";
PreparedStatement ps = new PreparedStatement(sql);
ps.setString(1,name);

由此看出,Mybatis可以节省大量的代码,如果想完成复杂一些的查询或者让配置文件更简洁些,这就需要了解select元素的属性和mybatis配置文件的属性,
介绍属性:

  • id:命名空间中的唯一标识符,可以被用来引用这条语句
  • parameterType:表示查询语句传入的参数的类型的完全限定名或别名
  • resultType:查询语句返回结果类型的完全限定名或别名

使用SELECT完成多条查询

	上面只是对一个表进行查询,但是在实际操作中查询数据会有多条件,
结果也会有各种类型。
<!-- 设置resultMap的映射 -->
<resultMap id="TestMap" type="text">
	<id property="id" column="id" />
	<reuslt property="name" column="name" />
	<!-- 比如text类中有个 List<User> 的属性
	则需要使用该该标签绑定User表 
	如果只是 User类型的参数的话使用 association 标签 
	他们两个标签的属性差不多只,是association是javaType来指定类型
	而collection使用的是ofType来指定类型,
	多表查询时最好给每个id设置别名,以免插入到其他的id
	-->
	<collection property="userList" ofType="User">
		<id property="id" column="u_id" />
		<result property="UserName" column
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值