MyBatis起别名、resultMap、keyProperty
实体起别名
1.给实体类的权限定名取别名 (mybatis-config配置文件) com.lhl.demo1.Person 别名="Person" <typeAliase> <typeAlias type="实体的全类名" alia="别名"></typeAlias> </typeAliase> 2.Mapper使用实体类名 resultType="Person"
MyBatis参数绑定的底层原理
1.默认mapper文件绑定 #{xxx}
底层使用的PreparedStatement对象
使用的是SQL的?站位绑定,预编译
优点:
预编译,防止sql注入、相对效率高一点
缺点:
只能绑定数据值 sql关键字、列、非数据无法绑定
2.使用sql字符串拼接绑定参数 ${xxx}
优点:可以绑定任何内容
缺点:sql注入
将对象插入数据库后,绑定id
目的: 将insert插入的user对象,id赋值添加的id 思路: 1.发送select 序列 from dual的sql 2.通过结果集获得id 3.将id绑定在参数的urer对象的id属性中 MyBatis插入数据绑定id <insert id="insert" parameterType="实体类型"> <!--在insert语句之前,执行select序列的sql,为了给参数的id属性绑定值--> <selectKey order="BEFORE" resultType="java.lang.String" keyProperty="sql的执行结果绑定给参数的实体的那个属性 id"> select seq_user.nextval from dual
</selectKey> insert into t_user values(?,?,?) </insert>
查询关系映射
一、resultType 二、使用resultMap定义映射关系 <!-- 1.列 属性 2.最终封装的对象类型 --> <resultMap id="PersonMap" type="实体对象"> <!--id:主属性--> <id property="属性" column="列"></id> <!--其他列属性--> <result property="属性" column="列"/> <result property="name" column="name"*> </resultMap> <!--查询功能--> <select id="selectById" parameterType="java.lang.Integer" resultMap="PersonMap"> </select>