id column = " id " property = " id_ " /> < result property = " userName " column = " user_Name_ " /> < result property = " userAge " column = " user_age " /> _@select">
赞
踩
单个参数直接传递
User selectUsers(int id);
多个参数使用@Param(“id”)
绑定
User selectUsers(@Param(“id”)int id,@Param(“name”)String name);
<select id="selectUsers" resultType="User">
select id, username, password from users where id = #{id} and username=#{name}
</select>
如果传入一个复杂的对象,就需要使用 parameterType 参数进行类型定义,例如:
void insertUser(User user);
<insert id="insertUser" parameterType="User">
insert into users (id, username, password)
values (#{id}, #{username}, #{password})
</insert>
注意:MyBatis 排序时使用 order by 动态参数时需要注意,用$而不是#
<insert id="唯一标识" useGeneratedKeys="把新增加的主键赋值到自己定义的
keyProperty " keyProperty=“ 接收主键的属性 parameterType="参数类型">
insert into
user(userName,userAge)values(#{userName},#{userAge})
</insert>
<delete id="唯一标识" parameterType="参数类型">
delete from ts_user where userId = #{id}
</delete>
<update id="唯一标识" parameterType="参数类型">
update ts_user set userName = #{userName},userAge = #{userAge}
where userId = #{userId};
</update>
<select id="唯一标识" resultType="返回结果集类型">
select * from ts_user where id= #{id}
</select>
//返回简单基本类型
<select id="findUserInfoCount" resultType="int">
select count(*) from userInfo
</select>
如果表中的名和类中的属性名完全相同,mybatis会自动将查询结果封装到对象中
如果java中使用标准驼峰命名,数据库中使用下划线连接命名,可以开始全局设置自动转换
<setting name="mapUnderscoreToCamelCase" value="true"/>
<select id="findUserInfoById" parameterType="int"resultType="User">
select * from t_user where id=#{id}
</select>
//定义resultMap
<resultMap id="userResultMap" type="User">
<id column="id" property="id_"/>
<result property="userName" column="user_Name_" />
<result property="userAge" column="user_age" />
</resultMap>
//使用resultMap
<select id="findUserInfoResultMap" resultMap="userResultMap">
SELECT id id_,user_name,user_age FROM t_user
</select>
resultMap 元素中 association , collection 元素. Collection 关联元素处理一对多关联。
将一个多表关联查询拆分为多次查询,先查询主表数据,然后查询关联表数据.
<association property="dept" javaType="Dept" select="findDeptByID" column="dept_id"> </association
@Select("select * from t_emp")
@Results(id = "empMap",value = {
@Result(column = "emp_id",property = "empId",id = true), @Result(column = "emp_name",property = "empName"), @Result(column = "emp_tel",property = "empTel"), @Result(column = "emp_education",property = "empEducation"), @Result(column = "emp_birthday",property = "empBirthday")
})
List<Employee> getAll()
@Select("select * from t_emp where emp_id=#{empId}")
@ResultMap(value="empMap")
Employee getById(@Param("empId") Integer empId);
@Insert("insert into t_emp (emp_id, emp_name, emp_tel, " +
" emp_education, emp_birthday, fk_dept_id" +
" )" values (#{empId}, #{empName}, #{empTel}, " +
" #{empEducation}, #{empBirthday}, #{fkDeptId}" +
" )")
int insert(Employee record);
@Delete("delete from t_emp where emp_id=#{empId}")
int deleteByPrimaryKey(@Param("empId") Integer empId)
MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。 如果你有使用JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态 SQL 可以彻底处理这种问题。
MyBatis 中用于实现动态 SQL 的元素主要有:
If、where、trim、set、choose (when, otherwise)、foreach
if标签可以对传入的条件进行判断
对于查询条件个数不确定的情况,可使用元素。如下:
<select id="id" parameterType="" resultType="">
SELECT xxx... FROM table t
<where>
<if test="name != null & name!=’’ ">
name like #{name}
</if>
<if test="age!=null & age > 0">
AND age> #{value}
</if>
</where>
</select>
元素会进行判断,如果它包含的标签中有返回值的话,它就插入一个‘where’。
此外,如果标签返回的内容是以 AND 或 OR 开头,它会剔除掉 AND 或 OR
在 mybatis 中的 xml 文件中,存在一些特殊的符号,比如:<、>、"、&、<>等,正常书写 mybatis 会报错,需要对这些符号进行转义。具体转义如下所示:
特殊字符 转义字符
< <
> >
" "
' '
& &
```除了可以使用上述转义字符外,还可以使用来包裹特殊字符。如下所示
```xml
<if test="id != null">
AND <![CDATA[ id <> #{id} ]]>
</if>
<![CDATA[ ]]>
是 XML 语法。在 CDATA 内部的所有内容都会被解析器忽略。但是有个问题那就是 <if> </if> <where> </where> <choose> </choose> <trim> </trim>
等这些标签都不会被解析,所以我们只把有特殊字符的语句放在<![CDATA[ ]]>
尽量缩小<![CDATA[ ]]>
的范围
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。