Springboot Mybatis操作数据库

发布于:2024-10-13 ⋅ 阅读:(120) ⋅ 点赞:(0)

        Mybatis操作数据库完成增删改查

        Mapper接口

package com.wzb.MybatisExercise20240923;

import com.wzb.Pojo20240923.Emp;
import org.apache.ibatis.annotations.*;

@Mapper
public interface EmpMapper {

    // 通过Mybatis对数据库内容进行更新
    @Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, " +
            "entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} where id=#{id}")
    public void updateEmp(Emp emp);

    // 根据不同的字段对数据库进行查询
    // 注!@Select必须要有返回值,通常是返回对应属性封装的实例类
//    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time" +
//            " from emp where id=#{id}")
//    public Emp selectEmp(Integer id);

    // 发现查询的结果:deptId、createTime、updateTime是没有值的,其全部都是null
    // 原因:因为实体类的属性和数据库表查询返回的字段名不一致,无法自动封装(若一致才可以自动封装)

    // 解决方案:

    // 1.起别名
    // 在SQL语句中,对不同的列名起别名,别名和实体类属性名一样
//    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id as deptId, " +
//            "create_time as createTime, update_time as updateTime from emp where id = #{id}")
//    public Emp selectEmp(Integer id);

    // 2.结果映射
    // 通过@Results和@Result进行手动结果映射
//    @Results({@Result(column = "dept_id", property = "deptId"),
//              @Result(column = "create_time", property = "createTime"),
//              @Result(column = "update_time", property = "updateTime")
//    })
//    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time " +
//            "from emp where id = #{id}")
//    public Emp selectEmp(Integer id);


    // 3.开启驼峰命名
    // 如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射
    // 但是,非常需要注意的一点:要使用驼峰命名前提是:实体类的属性与数据库表中的字段名严格遵守驼峰命名。
    // 在application.properties中添加:mybatis.configuration.map-underscore-to-camel-case=true
    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time" +
            " from emp where id=#{id}")
    public Emp selectEmp(Integer id);

}

        测试类

package com.wzb;

import com.wzb.ConditionSelectExercise20240923.ConditionEmpMapper;
import com.wzb.MybatisExercise20240923.EmpMapper;
import com.wzb.Pojo20240923.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@SpringBootTest
class SpringbootExercise20240923ApplicationTests {

    // 通过@Mapper和@Autowired实现从IOC容器中自动注入需要的类
    @Autowired
    private EmpMapper empMapper;

    @Autowired
    private ConditionEmpMapper ce;

    // 更新数据库的函数
    @Test
    public void updateEmp() {
        Emp emp = new Emp();

        // 注:想要更改哪条数据,就直接将新的对象的id值设置成想要更改的id值
        emp.setId(19);
        emp.setUsername("songdaxia");
        emp.setPassword(null);
        emp.setName("老宋");
        emp.setImage("2.jpg");
        emp.setGender((short)1);
        emp.setJob((short)2);
        emp.setEntrydate(LocalDate.of(2012,1,1));
        emp.setCreateTime(null);
        emp.setUpdateTime(LocalDateTime.now());
        emp.setDeptId(2);

        empMapper.updateEmp(emp);
    }

    // 按照id在数据库查找的函数
//    @Test
//    public void selectEmp() {
//        Emp emp = empMapper.selectEmp(19);
//        System.out.println(emp);
//    }

    // 条件查询
    @Test
    // LocalDate.of()方法是会返回一个对应的LocalDate对象的
    public void selectEmp() {
        List<Emp> empList = ce.selectEmp("张", (short)1, LocalDate.of(2010, 1, 1),
                LocalDate.of(2020, 1, 1));
        System.out.println(empList);
    }
}

        Pojo

package com.wzb.Pojo20240923;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Short gender;
    private String image;
    private Short job;
    private LocalDate entrydate;     //LocalDate类型对应数据表中的date类型
    private Integer deptId;
    private LocalDateTime createTime;//LocalDateTime类型对应数据表中的datetime类型
    private LocalDateTime updateTime;
}

 

 

         


网站公告

今日签到

点亮在社区的每一天
去签到