定义SQL操作语句
在xxxmapper中定义SQL操作语句。
注意:多参数时,可使用arg0,arg1…代表参数
插入数据
<insert id="add" parameterType="String">
insert into user(name) values(#{name})
</insert>
删除数据
<delete id="delete" parameterType="int">
delete from user where user_id=#{user_id}
</delete>
查询数据
<select id="GetAll" resultType="User">
select * from user
</select>
<select id="findById" parameterType="int" resultType="User">
select * from user where user_id=#{user_id}
</select>
修改数据
<update id="update">
update user set name=#{arg0} where user_id=#{arg1}
</update>
${}和#{}的区别
1)在预编译的时候,mybatis会${属性名}中的内容简单替换具体的属性值,PrepardStatement对象进行预编译的时候会把 #{属性名}会替换成问号;
2)#{属性名}可以防止sql注入;而${属性名}可能会引发sql注入的安全问题;
动态SQL命令
动态sql命令可以在sql命令中加入业务逻辑控制。动态sql就是程序运行的时候才对sql命令进行编译和运行。
<where>和<if>
where:动态添加where标签;
if:判断条件是否成立,如果条件成立才添加sql命令,否则不添加;
<select id="GetAll" resultType="User">
select * from user
<where>
<if test="_parameter!='' and _parameter!=null">
name=#{name}
</if>
</where>
</select>
<SQL>命令
作用:定义一个sql命令,可以被其他标签引用,可以提高sql命令的重用性。
命令格式:
<sql id="sql标识">
sql命令
</sql>
引用格式
<include refid="sql标识"></include>
例子:
<sql id="namejudge">name=#{name}</sql>
<select id="GetAll" resultType="User">
select * from user
<where>
<if test="_parameter!='' and _parameter!=null">
<include refid="namejudge"/>
</if>
</where>
</select>
Mybatis注解
使用注解,就不需要在XxxMapper.xml文件中定义sql命令。
5.1 基本注解
@Select: 定义select命令。
@Insert:定义insert命令。
@update:定义update命令。
@delete:定义delete命令。
@Param:定义参数,采用#{}的方式把@Param注解括号内的参数进行引用
/**
* 查询所有列表
* @return
*/
@Select("select * from user")
List<User> GetAll();
/**
* 根据id查询user
* @return
*/
@Select("select * from user where user_id=#{user_id}")
User findById(int user_id);
/**
* 插入数据
*
*/
@Insert("insert into user(name) values(#{name})")
void add(String name);
/**
* 更新数据
* @param name:用户名
* @param user_id:用户id
*/
@Update("update user set name=#{name} where user_id=#{user_id}")
void update(@Param(value = "name")String name,@Param(value = "user_id")int user_id);
/**
* 删除
* @param user_id
*/
@Delete("delete from user where user_id=#{user_id}")
void delete(int user_id);
定义完成后,需要mybatis配置文件中加载映射接口。
<mappers>
<mapper class="com.bc.dao.userMapper"/>
</mappers>
5.2 映射结果
@ResultType:指定结果类型
@Results:自定义结果映射
@Result:指定表的字段与实体属性的映射关系
如果查询结果的字段名与实体的属性名字相同的时候,可以不需要指定结果的类型,它会自动进行映射。
如果查询结果的字段名与实体的属性名不相同,那么就需要自定义结果映射。
/**
* 查询所有列表
* @return
*/
@Select("select * from user")
@ResultType(User.class)
// @Results({
// @Result(column = "user_id",property = "user_id"),
// @Result(column = "name",property = "name")
// })
List<User> GetAll();
@SelectKey
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题
@SelectKey(before = true|false,
keyProperty = "实体属性",
keyColumn = "主键列",
resultType = 映射结果的类型,
statement="获取主键的sql")
5.3 在注解中使用动态sql
如果需要在注解中使用动态sql,那么sql命令需要放在script中定义。
@Select("<script>"
+"select * from user"
+"<where>"
+"<if test=\"_parameter!= null and _parameter != ''\">"
+"name=#{name}"
+"</if>"
+"</where>"
+"</script>")