Mybatis映射器用法

Mybatis映射器主要是java与数据库之间交互的映射。

映射主要由SQL语句和映射关系组成,SQL语句分为增删改查;映射关系分为入参映射、结果集映射。

SqlMapper.xml文件映射

步骤及方法:

我们在搭载好bean层,Dao层的环境后,导入xml文件,文件中的配置和Mapper层的命名应该注意一下6点:

1. SqlMapper.xml文件中的namespace与mapper接口类路径相同

2.mapper接口和SqlMapper.xml在同一个包下

3.mapper接口和SqlMapper.xml名字相同

4.mapper接口的方法名SqlMapper.xml中的id一致,并且接口的方法名不可以重载,因为id唯一

5.mapper接口的入参类型和SqlMapper.xml中parameterType类型一致

6.mapper接口的入参类型与SqlMapper.xml中的ResultType类型中每个元素的类型一致

先写简单的增删改查的映射

    //查找结果集是所有的login
    <select id="findAllLogin" resultType="login">
 	select * from login
 	</select>

 	//查找结果集是所有的name的string类型
 	<select id="findAllName" resultType="string" >
 	select lname from login 
 	</select>
 	
    //查找结果集是编号小于入参为int型的所有login
 	<select id="findNum" resultType="login" parameterType= "int">
 	select * from login where lid &lt; #{v}
 	</select>
 	
    //添加login对象 没有结果集
 	<insert id="addLogin" parameterType= "login">
		insert into login (lname,lsex,lpwd)
		values (#{lname},#{lsex},#{tpwd})
	</insert>
	
    //删除 根据编号删除入参为int的login对象 没有结果集
	<delete id="deleteLogin" parameterType= "int">
		delete from login where lid=#{lid}
	</delete>
	
    //修改入参类型为login型的login对象
	<update id="updateLogin" parameterType= "login">
		update login set lname = #{lname},lsex=#{lsex},lpwd = #{lpwd},
		where lid = #{lid}
	</update>

而在一对一的关系中,比如学生和班级的关系中,在学生角度来看,一个学生对应一个班级,属于一对一的关系。在做全查的时候首先要把班级当做外部属性添加到学生实体类中,然后再xml文件中就需要用到resultMap结果集来映射,resultMap中的type类型写主类的,result标签可以只写主类映射不上(属性名和字段名不同的)的属性和字段,需要注意的是一对一映射用的是association标签,property属性写的是主类实体类中外部属性的成员变量名。

    <resultMap type="student" id="stu_class_Map">
	 	<result column="sid" property="sid"/>
	 	<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>

在一对多的关系中,比如学生和班级的关系中,在班级角度来看,一个班级对应多个学生,属于一对多的关系。在做全查的时候首先要把学生类当做外部属性添加到班级实体类中,然后再xml文件中就需要用到resultMap结果集来映射,resultMap中的type类型还是写主类的,而一对多的result标签必须写每个属性和字段,需要注意的是一对多映射用的是collection标签,property属性写的是主类的实体类中外部属性的成员变量名,ofType属性写的是property的实体类

    <resultMap type="banji" id="class_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="findClassAndStudent" resultMap="class_stu_Map">
	 	select * from class left join student on class.classid = student.classid
	 </select>

当然了,大家有可能会想到,多对多的关系怎么实现,然而在实际的开发过程中,我们是尽可能的避免这样的关系,解决的方式可能更多的是找一个中间实体类,转换角度来分析。以上就是用SqlMapper.xml文件来实现映射,还有一种方法是注解类型的实现方式,不管哪种方式原理都是相同的,而且各有千秋。

猜你喜欢

转载自blog.csdn.net/m0_48011056/article/details/126210447