Mybatis注解和配置SQL操作定义

定义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>")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值