mapper代理开发(掌握)
一、开发人员需要完成的任务:
mapper.xml映射文件和mapper.java
二、开发规范:
在mapper.xml中namespace等于mapper接口地址;
mapper.java接口中的方法名和mapper.xml中statement的id一致;
mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致;
mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
三、代码示例
1、mapper.java示例
//根据id查询用户信息
public User findUserById(int id) throws Exception;
2、mapper.xml示例
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM USER WHERE id=#{value}
</select>
四、在SqlMapConfig.xml中加载mapper.xml
<!-- 通过mapper接口加载单个 映射文件,遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中
上边规范的前提是:使用的是mapper代理方法
-->
<mappers>
<mapper class="com.xudan.mybatis.mapper.UserMapper"/>
</mappers>
或者是
<mappers>
<!-- 批量加载mapper
指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<package name="com.xudan.mybatis.mapper"/>
</mappers>
以上是MyBatis Mapper代理使用方法详解
五、Mybatis增删改查mapper文件写法详解
1、插入
<mapper namespace="需要实现接口的全类名">
<insert id="需要实现的接口里的方法名" parameterType="方法参数类型,如果是对象要写全类名">
INSERT sql命令(命令里通过#{}获取对象属性)
<!--注意属性名区分大小写 -->
</insert>
<mapper>
例如:
<mapper namespace="com.xudan.dao.UserDao">
<insert id="addUser" parameterType="com.xudan.domian.User">
INSERT INTO USERS(USERNAME,PASSWORD) VALUES(#{username},#{password})
</insert>
</mapper>
2、查询
<select id="方法名" parameterType="方法参数类型" resultType="方法返回值类型,全类名">
SELECT 表里字段名 AS 结果字段名 FROM 表名 WHERE 条件
<!--注意:结果字段名与属性名保持一致,区分大小写-->
</select>
例如
<mapper namespace="com.xudan.mybatis.dao.IUserDao">
<!-- 查询所有用户信息
id:跟关联接口中的方法名一致
parameterType:跟关联接口中的参数列表一致,要求方法中只能有0或者1个参数
resultType:跟关联接口中的返回值类型一致,要求:实体类中的属性名和对应的表字段名写法完全一致
注意1:
1. resultType:对于自定义对象来说,要求:实体类中的属性名和对应的表字段名写法完全一致
(支持String,基本数据类型,包装类,普通的Map,普通的List)
2. parameterMap/resultMap:主要是对于我们的自定义对象,要求实体类的属性名可以和对应的表字段名写法不一致
注意2:不管是输入映射(parameterType/Map)还是输出映射(resultType/resultMap),对于List<T>和<T>写法一致,都是<T>.
举例:List<User>或者User,输入输出中都写User就可以了
注意3:
<select>:支持输入和输出,输出映射是必须的;
<insert><update><delete>:支持输入映射,不支持输出映射-->
<!-- 定义一个resultMap,可以用来封装对象(数据字段名和对象属性名可以不一致)
id:供<select>调用,type:返回的实际类型-->
<resultMap id="findUserResultMap" type="User">
<!-- 配置主键id
property:类对应的属性名
column:表对应的字段名
javaType:类对应的属性名的类型,一般忽略
jdbcType:表对应的字段名的类型,jdbc封装后提供,一般忽略-->
<id property="userId" column="user_id"></id>
<result property="account" column="account"></result>
<result property="password" column="password"></result>
<result property="delFlag" column="del_flag"></result>
</resultMap>
<select id="findUsers" resultMap="findUserResultMap">
select * from users;
</select>
</mapper>
3、修改
与前面插入除了sql语句基本一致
<update id="updateUser" parameterType="com.xudan.domain.User" >
UPDATE USERS SET USERNAME=#{username},P_PASSWORD=#{password} WHERE user_id=#{id}
<!-- 属性字段名区分大小写 -->
</update>
4、删除
与前面插入除了sql语句基本一致
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM USERS WHERE user_id=#{id}
</delete>