12【MyBatis注解开发】

news2024/11/23 11:35:24

文章目录

  • 三、Mybatis注解开发
    • 3.1 快速入门
      • 3.1.1 常用注解说明
      • 3.1.2 注解实现开发
    • 3.2 注解实现一对一映射
      • 3.2.1 接口
      • 3.2.2 测试类
    • 3.3 注解实现一对多映射
      • 3.2.1 接口
      • 3.2.2 测试类

三、Mybatis注解开发

3.1 快速入门

3.1.1 常用注解说明

注解功能
@Insert新增
@Update更新
@Delete删除
@Select查询
@Result结果集封装
@Results与@Result 一起使用,封装多个结果集
@One一对一结果集封装
@Many一对多结果集封装

3.1.2 注解实现开发

  • SQL语句:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `birthday` date NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (1, '张三', '1999-02-04', '男', '佛山');
INSERT INTO `user` VALUES (2, '李四', '1998-01-15', '女', '湛江');
  • 实体类:
package com.dfbz.entity;


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

import java.util.Date;
import java.util.List;

/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int  id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
}
  • dao接口:
package com.dfbz.dao;

import com.dfbz.entity.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
public interface UserDao {

    @Select("select * from user where id=#{id}")
    User findById(int id);

    @Select("select * from user")
    List<User> findAll();

    @Insert("insert into user values(null,#{username},#{birthday},#{sex},#{address})")
    void save(User user);

    @Update("update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}")
    void update(User user);

    @Delete("delete from user where id=#{id}")
    void delete(int id);
}
  • 加载配置类:

在这里插入图片描述

  • 测试类:
package com.dfbz.test;

import com.dfbz.dao.UserDao;
import com.dfbz.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.Date;
import java.util.List;

public class Demo01 {

    private SqlSessionFactoryBuilder builder;

    private SqlSessionFactory factory;

    private SqlSession session;

    private UserDao userDao;

    @Before
    public void before() throws IOException {
        builder=new SqlSessionFactoryBuilder();
        factory=builder.build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        session= factory.openSession();
        userDao=session.getMapper(UserDao.class);
    }
    @After
    public void after(){
        session.commit();
        session.close();
    }

    @Test
    public void save(){         //增加
        User user=new User();
        user.setUsername("小龙");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("广州");
        userDao.save(user);

    }
    @Test
    public void delete(){
        userDao.delete(1);
    }
    @Test
    public void update(){
        User user=new User();
        user.setId(2);
        user.setUsername("张三");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("广州");
        userDao.update(user);

    }
    @Test
    public void findById(){
        User user = userDao.findById(2);
        System.out.println(user);
    }

    @Test
    public void findAll(){
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

3.2 注解实现一对一映射

3.2.1 接口

  • Emp:
package com.dfbz.entity;

import lombok.Data;

/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
@Data
public class Emp {
    private Integer id;
    private String name;
    private Integer age;
    private String addr;
    private Double salary;

    // 一个员工属于一个部门
    private Dept dept;
}
  • Dept:
package com.dfbz.entity;

import lombok.Data;

import java.util.List;

/**
 * @author lscl
 * @version 1.0
 * @intro:
 */
@Data
public class Dept {
    private Integer id;
    private String name;
    private String location;

    // 一个部门下有多个员工
    private List<Emp> empList;
}
  • DeptDao:
package com.dfbz.dao;


import com.dfbz.entity.Dept;
import org.apache.ibatis.annotations.Select;

public interface DeptDao {

    @Select("select * from dept where id=#{id}")
    Dept findById(Integer id);
}
  • EmpDao:
package com.dfbz.dao;


import com.dfbz.entity.Dept;
import com.dfbz.entity.Emp;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;

public interface EmpDao {


    @Select("select * from emp where id=#{id}")
    @Results({
            @Result(id = true, property = "id", column = "id"),
            @Result(property = "name", column = "name"),
            @Result(property = "age", column = "age"),
            @Result(property = "addr", column = "addr"),
            @Result(property = "salary", column = "salary"),
            @Result(property = "dept", column = "dept_id", javaType = Dept.class,
                    one = @One(select = "com.dfbz.dao.DeptDao.findById",fetchType = FetchType.LAZY)
            ),

    })
    Emp findById(Integer id);
}

3.2.2 测试类

@Test
public void test1() {
    Emp emp = empDao.findById(1);
    System.out.println(emp);
}

3.3 注解实现一对多映射

3.2.1 接口

  • DeptDao:
@Select("select * from dept where id=#{id}")
@Results({
        @Result(id = true,property = "id",column = "id"),
        @Result(property = "name",column = "name"),
        @Result(property = "location",column = "location"),
        @Result(property = "empList",column = "id",javaType = List.class,
            many = @Many(select = "com.dfbz.dao.EmpDao.findByDeptId",fetchType = FetchType.LAZY)
        )
})
Dept findDeptAllById(Integer id);
  • EmpDao:
@Select("select * from emp where dept_id=#{deptId}")
List<Emp> findByDeptId(Integer deptId);

3.2.2 测试类

@Test
public void test2() {
    Dept dept = deptDao.findDeptAllById(1);
    System.out.println(dept);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创新指南|如何以STEPPS模型6招打造病毒式传播产品

从爆款产品到网络流行语&#xff0c;这种流行绝对不是依赖于运气&#xff0c;更不是神话。让人们喜欢读某些文章&#xff0c;让人们尝试某项新服务&#xff0c;甚至是投票竞选&#xff0c;这些事情的背后都有STEPPS模型的驱动&#xff0c;遵循或者仅仅应用STEPPS中的某几条&…

【毕业设计】21-基于单片机的智能恒温箱_温度报警装置设计(原理图+仿真+源代码+答辩论文+答辩PPT)

【毕业设计】21-基于单片机的智能恒温箱/温度报警装置设计&#xff08;原理图仿真源代码答辩论文答辩PPT&#xff09; 文章目录【毕业设计】21-基于单片机的智能恒温箱/温度报警装置设计&#xff08;原理图仿真源代码答辩论文答辩PPT&#xff09;任务书设计说明书摘要设计框架架…

Tomcat:servlet与servlet容器

前言 在介绍Tomcat之前&#xff0c;我们首先需要了解它的作用&#xff0c;简单的说&#xff0c;tomcat就是一个servlet容器。因此&#xff0c;本文首先从Web 应用程序开始讲起&#xff0c;逐步介绍servlet。 Web即表示网页的意思&#xff0c;它用于表示 Internet 主机上供外界访…

【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、获取定位信息 开启定位相关功能只是将定位的前提条件准备好&#xff0c;若想获得手机当前所处的位置信息&#xff0c;还要依靠下列的3种定位工具。 &#xff08;1&#xff09;定位条件器Criteria 定位条件器用于设置定位的…

如何从报表控件FastReport .NET中连接到 PostgreSQL 数据库?

FastReport.NET官方版下载 Fastreport是目前世界上主流的图表控件&#xff0c;具有超高性价比&#xff0c;以更具成本优势的价格&#xff0c;便能提供功能齐全的报表解决方案&#xff0c;连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 慧都科技是Fast Repor…

Nacos注册中心和服务消费方式(服务治理)

目录 一、服务治理介绍 什么是服务治理&#xff1f; 二、nacos简介 三、nacos实战入门 1.搭建nacos环境 2.将商品、订单、微服务注册到nacos 四、实现服务调用的负载均衡 1.什么是负载均衡 2. DiscoveryClient实现负载均衡 3.Ribbon实现负载均衡 Ribbon支持的负载…

Nacos作为配置中心详解

前言 在单体架构的时候我们可以将配置写在配置文件中&#xff0c;但有⼀个缺点就是每次修改配置都需要重启服务才能生效。 当应用程序实例比较少的时候还可以维护。如果转向微服务架构有成百上千个实例&#xff0c;每修改⼀次配置要将全部实例重启&#xff0c;不仅增加了系统的…

Spring Boot FailureAnalyzer 应用场景

Spring Boot 自定义FailureAnalyzer 今天在学习Spring Boot 源码的过程中&#xff0c;在spring.factories 文件中无意中发现了FailureAnalyzer 这个接口。由于之前没有接触过&#xff0c;今天来学习一下 FailureAnalyzer 接口的作用。 在学习FailureAnalyzer之前, 我们先看以…

Spark 3.0 - 8.ML Pipeline 之决策树原理与实战

目录 一.引言 二.决策树基础-信息熵 三.决策树的算法基础 - ID3 算法 四.ML 中决策树的构建 1.信息增益计算 2.连续属性划分 五.ML 决策树实战 1.Libsvm 数据与加载 2.StringIndexer 3.VectorIndexer 4.构建决策树与 Pipeline 5.测试与评估 6.获取决策树 六.总结…

【学习笔记67】JavaScript中的闭包

一、认识函数的过程 1. 定义 在堆内存中开辟一段内存空间(XF001)把函数体的内容&#xff0c;完全百分百的照抄一份&#xff0c;存放在内存空间中(XF001)把内存空间的地址(XF001) 赋值给函数名2. 调用 根据函数名内存储的地址 (XF001) &#xff0c;去堆内存中找到对应函数会去…

Nginx安装Openresty加载Lua代码

1、下载 VM环境&#xff1a;ubuntu 16 http://openresty.org/cn/download.html 我选择的是截图红框的那个版本&#xff0c;其他高级的版本&#xff0c;我编译的时候都会报错&#xff0c;所以选择了这个版本&#xff0c;大家编译失败的时候不要放弃&#xff0c;继续选择其他版…

【PS-8】选区

目录 矩形选框工具 先选区再按【shift】&#xff0c;正方形选区 选区的同时按【ALT】&#xff0c;从中心点选区 选区时按【shiftalt】&#xff0c;从中心点建立正方形选区 模式1&#xff1a;添加到选区 模式2&#xff1a;新选区 模式3&#xff1a; 从选区减去 模式4&am…

《C++Primer》-1-前序与基础第I部分重点

文章目录第一章 开始1. c之与其他语言的优点&#xff1f;2. c语言的组成3. 标准输入输出cin、cout4. include格式第二章 变量和基本类型1. 无符号数的使用注意2. 初始化注意事项3. 声明与定义4. 标识符的下划线规则5. &引用、取地址&、指针的区别6. 如何理解“因为引用…

Rainbow Brackets的配色修改和使用

修改配色&#xff1a;&#xff09; 敲好看内&#xff01;&#xff01; 记得每个都要改噢&#xff01; 5分别对应的是&#xff1a; 圆括号 方括号 波形括号 尖括号 6分别对应的是&#xff1a; ECB1E9 F6F0A9 78B8EF F3BBA2 A9D57E 使用方式 Ctrl 鼠标右键&#xff1a;高亮{}…

C++ Reference: Standard C++ Library reference: Containers: list: list: end

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/end/ 公有成员函数 <list> std::list::end C98 iterator end(); const_iterator end() const; C11 iterator end() noexcept; const_iterator end() const noexcept; 返回结束迭代器 返回一个指向…

企业日常公关如何抵御负面信息的入侵?

如今&#xff0c;互联网时代信息传播速度极快&#xff0c;这使得宣传工作效率倍增&#xff0c;也给企业舆情管理带来一定的挑战。舆情优化搞得好&#xff0c;企业宣传工作事半功倍&#xff0c;网络舆论走向负面的话&#xff0c;则对宣传工作非常不利&#xff0c;会导致推广效果…

Echart 柱状图,X轴斜着展示

option { color: [‘#3398DB’], tooltip: { trigger: ‘axis’, axisPointer: { // 坐标轴指示器&#xff0c;坐标轴触发有效 type: ‘shadow’ // 默认为直线&#xff0c;可选为&#xff1a;‘line’ | ‘shadow’ } }, grid: { left: ‘3%’, right: ‘4%’, bottom: ‘3%’…

go-zero服务自动收集线上问题线上实战

前言 ​ 对于pprof&#xff0c;相信熟悉go语言的程序员基本都不陌生&#xff0c;一般线上的问题都是靠它可以快速定位。但是实际项目中&#xff0c;很多时候我们为了性能都不会开启它&#xff0c;但是出了问题又要靠它来分析。好在go-zero已经帮我们很好的集成进来了&#xff…

Leu-Trp-Leu-COOH,42293-99-2

编号: 122381中文名称: 三肽Leu-Trp-Leu英文名: Leu-Trp-LeuCAS号: 42293-99-2单字母: H2N-LWL-OH三字母: H2N-Leu-Trp-Leu-COOH氨基酸个数: 3分子式: C23H34N4O4平均分子量: 430.54精确分子量: 430.26等电点(PI): 6.11pH7.0时的净电荷数: -0.02平均亲水性: -2.3333333333333疏…

[附源码]计算机毕业设计springboot环境保护宣传网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…