小白第十九篇 MyBatis映射器常用元素

映射器

映射器是MyBatis最复杂和重要的组件。
映射器可以由一个接口加上对应的XML文件组成,也可以由一个接口加上一个有对应注解的java类组成。
映射器中可以配置参数,增删改查的各类SQL语句,存储过程,缓存,级联等等。
映射器可以通过简易的映射规则将数据库数据映射到指定POJO对象或者其他对象,可以大幅度的消除JDBC操作的底层代码。
常见的映射器配置元素和说明
元素说明
<select>查询语句,对应SQL语句中的select
<insert>插入语句,对应SQL语句中的insert
<update>更新语句,对应SQL语句中的update
<delete>删除语句,对应SQL语句中的delete
<sql>可以定义一部分SQL语句在其他的位置使用,达到重用的目的
<resultMap>秒速数据库结果集加载到对象的对应规则
<cache>缓存设置
各元素配置的属性(常见的)
属性说明
id和Mapper的命名空间组合起来的唯一标识id,不唯一将抛出异常
parameterType指定简单的参数类型传递给SQL
resultType指定SQL执行后的结果集的映射规则
flushCache在调用SQL后是否需要MyBatis清空之前查询的缓存
timeout超时参数,单位为秒
fetchSize获取记录的总条数定义

给出元素实现的例子

  1. 要求:统计用户表t_user中同姓的用户数量
<!-- XXXMapper.xml文件中的代码 -->
<select id="countUserBySurname" parameterType="string" resultType="int">
	select count(*) sum
	from t_user
	where name like concat(#{surname},'%')
</select>
//对应于 XXXMapper.java接口中的代码
public Integer countUserBySurname(String surname);
  1. 要求:根据用户的名称和基本信息模糊查询(传入多个值)
<!-- XXXMapper.xml文件中内容-->
<select id="findUserByNameAndInfo" parameterType="map" resultType="user">
	select id,name,info
	from t_user
	where name like concat('%',#{name}'%')
		  and  info like concat('%',#{info},"%")
</select>
//XXXMapper.java接口中定义代码
public List<User> findUserByNameAndInfo(Map<String,Object> userMap);

**PS:**其中需要注意 name 和 info 应该是Map的键而不是值
如果需要定义一个示例 应该是这样:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","xxx");
map.put("info","xxx");
List<User> users = userMapper.findUserByNameAndInfo(map);

但是使用Map注解传递多个参数可读性差的缘故也可以使用注解的方式传递多个参数 注解@Param 来自 org.apache.ibatis.annotations.Param
例如:(将上诉Map的形参变化一下)

public List<User> findUserByNameAndInfo(
			@Param("name") String name,
			@Param("info") String info);
  1. 向用户表中插入一条数据
    PS:insert返回的是影响了数据表中记录条数的一个整数
<!-- XXXMapper.xml文件中的代码  -->
<insert id="insertUser" parameterType="user">
	insert into t_user(name,info)
	values(#{name},#{info})
</insert>
//XXXMapper.java接口中的代码
public Integer insertUser(User user);

如果想要得到插入数据之后该条数据在表中的主键则需要定义为:

<insert id="insertUser" parameterType="user"
	useGeneratedKeys="true" keyProperty="id">
	...
  1. 更新和删除某一条数据
    和insert语句操作得到的返回值一样,更新和删除返回的也是数据表中受到影响的记录条数,是一个整数。
<update id="updateUser" parameterType="user:">
	update t_user
	set name="#{name},info = #{info}
	where id=#{id}
</update>
<delete id="deleteUser" parameterType="long">
	delete from t_user
	where id="#{id}
</delete>
  1. sql元素定义的重用
    主要是为了少写一些代码,尤其和当数据表字段很多时会方便一些
<sql id="test">
	id,name,info
</sql>
<!-- 引用的方式 -->
	...
	select <include refid="test"/>
	from ...
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值