当前位置: 首页 > article >正文

Springboot Mybatis操作数据库

        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;
}

 

 

         


http://www.kler.cn/a/322199.html

相关文章:

  • 高精度图像尺寸测量仪(闪测仪)测量内径深度
  • CSS的弹性盒子模型(Flex box)
  • 【Hive】学习路线:架构、运维、Hsql实战、源码分析
  • 如何将Excel表格嵌入Web网页在线预览、编辑并保存到自己服务器上?
  • 大数据毕业设计选题推荐-安顺旅游景点数据分析系统-Hive-Hadoop-Spark
  • docker-compose up -d 和 docker run -d your_image_name 的区别
  • 原生app云打包,更换图标,和名称。PDA的安装正式包
  • web入门
  • Codeforces Round 972 (Div. 2) A~E
  • 事务 Atomicity Consistency Isolation Durability
  • 七大机器学习常用库一次讲清楚(TensorFlow|Scikit-Learn|NumPy|Keras|PyTorch|LightGBM||NLTK)
  • 局域网广域网,IP地址和端口号,TCP/IP 4层协议,协议的封装和分用
  • html+css(如何用css做出京东页面,静态版)
  • SQL关键字的优先级执行顺序:深入理解SQL查询的构造
  • Debian安装mysql遇到的问题解决及yum源配置
  • 常用前端框架对比和选择
  • Mac pnpm安装
  • 爬虫小案例:爬取豆瓣网TOP250的电影信息(内含面相对象源码、及详细教学)
  • 【中级通信工程师】终端与业务(八):市场营销战略
  • TikTok直播:选择TK直播盒子还是专线节点?