MyBatis映射器用法

MyBatis映射器用法

映射器通常来处理ORM映射关系,这也是MyBatis半自动的体现,在MyBatis中我们通常以注解或者xml文件的方式来实现映射器,下面我会一一介绍

如何使用映射器
在这里插入图片描述

映射器的组成
在这里插入图片描述

sql语句

例:

<!--查询-->
<select id="findAllStudents" resultType="Student">
		select * from student
</select>
<!-- 添加 keyProperty="sid" useGeneratedKeys="true" 后启用主键回填 -->
<insert id="addStudent" parameterType="Student" keyProperty="sid" useGeneratedKeys="true">
	 	insert into student (sname,birthday,ssex,classid)
	 	values(#{sname},#{birthday},#{ssex},#{classid})
</insert>
<!--修改-->
<update id="updateStudent" parameterType="Student" >
	 	update student set sname=#{sname}, birthday=#{birthday},ssex=#{ssex},classid=#{classid}
	 	where sid=#{sid}
</update>
<!--删除-->
<delete id="delDtudent" parameterType="int">
	 	delete from student where sid=#{sid}
</delete>

其中parameterType表示返回值类型

映射关系

这里通常是因为业务中使用到了多表联查或者是表名和字段名与实体类名和属性名不一致时,来对结果进行映射

例:

多表一对一

<!-- 结果映射,多表一对一 -->
<resultMap type="Student" id="stu_class_map">
			<result column="sid" property="sid"/>
			<result column="sname" property="sname"/>
			<result column="ssex" property="ssex"/>
			<result column="birthday" property="birthday"/>
			<result column="classid" property="classid"/>
		<association property="bj">
			<result column="classid" property="classid"/>
			<result column="classname" property="classname"/>
		</association>		
	</resultMap>
		<select id="findStudentAndClass" resultMap="stu_class_map">
			select * from student
			left join class on student.classid = class.classid
		</select>

多表一对多

<!--结果映射,多表一对多  -->
	<resultMap type="Banji" id="banji_stu_map">
			<result column="classid" property="classid"/>
			<result column="classname" property="classname"/>
		<collection property="slist" ofType="Student">
			<result column="sid" property="sid"/>
			<result column="sname" property="sname"/>
			<result column="ssex" property="ssex"/>
			<result column="birthday" property="birthday"/>
			<result column="classid" property="classid"/>
		</collection>
	</resultMap>
		<select id="findAllBanji" resultMap="banji_stu_map">
			select * from class
			left join student on student.classid = class.classid
		</select>

在使用sqlmapper映射器,需要满足以下几个前提条件

  • sqlMapper文件要和接口在同一个包下

  • sqlMapper文件名要和接口名一致

  • 接口的方法名要和sqlMapper中的id值一致

  • sqlMapper中的namespace的值要指向接口路径

  • 接口的入参类型要和sqlMapper中的parameterType类型一致

  • 接口的返回值类型要和sqlMapper中的resultType类型一致

上面是在使用xml文时的配置方式

下面介绍的是注解的使用

和xml文件一样分为sql语句和映射关系

sql语句

@Select

@Select("select * from student")
    public OrderContent findAllStudents();

@Update

@Update("update student set sname=#{sname}, birthday=#{birthday},ssex=#{ssex},classid=#{classid} where sid=#{sid}")
    public int updateStudent(int sid);

@Insert

@Insert("insert into student (sname,birthday,ssex,classid) values(#{sname},#{birthday},#{ssex},#{classid})")
    public int addStudent(Student student);

@Delete

@Delete("delete from student where sid=#{sid}")
	public int delDtudent(int sid)

其中注解括号内写sql语句方法的返回值根据注解类型来确定,方法的参数也以注解类型确定

映射关系

@Results

 @Results(id = "ordcmap",value = {
            @Result(column = "oc_id",property = "ocid"),
            @Result(column = "uo_id",property = "uoid"),
            @Result(column = "f_id",property = "fid"),
            @Result(column = "f_quantity",property = "fquantiy"),
    })

这里是处理字段名和属性名对应不上的情况

我们只需要在定义过@Results注解的属性后,在使用@Select等注解时增加一个@ResultMap(“ordcmap”),括号内就是@Results的id属性

在一对一和一对多中的使用

 @Results({
       @Result (column="cid" ,property="cid"),
       @Result( column="cid" ,property="course",
       <!-- @One 实现一对一-->
         one=@One(select = "com.day4.mapper.CourseMapper.FindAllCoursebyid"))
    })
    @Select("select * from teacher")
    public List<Teacher> FindAllTeacher();

    @Results({
            @Result (column="cid" ,property="cid"),
            @Result( column="cid" ,property="tlsit",
            <!-- @Many 实现一对多-->
              many=@Many(select = "com.day4.mapper.TeacherMapper.FindAllTeacherbyid"))
    })
    @Select("select * from course")
    public List<Course> FindAllCourser();

         many=@Many(select = "com.day4.mapper.TeacherMapper.FindAllTeacherbyid"))
})
@Select("select * from course")
public List<Course> FindAllCourser();


  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值