使用注解的方式定义SQL语句 与 使用Mybatis映射文件xml的方式定义SQL语句的具体实现

1.使用注解的方式定义SQL语句:

Controller层:

java 复制代码
@RequestMapping("/emps")
@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    //根据ID修改员工数据
    @PutMapping()
    public Result update(@RequestBody Emp emp){
        log.info("修改员工数据:{}", emp);
        empService.update(emp);
        return Result.success();
    }
}

Service接口层:

java 复制代码
public interface EmpService {
    /**
     * 修改员工数据
     */
    void update(Emp emp);
}

Service接口实现层:

java 复制代码
@Service
public class EmpServiceImpl implements EmpService{
    @Autowired
    private EmpMapper empMapper;

    @Override
    public void update(Emp emp) {
        empMapper.update(emp.getUsername(), emp.getName(), emp.getGender(), emp.getImage(), emp.getId(), LocalDateTime.now());
    }
}

Mapper接口层:

java 复制代码
@Mapper
public interface EmpMapper {
    /**
     * 根据ID修改员工数据
     */
    @Update("update emp set username = #{username},name = #{name},gender=#{gender},update_Time=#{updateTime} ,image=#{image} where id=#{id}")
    void update(String username, String name, Short gender, String image, Integer id, LocalDateTime updateTime);
}
2.使用Mybatis映射文件xml的方式:

Controller层(相同):

java 复制代码
@RequestMapping("/emps")
@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    //根据ID修改员工数据
    @PutMapping()
    public Result update(@RequestBody Emp emp){
        log.info("修改员工数据:{}", emp);
        empService.update(emp);
        return Result.success();
    }
}
java 复制代码
public interface EmpService {
    /**
     * 修改员工数据
     */
    void update(Emp emp);
}

Service接口实现类:

java 复制代码
@Service
public class EmpServiceImpl implements EmpService{
    @Autowired
    private EmpMapper empMapper;

    //使用映射文件xml
    @Override
    public void update(Emp emp){
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.update(emp);
    }
}

Mapper层:

java 复制代码
@Mapper
public interface EmpMapper {

    //使用映射文件xml的方式
    void update(Emp emp);
}

Mapper映射文件xml:

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">

    <!--    更新员工数据-->
    <update id="update">
        update emp
        <set>
            <if test="username != null and username != ''">
                username = #{username},
            </if>
            <if test="password!=null and passwprd !=''">
                password = #{passwprd},
            </if>
            <if test="name!=null and name!=''">
                name =#{name},
            </if>
            <if test="gender!=null">
                gender=#{gender},
            </if>
            <if test="image !=null and image !=''">
                image =#{image},
            </if>
            <if test="job!=null">
                job=#{job},
            </if>
            <if test="entrydate!=null">
                entrydate=#{entrydate},
            </if>
            <if test="deptId!=null">
                dept_id=#{deptId},
            </if>
            <if test="updateTime!=null">
                update_time =#{updateTime}
            </if>
        </set>
        where id=#{id}
    </update>
</mapper>

Mapper映射文件xml的路径要求如下:

  1. 放在项目的resources目录下。
  2. 在resources目录下创建一个与mapper接口全名相同的包名,例如:com.example.mapper。
  3. 在创建的包名目录下,创建一个与mapper接口同名的文件,例如:UserMapper.xml。
  4. 将mapper映射文件中的内容按照MyBatis的语法编写。
相关推荐
AI进化营-智能译站16 分钟前
ROS2 C++开发系列17-多线程驱动多传感器|chrono高精度计时实现机器人同步控制
java·c++·ai·机器人
qq_589568104 小时前
springbootweb案例,出现访问 http://localhost:8080/list 一直处于浏览器运转阶段
java·网络协议·http·list·springboot
JAVA面经实录9174 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
AC赳赳老秦4 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
FYKJ_20105 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
kumat5 小时前
分享-搭建个人系统 MySelfSys
sql·系统
书源丶6 小时前
三十六、File 类与 IO 流基础——文件操作的「第一步」
java
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
DFT计算杂谈7 小时前
wannier90 参数详解大全
java·前端·css·html·css3