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

springboot第12集:DAO功能代码

在Spring Boot中,DAO是数据访问对象的缩写,它是一种设计模式用于提供对数据库操作的抽象层。通过使用DAO模式,我们可以将数据操作与业务逻辑分离,并提供一个单独的接口来执行所有的数据库操作。

在Spring Boot中,通常使用Spring Data JPA来实现DAO。Spring Data JPA是Spring Framework的子项目之一,用于简化JPA(Java Persistence API)的开发。Spring Data JPA提供了一些默认实现,如自动生成常见的SQL查询等。

要使用DAO,首先需要创建一个DAO接口并继承自Spring Data JPA提供的CrudRepository或JpaRepository接口。然后,定义该接口所代表的实体类及其主键类型。例如:

public interface UserRepository extends JpaRepository<User, Long> {// 自定义查询方法List<User> findByLastName(String lastName);
}

在上面的示例中,UserRepository是一个DAO接口,其中User是实体类,Long是主键类型。findByLastName是一个自定义的查询方法。

最后,在Service或Controller中注入该DAO接口并调用其方法即可完成对数据库的操作。

  1. 确保com.example.app.dao.ILoginDao接口已经被定义为一个Bean并被Spring容器管理了。可以通过在该接口上加上@Component注解或者在配置文件中使用<bean>标签来将它声明为一个bean。

  2. 确保com.example.app.service.impl.LoginService类已经被Spring容器管理了。可以在该类上加上@Service注解或者在配置文件中使用<bean>标签来将它声明为一个bean。

  3. 确保在com.example.app.service.impl.LoginService类中,已经正确地注入了com.example.app.dao.ILoginDao类型的bean。可以在该字段上加上@Autowired注解或者在构造函数中进行注入。

在Spring Boot中,DAO(Data Access Object)是一种设计模式,它提供了一个抽象层来访问数据库。使用DAO模式能够将数据操作与业务逻辑分离,并提供统一的接口来执行所有的数据库操作。Spring Boot通过整合Spring Data JPA和MyBatis等ORM框架来实现DAO功能。

下面是一个使用Spring Data JPA实现DAO的示例:

1.创建一个实体类User,用来映射数据库表的字段:

@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false, unique = true)private String username;@Column(nullable = false)private String password;@Column(nullable = false)private String email;// getters and setters
}

2.创建一个继承自JpaRepository的接口UserRepository,用于定义User实体的数据访问接口:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByUsername(String username);Boolean existsByUsername(String username);Boolean existsByEmail(String email);
}

3.在Service层中使用UserRepository

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User getUserById(Long id) {return userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));}public User saveUser(User user) {return userRepository.save(user);}public void deleteUser(Long userId) {userRepository.deleteById(userId);}
}

在这个示例中,UserService类注入了一个UserRepository的实例,并使用内置的方法来实现对用户数据的增删改查操作。

4.在Controller层中调用UserService

@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User savedUser = userService.saveUser(user);return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {userService.deleteUser(id);return ResponseEntity.noContent().build();}
}

在这个示例中,UserController通过注入UserService实例来访问和操作用户数据。其中,@GetMapping@PostMapping@DeleteMapping注解分别对应HTTP GET、POST和DELETE请求,Spring Boot会自动将JSON格式的请求体解析成Java对象。

综上所述,使用DAO模式可以将数据操作与业务逻辑分离,并提供统一的接口来执行所有的数据库操作。在Spring Boot中,我们可以使用ORM框架(如Spring Data JPA和MyBatis)来实现DAO功能。

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsd"><bean id="loginDao" class="com.example.app.dao.LoginDaoImpl"/></beans>

@Autowired(required=true)注解表示该属性必须在Spring容器中找到对应的bean进行注入,如果找不到就会抛出异常。如果想要取消这个强制依赖关系,可以将required属性设置为false

DefaultResultSetHandler.instantiateCollectionPropertyIfAppropriate() 是 MyBatis 中用于实例化集合类型属性的方法。当查询语句返回多条记录时,MyBatis 会调用该方法将结果集封装到一个集合对象中,以便后续处理。

具体来说,该方法首先会检查传入参数 resultContext 是否包含集合类型属性,并且该属性为 null 或空集合。如果是,则会通过反射创建一个新的集合对象,并将其赋值给对应的属性。这个集合对象的类型由 resultMap 中定义的集合类型指定。如果 resultMap 中没有指定集合类型,则默认使用 java.util.ArrayList

需要注意的是,该方法仅在 resultType 为集合类型(例如 ListSet 等)时才会被调用。如果 resultType 是其他类型(如自定义 Java 对象),则不会调用该方法。

假设我们有一个 User 类,其中包含一个名为 orders 的属性,表示用户的订单列表:

public class User {private Integer id;private String name;private List<Order> orders;// getters and setters
}public class Order {private Integer id;private String product;private Integer quantity;// getters and setters
}

在 MyBatis 中,我们可以编写如下的查询语句来查询用户及其订单:

<select id="getUserWithOrders" resultMap="userResultMap">SELECT u.*, o.id AS order_id, o.product, o.quantityFROM user uLEFT JOIN order o ON u.id = o.user_idWHERE u.id = #{id}
</select>

这里使用了 LEFT JOIN 来将用户和订单关联起来,查询结果中可能包含多条记录。在对这个查询结果进行映射时,MyBatis 会通过以下步骤处理集合类型属性 orders

  1. userResultMap 中,我们需要使用 <collection> 元素来指定如何映射 orders 属性:

<resultMap id="userResultMap" type="User"><id property="id" column="id"/><result property="name" column="name"/><collection property="orders" ofType="Order"><id property="id" column="order_id"/><result property="product" column="product"/><result property="quantity" column="quantity"/></collection>
</resultMap>

"Initializing Spring DispatcherServlet 'dispatcherServlet'"是Spring框架在启动时输出的日志信息之一。它表示正在初始化Spring MVC中的DispatcherServlet,即Web请求的入口点。

DispatcherServlet是Spring MVC模式中的核心组件之一。它负责接收来自客户端的HTTP请求,并将请求分派到合适的控制器(Controller)进行处理。在Spring框架中,可以通过配置多个DispatcherServlet实例来处理不同URL模式的请求。

  1. 使用@Component注解:使用@Component注解可以将一个类声明为组件,并且告诉Spring容器需要将它实例化为一个bean。使用这个注解后,可以在其他组件中通过@Autowired来引用该bean。

  2. 使用@Configuration和@Bean注解:使用@Configuration注解可以将一个类声明为配置类,表示它会定义一组Bean。通过在方法上添加@Bean注解,可以将该方法返回的对象声明为一个Bean,Spring容器就会使用该方法创建并管理该Bean。

  3. 使用@Import注解:使用@Import注解可以将其他类或配置类导入到当前配置类中。通过这种方式,可以将其他Java类或配置类中定义的Bean添加到当前应用程序上下文中。

  4. 使用@Conditional注解:使用@Conditional注解可以根据条件仅仅创建某些bean。当特定条件满足时,该bean才会被创建并添加到应用程序上下文中。

  5. 使用FactoryBean接口:实现FactoryBean接口可以创建一个工厂类,用于创建其他Bean的实例。FactoryBean接口提供了标准的生命周期回调方法,因此可以控制Bean的创建过程。

注解 @SpringBootApplication 用于启动Spring Boot应用程序、@MapperScan("com.example.app.dao") 用于扫描Mybatis Mapper接口并生成代理对象、@ImportResource("classpath:applicationContext.xml") 用于加载XML配置文件。

另外,该类还继承了 SpringBootServletInitializer 并重写了它的 configure() 方法,这表明正在使用 WAR 部署方式来部署的应用程序。

在MyBatis框架中,@MapperScan("com.example.app.dao")@MapperScan("com.example.app.mapper")注解的作用是扫描指定包下的Java接口,将其注册为MyBatis的Mapper接口。

通常情况下,这两个注解没有本质上的区别,只是命名不同而已。开发者可以根据自己的实际业务需求来选择更加合适的命名方式,以方便阅读和维护代码。

需要注意的是,使用时应该确保注解中的包路径与Mapper接口所在的包路径相匹配,否则可能会导致Mapper接口无法被正确扫描和注册。

将 com.example.app.entity.Login 类型的对象强制转换为 com.alibaba.fastjson.JSONObject 类型,但是这两个类不能直接互相转换导致了异常。

要修复这个问题,需要检查代码中涉及到这两个类的部分,看看是否错误地进行了类型转换或者使用了错误的数据类型。可能需要修改代码以确保正确的类型转换才能够顺利执行。

加群联系作者vx:xiaoda0423

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

相关文章:

springboot第12集:DAO功能代码

在Spring Boot中&#xff0c;DAO是数据访问对象的缩写&#xff0c;它是一种设计模式用于提供对数据库操作的抽象层。通过使用DAO模式&#xff0c;我们可以将数据操作与业务逻辑分离&#xff0c;并提供一个单独的接口来执行所有的数据库操作。 在Spring Boot中&#xff0c;通常使…...

基于KZG多项式承诺方案的RLN

1. 引言 RLN——Rate-Limiting Nullifier为PSE团队主导的项目&#xff0c;源自&#xff1a; Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting RLN&#xff08;Rate-Limiting Nullifier&#xff09;是一种…...

《站在巨人的肩膀上学习Java》

Java从诞生距今已经有28年了&#xff0c;在这段时间里&#xff0c;随着Java版本的不断迭代&#xff0c;Java新特性的不断出现&#xff0c;使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一&#xff0c;Java一直排行在编程语言热门程度的前3名。 可想而…...

敏捷ACP.敏捷估计与规划.Mike Cohn.

第一部分 传统规划失败的原因 vs 敏捷规划有效的原因 传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题&#xff0c;传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论: ●大约2/3的项目会显著超…...

[创新工具和方法论]-01- DOE课程基础知识

文章目录 1.DOE实验设计的介绍1.1 什么是实验设计DOE?1.2 DOE的优势有哪些?1.3 如何开展DoE研究&#xff1f;步骤 2.DOE实验培训3.数据分析步骤4.实验的随机化5.偏差6.R方 相关系数假设检验 7.三因子二水平全因子设计 1.DOE实验设计的介绍 实验设计是一种安排实验和分析实验数…...

LeetCode-1033. 移动石子直到连续

题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一&#xff08;Java&#xff09; 作者&#xff1a;仲景 这题目挺难懂的&#xff0c;得画画图才能更好的理解 这也是LeetCode的尿性&#xff0c;习惯了&#xff0c;非得整这种别人看不懂的鸟语 你可以这样理解&a…...

JVM调优入门指南:掌握步骤、参数和场景

前言 作为Java开发者&#xff0c;我们经常需要优化应用的性能&#xff0c;其中JVM调优是非常重要的一部分。在本文中&#xff0c;我们将介绍JVM调优的一般步骤和方法&#xff0c;了解JVM调优参数&#xff0c;如堆大小、新生代比例、GC算法等参数的作用和配置方式&#xff0c;并…...

基于JSP+MySQL的跳蚤市场网站设计与开发

摘 要 在当今社会,网络信息已经不是什么很陌生的词汇,每天都在这个信息时代里生活着并且享受着它带来的与众不同。网络购物可以说是飞速发展的,这种购物方式逐渐的影响着人们的衣食住行。所以利用计算机实现 跳蚤市场网站设计与开发势在必行。本网站是一个校园的跳蚤市场网…...

内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络

并非为了教学&#xff0c;仅供自己记录&#xff0c;方便下次用。所以内容不会刻意花时间写的很细节详细。 1. 服务器NPS配置 NPS install安装后&#xff0c;配置文件会在其他位置&#xff0c;通过是 /etc/nps/nps.conf目录。 找到进行修改&#xff0c;主要修改的是http_proxy_p…...

ToLua框架

ToLua 是一个用于在 Unity 中为 Lua 提供 C# 语言绑定的框架。通过 ToLua&#xff0c;你可以方便地将 C# 代码暴露给 Lua 脚本&#xff0c;并在 Lua 脚本中调用 C# 类、方法和属性。 更新流程 原理&#xff1a;使用AssetBundle进行资源的更新&#xff0c;而由于lua运行时才编…...

Golang-常见数据结构Map

Map map 是一种特殊的数据结构&#xff1a;一种元素对&#xff08;pair&#xff09;的无序集合&#xff0c;pair 的一个元素是 key&#xff0c;对应的另一个元素是 value&#xff0c;所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构&#xff1a;给定 key&…...

基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

介绍tcpdump在centos中的使用方法

tcpdump是一款强大的命令行数据包分析器&#xff0c;支持多种过滤和抓包参数。下面将介绍tcpdump的常用抓包参数。当需要监控CentOS系统的网络流量或者进行网络故障排查时&#xff0c;可以使用tcpdump来捕获数据包并进行分析。 下面介绍在CentOS中使用tcpdump的方法&#xff1…...

机器学习实战:Python基于DT决策树模型进行分类预测(六)

文章目录 1 前言1.1 决策树的介绍1.2 决策树的应用 2 Scikit-learn数据集演示2.1 导入函数2.2 导入数据2.3 建模2.4 评估模型2.5 可视化决策树2.6 优化模型2.7 可视化优化模型 3 讨论 1 前言 1.1 决策树的介绍 决策树&#xff08;Decision Tree&#xff0c;DT&#xff09;是一…...

操作系统之进程同异步、互斥

引入 异步性是指&#xff0c;各并发执行的进程以各自独立的、不可预知的速度向前推进。 但是在一定的条件之下&#xff0c;需要进程按照一定的顺序去执行相关进程&#xff1a; 举例说明1&#xff1a; 举例说明2: 读进程和写进程并发地运行&#xff0c;由于并发必然导致异步性…...

你了解这2类神经性皮炎吗?常常预示着这5类疾病!

神经性皮炎属于慢性皮肤病&#xff0c;患者皮肤可出现局限性苔藓样变&#xff0c;同时伴有阵发性瘙痒。神经性皮炎易发生在颈部两侧和四肢伸侧&#xff0c;中年人是高发人群。到目前为止神经性皮炎病因还并不是很明确&#xff0c;不过一部分病人发病前常常出现精神神经方面异常…...

二叉搜索树【Java】

文章目录 二叉搜索树的性质二叉搜索树的操作遍历查找插入删除 二叉搜索树又称为二叉排序树&#xff0c;是一种具有一定性质的特殊的二叉树&#xff1b; 二叉搜索树的性质 若它的左子树不为空&#xff0c;则左子树上结点的值均小于根节点的值&#xff1b; 若它的右子树不为空&a…...

二叉树的遍历方式

文章目录 层序遍历——队列实现分析Java完整代码 先序遍历——中左右分析递归实现非递归实现——栈实现 中序遍历——左中右递归实现非递归实现——栈实现 后续遍历——左右中递归实现非递归实现——栈加标志指针实现 总结 层序遍历——队列实现 给你二叉树的根节点 root &…...

SpringCloud01

SpringCloud01 微服务入门案例 实现步骤 导入数据 实现远程调用 MapperScan("cn.itcast.order.mapper") SpringBootApplication public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}…...

SpringBoot整合Redis实现点赞、收藏功能

前言 点赞、收藏功能作为常见的社交功能&#xff0c;是众多Web应用中必不可少的功能之一。而redis作为一个基于内存的高性能key-value存储数据库&#xff0c;可以用来实现这些功能。 本文将介绍如何使用spring boot整合redis实现点赞、收藏功能&#xff0c;并提供前后端页面的…...

【Java入门合集】第一章Java概述

【Java入门合集】第一章Java概述 博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 1.理解JVM、JRE、JDK的概念&#xff1b; 2.掌握Java开发环境的搭建,环境变量的配置&#xff1b; 3.掌握Java程序的编写、编译和运行&#xff1b; 4.学会编写第一个Java程序&#x…...

Android无线调试操作说明

1.首先通过手机机蓝牙将jackpal.androidterm-1.0.70.apk(终端模拟器)传的设备上安装 链接: https://pan.baidu.com/s/151SzEgsX0b_VTWowzfUrsA?pwdrn75 提取码: rn75 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 2.打开这个终端模拟器&#xff0c;输入以下命…...

什么是 Python ?聊一聊Python程序员找工作的六大技巧

最近我一直在思考换工作的事情。因此&#xff0c;这段时间我会看一些题目&#xff0c;看一些与面试相关的内容&#xff0c;以便更好地准备面试。我认为无论你处于什么阶段&#xff0c;面试中都会有技术面试环节。无论是初级职位还是高级职位&#xff0c;都需要通过技术面试来检…...

RabbitMQ 01 概述

什么是消息队列 进行大量的远程调用时&#xff0c;传统的Http方式容易造成阻塞&#xff0c;所以引入了消息队列的概念&#xff0c;即让消息排队&#xff0c;按照队列进行消费。 它能够将发送方发送的信息放入队列中&#xff0c;当新的消息入队时&#xff0c;会通知接收方进行处…...

面经|曹操出行供需策略运营

1.自我介绍 面试官表示看了简历之后&#xff0c;表示对专业能力比较放心。想了解下对于专业能力之外&#xff0c;关于其他方面的介绍。 2.策略运营&#xff0c;除了工具之外&#xff0c;还有哪些能力是需要具备的 回答&#xff1a;主要是从做项目的维度逻辑先去回答的。 分析思…...

【Python】selenium工具

目录 1. 安装 2. 测试 3. 无头浏览器 4. 元素定位 5. 页面滑动 6. 按键、填写登录表单 7. 页面切换 Selenium是Web的自动化测试工具&#xff0c;为网站自动化测试而开发&#xff0c;Selenium可以直接运行在浏览器上&#xff0c;它支持所有主流的浏览器&#xff0c;可以接…...

实验六~Web事件处理与过滤器

1. 创建一个名为exp06的Web项目&#xff0c;编写、部署、测试一个ServletContext事件监听器。 BookBean代码 package org.example.beans;import java.io.Serializable;/*** Created with IntelliJ IDEA.* Description:* User: Li_yizYa* Date: 2023—04—29* Time: 18:39*/ Su…...

刷题4.28

1、 开闭原则软件实体&#xff08;模块&#xff0c;类&#xff0c;方法等&#xff09;应该对扩展开放&#xff0c;对修改关闭&#xff0c;即在设计一个软件系统模块&#xff08;类&#xff0c;方法&#xff09;的时候&#xff0c;应该可以在不修改原有的模块&#xff08;修改关…...

做了一年csgo搬砖项目,还清所有债务:会赚钱的人都在做这件事 !

前段時间&#xff0c;在网上看到一句话&#xff1a;有什么事情&#xff0c;比窮更可怕&#xff1f; 有人回答说&#xff1a;“又忙又窮。” 很扎心&#xff0c;却是绝大多数人的真实写照。 每天拼死拼活的996&#xff0c;你有算过你的時间值多少钱&#xff1f; 我们来算一笔…...

线性回归模型(7大模型)

线性回归模型&#xff08;7大模型&#xff09; 线性回归是人工智能领域中最常用的统计学方法之一。在许多不同的应用领域中&#xff0c;线性回归都是非常有用的&#xff0c;例如金融、医疗、社交网络、推荐系统等等。 在机器学习中&#xff0c;线性回归是最基本的模型之一&am…...

小企业网站建设哪里做得好/100个成功营销案例

http简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。。HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;HTML 文件, 图片…...

做网站编程在程序/网站的营销策略

进程间通讯( IPC&#xff1a;Inter Processes Communication ) 一. 管道(PIPE) 管道是一种特殊类型的文件&#xff0c;在应用层体现为两个打开的文件描述符。 对于管道本身而言&#xff0c;不是普通的文件&#xff0c;不属于某个文件系统&#xff0c;其只存在于内存中&#xf…...

毕设DW做网站的过程/seo优化培训机构

文章目录ABCDEF小结我怕不是傻子吧&#xff01;&#xff01;&#xff01; 分数好低呀QAQ 算了原本就是个蒟蒻。 A 这道题目的大意就是求1−n1-n1−n里面奇数的个数占1−n1-n1−n个数的多少 真SB的题目 #include<cstdio> using namespace std; int n; double a;…...

wordpress 父级 模板/百度推广业务电话

scala :::在过去的一年左右的时间里&#xff0c;Scala编程语言取得了空前的增长&#xff0c;成功地从专业的JVM语言转变为可行的Java替代方案&#xff0c;企业至少应该关注一下。 尽管在Twitter&#xff0c;The Guardian和LinkedIn的生产环境中&#xff0c;它尚未进入主流。 但…...

烟台建站模板源码/高清免费观看电视网站

1、卡方检验概述 卡方检验被誉为二十世纪科学技术所有分支中的20大发明之一,它的发明者卡尔皮尔逊是一位历史上罕见的百科全书式的学者,研究领域涵盖了生物、历史、宗教、哲学、法律。是英国著名的统计学家、生物统计学家、应用数学家,又是名副其实的历史学家、科学哲学家、…...

个人网站有什么外国广告做/免费b站在线观看人数在哪

在原有的五套主题色调上增加&#xff1a; 一、后台设置&#xff1a; 路径&#xff1a;crmeb1.5\src\pages\setting\themeStyle 例如&#xff1a;添加一个青色主题色调的 <Radio :label"6" border class"box orange">青色<i class"iconfont…...