欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis实现CRUD操作

程序员文章站 2022-07-12 22:34:41
...

1、映射器

  映射器(Mapper)是 MyBatis 最复杂、最重要的核心组件,它由一个接口加上 XML 文件(或者注解) 组成。在映射器中可以配置参数、各类的 SQL 语句、存储过程、缓存、级联等复杂的内容,并且通过简易的映射规则映射到指定的 POJO 或者其他对象上。
  在映射器的xml文件,我们需要进行大量的配置,可以完成大部分的功能:如写SQL语句实现增删查改,进行一对多、多对多的配置,进行实体类和数据库表的映射等等。

映射器的xml文件中主要包括如下几个标签:

  • select :查询语旬,可以自定义参数,返回结果集等
  • insert :插入语句,执行后返回成功个数
  • update:更新语句,执行后返回成功个数
  • delete:删除语句,执行后返回成功个数
  • sql:定义部分SQL语句片段,可以在后面引用它
  • resultMap:提供映射规则,拥有强大的功能
  • cache :给定命名空间的缓存配置
  • cache-ref :其他命名空间缓存配置的引用

2、insert

2.1、属性

Mybatis实现CRUD操作

2.2、简单应用

  parameterType属性传递的是一个JavaBean类,插入SQL的#{ }里面的字段必须是该Javabean类的属性。

<!-- 保存用户 -->
    <insert id="saveUser" parameterType="User">
        insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
    </insert>

2.3、主键回填

  我们通常对数据库表中的主键设置为自动增长或者自动生成UUID等方式,如果想要获取ID值就需要设置主键回填。

主键回填有两种方式:

第一种是设置useGeneratedKeys为true,还有说明下主键是哪个属性

<!-- 保存用户 -->
    <insert id="saveUser" useGeneratedKeys="true" parameterType="user" keyProperty="id">
        insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
    </insert>

第二种是使用last_insert_id函数

<!-- 保存用户 -->
    <insert id="saveUser" parameterType="user">
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
    </insert>

测试代码:

@Test
// 保存用户
public void Test2(){
    User user = new User();
    user.setSex("男");
    user.setUsername("小明");
    user.setAddress("揭阳");
    user.setBirthday(new Date());
    System.out.println("保存数据库前的user:" + user);
    userDao.saveUser(user);
    session.commit();
    System.out.println("保存数据库后的user:" + user);

}

结果输出:

Mybatis实现CRUD操作

3、update和delete

因为update和delete与insert都属于DML,所以update和delete的属性和insert差不多。

3.1、update简单应用

<!-- 更新用户 -->
<update id="updateUser" parameterType="user">
    update user set username=#{username},address=#{address},sex=#{sex}, birthday=#{birthday} where id=#{id}
</update>

3.2、delete简单应用

<!-- 删除用户-->
<delete id="deleteUser" parameterType="Integer">
    delete from user where id = #{id}
</delete>

4、selete语句

4.1、属性

Mybatis实现CRUD操作
Mybatis实现CRUD操作

4.2、应用一

因为select是查询语句,输出必不可少。所以最简单的就是没有参数,只有resultType

<!--配置查询所有-->
<select id="findAll" resultType="user">
    select * from user
</select>

4.3、应用二

根据id查询用户,需要参数id和输出user

<!-- 根据id查询用户 -->
<select id="findById" parameterType="Integer" resultType="user">
    select * from user where id = #{id}
</select>

4.4、应用三

<!-- 根据名称模糊查询 -->
<select id="findByName" parameterType="string" resultType="user">
    select * from user where username like #{name}
    <!-- select * from user where username like '%${value}%'-->
</select>

4.5、应用四

使用聚合函数

<!-- 获取用户的总记录条数 -->
<select id="findTotal" resultType="int">
    select count(*) from user;
</select>

4.6、应用五

如果查询是多个条件的,则需要将所有条件封装到一个Javabean类中。这里我们定义一个Javabean类QueryVo,它有一个属性是user。

<!-- 根据queryVo的条件查询用户-->
<select id="findUserByVo" parameterType="QueryVo" resultType="user">
    select * from user where username like #{user.username}
</select>

4.7、应用六

当实体类的属性和数据库的字段不一致时,我们需要使用resultMap实现映射

映射内容为:其中property为实体类的属性,column为数据库表的字段

<!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
<resultMap id="userMap" type="user">
    <!-- 主键字段的对应 -->
    <id property="id" column="id"></id>
    <!--非主键字段的对应-->
    <result property="username" column="username"></result>
    <result property="address" column="address"></result>
    <result property="sex" column="sex"></result>
    <result property="birthday" column="birthday"></result>
</resultMap>

有错误的地方敬请指出,欢迎大家评论区或者私信交流!每日持续更新Java、Python、大数据技术,请大家多多关注!

相关标签: 持久层技术