4.1 Mybatis的CRUD操作

4.1.1 前提要求

使用要求:

1、 持久层接口和持久层接口的映射配置必须在相同的包下
2、持久层映射配置中mapper标签的namespace属性取值必须是持久层接口的全限定类名
3、SQL语句的配置标签<select>,<insert>,<delete>,<update>的id属性必须和持久层接口的方法名相同

4.1.2 SELECT

  • 配置文件

    1
    2
    3
    4
    <!-- 根据id查询 --> 
    <select id="findById" resultType="com.itheima.domain.User" parameterType="int">
    select * from user where id = #{uid}
    </select>

    细节:

    resultType属性: 用于指定结果集的类型。
    parameterType属性:用于指定传入参数的类型。
    sql语句中使用#{}字符: 它代表占位符,相当于原来jdbc部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。

    #{}中内容的写法: 由于数据类型是基本类型,所以此处可以随意写。

4.1.2 SAVE

  • 配置文件

    1
    2
    3
    4
    <!-- 保存用户--> 
    <insert id="saveUser" parameterType="com.itheima.domain.User">
    insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>

    细节:

    parameterType属性: 代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。
    #{}中内容的写法: 由于我们保存方法的参数是 一个User对象,此处要写User对象中的属性名称。 它用的是ognl表达式。

    ognl表达式: 它是apache提供的一种表达式语言,全称是: Object Graphic Navigation Language 对象图导航语言 它是按照一定的语法格式来获取数据的。 语法格式就是使用 #{对象.对象}的方式。
    #{user.username}它会先去找user对象,然后在user对象中找到username属性,并调用getUsername()方法把值取出来。但是我们在parameterType属性上指定了实体类名称,所以可以省略user.而直接写username。

  • 扩展:SAVE返回ID

  新增用户后,同时还要返回当前新增用户的id值,因为id是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长auto_increment的值返回。

1
2
3
4
5
6
7
8
<insert id="saveUser" parameterType="USER"> 
<!-- 配置保存时获取插入的id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id();
<!-- last_insert_id()是MySQL内置函数,意为获取最后一次插入的ID,此ID必须为自增长类型 -->
</selectKey>
insert into user(username, birthday, sex, address) values(#{username}, #{birthday}, #{sex}, #{address})
</insert>

4.1.3 UPDATE

  • 配置文件

    1
    2
    3
    4
    5
    <!-- 更新用户 --> 
    <update id="updateUser" parameterType="com.itheima.domain.User">
    update user set username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address}
    where id=#{id}
    </update>

4.1.4 DELETE

  • 配置文件

    1
    2
    3
    4
    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
    delete from user where id = #{uid}
    </delete>