MyBatis映射标签
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dvms.dao.UserDao">
....
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dvms.dao.UserDao">
<!--注册/新增用户-->
<insert id="save" parameterType="User">
insert into user (id,username,password,sex,phone,email,role) values (#{id},#{username},#{password},#{sex},#{phone},#{email},#{role})
</insert>
<!--登录验证-->
<select id="login" resultType="User">
select id,username,password,sex,phone,email,role from user
where username =#{username} and password =#{password}
</select>
<!--查询所有用户-->
<select id="findAlluser" resultType="User">
select id,username,password,sex,phone,email,role from user
</select>
<!--删除用户-->
<delete id="delete" parameterType="String">
delete from user where id=#{id}
</delete>
<!--修改用户信息-->
<!--查到要修改的用户信息-->
<select id="update" parameterType="String" resultType="User">
select id,username,password,sex,phone,email,role from user where id=#{id}
</select>
<!--修改用户信息-->
<update id="add" parameterType="User">
update user set username=#{username},password=#{password},sex=#{sex},phone=#{phone},email=#{email},role=#{role} where id=#{id}
</update>
</mapper>
在MyBatis中,输入与输出都是相对于数据库而言,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出,通过dao层的方法查询到的数据输出到pojo对象(实体类entity)中)。
1. 输入映射(往数据库输入)
parameterMap(不常用)与 parameterType(常用)
ParameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。
一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应。
2. 输出映射(从数据库输出)
resultMap与resultType(常用)
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。
resultMap表示将查询结果集中的列一一映射到bean对象的各个属性。映射的查询结果集中的列标签可以根据需要灵活变化,并且,在映射关系中,还可以通过typeHandler设置实现查询结果值的类型转换,比如布尔型与0/1的类型转换。
#{}和${}的使用
resultMap和ParameterMap书写拼写要使用#{},resultType 和parameterType类型使用${},(一般是用**#{}**)使用例子如下:
Select ID,COMMAND from Message where COMMAND=#{command}
Select ID,COMMAND from Message where COMMAND=‘${command}’
前者解析为:
Select ID,COMMAND from Message where COMMAND=?具有预编译效果
后者解析为:
Select ID,COMMAND from Message where COMMAND=段子 不具有预编译效果
在Mybatis中传递多个参数要做参数的绑定(@Param)
不写parameterType也可以运行,因为Mybatis能自动识别,但返回值类型不能不写!!
Mybatis自动识别入参对象, 传入单个map或单个对象,无需写@Param注解 如@Param(“map”) Map<String, Object> map
那么什么时候必须在mapper接口上写@Param注解呢, mapper接口中有多个参数(每个对象或参数都要加@Param注解), 或一个 String, 必须使用@Param注解,
END