java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis查询修改删除

MyBatis查询 、修改 、删除操作示例代码

作者:苏少朋

MyBatis 作为一款灵活的持久层框架,提供了直接编写 SQL 语句的能力,避免了其他 ORM 框架可能带来的性能和功能限制,本文介绍 MyBatis 中如何高效执行这三种操作,并通过代码示例展示最佳实践,感兴趣的朋友一起看看吧

前言:

在现代应用开发中,数据库操作是核心环节。MyBatis 作为一款灵活的持久层框架,提供了直接编写 SQL 语句的能力,避免了其他 ORM 框架可能带来的性能和功能限制。MyBatis 的查询、修改和删除操作是开发者必须掌握的基本技能。这些操作不仅影响数据的获取、更新和删除,还直接关系到应用的性能与安全性。接下来,我们将简要介绍 MyBatis 中如何高效执行这三种操作,并通过代码示例展示最佳实践

MyBatis搭建与配置

MyBatis搭建与配置

Sql配置代码解读

<insert id="insertAdmin" parameterType="admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
    insert into admin (account,password,gender) values (#{account},#{password},#{gender})
</insert>
 <select id="findAdminById" parameterType="int" resultType="Admin">
      select * from admin where id = #{id}
 </select>

id —>唯一标识(接口中方法名)

parameterType=“参数类型"

useGeneratedKeys ="true" 返回自增主键

keyProperty="id" 定义接收属性

keyColumn="id" 定义主键列

以上三个设置,数据库添加数据等,会向后端返回该数据行的主键值

resultType="返回结果集类型"

参数传递

单参数传递

Admin selectAdmins(int id);

多参数传递

多个参数使用@Param(“id”)绑定

    //多个参数的传递
    Admin login(@Param("acc") String account, @Param("pass") String password);

复杂参数传递

 如果传入一个复杂的对象,就需要使用 parameterType 参数进行类型定义,例如: void insertAdmin(Admin admin)

Admin login1(Admin admin);

单表增删改查

    <!-- 修改-->
    <update id="updateAdmin" parameterType="admin">
        update admin set account = #{account},password = #{password},gender = #{gender} where id = #{id}
    </update>
    <!-- 添加-->
    <insert id="insertAdmin" parameterType="admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into admin (account,password,gender) values (#{account},#{password},#{gender})
    </insert>
    <!-- 查询-->
    <select id="findAdminById" parameterType="int" resultType="Admin">
      select * from admin where id = #{id}
    </select>
    <!-- 删除-->
    <delete id="deleteAdmin" parameterType="int">
        delete from admin where id = #{id}
    </delete>

#{}和${}的区别

#{}   占位符,采用预编译的方式向sql中传值,可以防止sql注入,如果我们往SQL传值,使用#{}

${}    是将内容直接拼接到sql语句中,一般不用与向sql中传值,一般用于向SQL中动态的传递列名

区别:

resultMap

定义resultMap

    <resultMap id="majorMap" type="major">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
    </resultMap>

驼峰命名与下划线映射关系

为什么要解决驼峰命名与下划线映射关系?

      因为数据库中命名一般为Student_Id  Java中命名一般为StudentId所以为了我们方便操作,我们通过设置来解决问题

解决:在mybatis配置文件中设置如下代码

    <!--   MyBatis配置文件-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 打印日志 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>  <!-- 解决驼峰问题 -->
    </settings>

多表操作 association 关联数据表  关联查询

方法一:在数据库中一次查出所有数据

    <!--对关联查询到的学生信息进行自定义映射关系-->
    <resultMap id="studentMap" type="student">
        <id column="id" property="id"></id>
        <result column="num" property="num"></result>
        <result column="name" property="name"></result>
        <result column="gender" property="gender"></result>
        <!--映射关联数据 专业名称-->
        <association property="major" javaType="major">
            <result column="mname" property="name"></result>
        </association>
    </resultMap>
    <!--关联查询第一种-->
    <select id="findStudent" resultMap="studentMap">
         select s.id,
                s.num,
                s.name,
                s.gender,
                m.name mname
                from student s inner join major m on s.majorid = m.id where s.id = #{id}
    </select>

注:association 关联数据表  

property="major" ---->student对象中的major成员变量

javaType="major"----->major对象

解释:我们在Student类中创建Major变量,从而将Major类和Student类连接.我们从后端查询出来的Major类中数据,我们可直接封装在Major对象中(简单理解:其实也就是给Major变量赋值)

嵌套查询

方法二:数据库分次查询

    <!-- 关联查询第二种-->
    <resultMap id="studentMap1" type="student">
        <id column="id" property="id"></id>
        <result column="num" property="num"></result>
        <result column="name" property="name"></result>
        <result column="gender" property="gender"></result>
        <!-- 封装关联查询-->
        <association property="major" javaType="major" select="findMajor" column="majorid">
        </association>
    </resultMap>
    <select id="findStudentById" resultMap="studentMap1">
        select id,num,name,gender,majorid from student where id = #{id}
    </select>
    <!-- 嵌套查询学生关联的专业-->
    <select id="findMajor" resultType="major">
        select name from major where id = #{majorid}
    </select>

collection关联数据表

collection用来查询一个集合

关联查询

    <resultMap id="majorMap" type="major">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <collection property="students" javaType="list" ofType="student">
            <result column="num" property="num"></result>
            <result column="sname" property="name"></result>
        </collection>
    </resultMap>
    <select id="findMajorById" parameterType="int" resultMap="majorMap">
         select
           m.id,
           m.name,
           s.num,
           s.name sname
         from major m inner join student s on m.id = s.majorid where m.id = #{id}
    </select>

嵌套查询

    <resultMap id="majorMap1" type="major">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <collection property="students" javaType="list" ofType="student" select="findStudents" column="id"></collection>
    </resultMap>
    <select id="findMajors1" resultMap="majorMap1">
        select id,name  from major
    </select>
    <select id="findStudents" resultType="student">
        select num,name from student where majorid = #{id}
    </select>

代码解读

Collection和Association区别

Collection(集合)

 Association(关联关系)

总结

注解方式

使用场景:简单的sql一般适合使用注解查询  例如:用户信息查询,添加用户,删除单个用户等

代码演示:

@Delete("delete from t_emp where emp_id=#{empId}")
int deleteByPrimaryKey(@Param("empId") Integer empId);

动态sql

出现原因:因为业务需求出现用户存数据可能只存 姓名 不存 性别 或者不存任何数据,sql语句就需要判断书写.

第一:where 与 if 标签

if test 属性条件成立 执行if标签体,不成立就不执行

where标签 当where标签 if语句有条件成立时,就会动态添加where关键字,还可以删除where后面紧跟的关键字(例如:and,or)

    <select id="teachers1" resultType="teacher">
        SELECT * FROM teacher
        <where>
            <if test="num!=0">
               and num = #{num}
            </if>
            <if test="name!=null">
              and  name  = #{name}
            </if>
        </where>
    </select>

第二:trim标签

参数:

第三:choose标签

注:choose标签选择标签,标签中必须有选择对象,也就是必须有<when>标签

    <select id="teachers" resultType="teacher">
        SELECT * FROM teacher
        <trim prefix="where" prefixOverrides="and|or">
            <choose>
                <when test="name!=null">
                    name = #{name}
                </when>
                <otherwise>
                    name = '苏老师'
                </otherwise>
            </choose>
        </trim>
    </select>

<when> --->当test中条件满足这执行,不满足执行<otherwise>标签中 和 if else差不多

第四:set标签

<set>标签可以在变量之间添加 逗号(,)  

    <update id="updateTeacher" parameterType="teacher">
        update teacher
        <set>
            <if test="num!=0">
                num = #{num},
            </if>
            <if test="name!=null">
                name = #{name}
            </if>
            <if test="gender!=null">
                gender = #{gender}
            </if>
            where id = #{id}
        </set>
    </update>

 第五:foreach标签

1. collection

2. item

3. index

4. open

5. close

6. separator

代码演示:

    <delete id="deleteTeacher" parameterType="list">
        DELETE FROM teacher
        WHERE id IN
        <foreach collection="list" item="ids" open="(" separator="," close=")">
            #{ids}
        </foreach>
    </delete>

到此这篇关于MyBatis查询 修改 删除操作的文章就介绍到这了,更多相关MyBatis查询 修改 删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文