SSM进阶-Duubo入门demo整合MyBatis

news/2024/5/18 21:44:47/文章来源:https://blog.csdn.net/weixin_46899412/article/details/127137009

搭建入门demo

搭建Spring+SpringMVC+Dubbo入门demo

准备数据 

数据库创建demo表

create table demo
(id          bigint auto_increment    primary key,name        varchar(255) null,description text         null
);

插入数据

INSERT INTO `demo`(`id`, `name`, `description`) VALUES (1, 'demo1', 'demo1');
INSERT INTO `demo`(`id`, `name`, `description`) VALUES (2, 'demo2', 'demo2');

导入依赖

接口项目

①导入lombok依赖

        <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version></dependency>

提供者项目

①导入Spring-jdbc依赖,用来与数据库建立连接

 <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency>

②导入commons-dbcp对象池依赖,用来存储Java数据库连接对象

<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.2.2</version></dependency>

③导入mybatis依赖

        <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency>

④导入mysql驱动依赖

        <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency>

消费者项目

①导入jackson依赖,用来把对象转json

        <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency>

项目编辑

接口项目

①创建实体类

package com.agi.dto;import lombok.Data;import java.io.Serializable;
import java.util.Objects;@Data
public class DemoDTO implements Serializable {private Long id;private String name;private String description;
}

② IDemoService接口新增方法用来查询数据库中的数据

package com.agi.api;import com.agi.dto.DemoDTO;import java.util.List;public interface IDemoService {public List<DemoDTO> getDemoList();
}

提供者项目

①创建jdbc.properties,保存数据库相关数据

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm-dubbo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456789
jdbc.initialSize=0
jdbc.maxActive=20
jdbc.maxIdle=20
jdbc.minIdle=1
jdbc.maxWait=60000

②创建provider-mybatis-config.xml,配置mybatis(⭐)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.agi" /><!-- 引入配置文件 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:jdbc.properties" /></bean><!--Mybatis配置--><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><!-- 配置连接池属性 --><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- 初始化连接大小 --><property name="initialSize" value="${jdbc.initialSize}"></property><!-- 连接池最大数量 --><property name="maxActive" value="${jdbc.maxActive}"></property><!-- 连接池最大空闲 --><property name="maxIdle" value="${jdbc.maxIdle}"></property><!-- 连接池最小空闲 --><property name="minIdle" value="${jdbc.minIdle}"></property><!-- 获取连接最大等待时间 --><property name="maxWait" value="${jdbc.maxWait}"></property></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property></bean><!--mapper接口扫描包,动态的实现了dao接口可以注入到spring容器中--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入sqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--要扫描的dao包--><property name="basePackage" value="com.agi.mapper"/></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
</beans>

 ③编辑web.xml,把provider-mybatis-config.xml引入进来(⭐)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!-- Spring配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:provider*.xml</param-value></context-param><!-- Spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 防止Spring内存溢出监听器 --><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener>
</web-app>

④创建 DemoMapper接口

package com.agi.mapper;import com.agi.dto.DemoDTO;import java.util.List;public interface DemoMapper {public List<DemoDTO> getDemoList();
}

⑤在sources/mapper下创建 DemoMapper.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.agi.mapper.DemoMapper"><select id="getDemoList" resultType="com.agi.dto.DemoDTO">select *from demo</select>
</mapper>

⑥ 编辑DemoServiceImpl,添加getDemoList()方法

package com.agi.impl;import com.agi.api.IDemoService;
import com.agi.dto.DemoDTO;
import com.agi.mapper.DemoMapper;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;import java.util.List;@Service
public class DemoServiceImpl implements IDemoService {@Autowiredprivate DemoMapper demoMapper;@Overridepublic List<DemoDTO> getDemoList() {return demoMapper.getDemoList();}
}

消费者项目

①编辑consumer.xml文件,增加对象转json配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://dubbo.apache.org/schema/dubbohttp://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 定义服务消费方应用名 --><dubbo:application name="dubbo-consumer"><dubbo:parameter key="qos.port" value="22224"/></dubbo:application><!--注册中心地址--><dubbo:registry address="zookeeper://127.0.0.1:2181"/><!--指明使用的协议--><dubbo:protocol name="dubbo" port="20881"/><!--dubbo包扫描(@Refer)--><dubbo:annotation package="com.agi.controller"/><!--spring包扫描(@RequestMapping,@RestController...)--><context:component-scan base-package="com.agi.controller"/><mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"/><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/></mvc:message-converters></mvc:annotation-driven></beans>

②编辑web.xml文件,增加编码过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:consumer.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 编码过滤器 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping>
</web-app>

③编辑DemoController,增加getDemoList方法

package com.agi.controller;import com.agi.api.IDemoService;
import com.agi.dto.DemoDTO;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RequestMapping("/demo")
@RestController
public class DemoController {@Referenceprivate IDemoService demoService;@RequestMapping("/getDemoList")public List<DemoDTO> getDemoList() {List<DemoDTO> dtoList=demoService.getDemoList();return dtoList;}
}

测试 

更新web exploded(⭐)

①File -> Project Structure

启动Zookeeper

启动提供者

启动消费者

浏览器(JSON插件)测试

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库基础,看完这篇就够了!

转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/747a74ea.html你好,我是测试蔡坨坨。 对于测试同学来说,除了知道测试基础知识外,还需要掌握一些测试基本技能,主要有Linux、数据库、计算机网络等,在此之前我们已经讨论过Linux基础知识以及在实际工作中的应…

神经网络模型训练简记(一)

神经网络模型训练简记&#xff08;一&#xff09;一、概念介绍1.1人工智能、机器学习、神经网络与深度学习1.2backbone与pretrain_model1.3batch_size、learning_rate、epoch与iteration1.4模型评价指标二、官方数据集简介2.1ImageNet数据集2.2 ILSVRC竞赛2.3 MS COCO数据集2.4…

【专栏】RPC系列(实战)-低配版NameServer

公众号【离心计划】,一起离开地球表面 【RPC系列合集】 【专栏】RPC系列&#xff08;理论&#xff09;-夜的第一章 【专栏】RPC系列&#xff08;理论&#xff09;-协议与序列化 【专栏】RPC系列&#xff08;理论&#xff09;-动态代理 【专栏】RPC系列&#xff08;实战&am…

读书笔记:软件工程(4) - 软件过程模型:瀑布模型

软件过程模型 为了改变软件开发的混乱状况&#xff0c;使软件开发更加有序。 瀑布模型 又称为经典生命周期&#xff0c;它提出了一个系统的&#xff0c;顺序的软件开发方法&#xff0c;从用户需求规格说明开始&#xff0c;通过策划&#xff0c;建模&#xff0c;构建和部署的…

Easyx基本使用(三)

Easyx基本使用&#xff08;三&#xff09; ——绘制简单图形 1. 绘制点&#xff08;putpixel&#xff09; void putpixel(int x,int y,COLORREF color );x&#xff1a;点的x坐标y&#xff1a;点的y坐标color&#xff1a;点的颜色返回值&#xff1a;无 #include <easyx.h…

程序员的数学课15 递归:如何计算汉诺塔问题的移动步数?

递归是重要的程序开发思想&#xff0c;比如程序源代码缩进、树形数据结构、XML 语法、快速排序法等都有递归的影子。 那么&#xff0c;递归思维的本质到底是什么呢&#xff1f;递归的理念看似隐讳&#xff0c;实则非常清晰明了。 为了让你由浅入深地理解它&#xff0c;这一讲…

paddle 训练模型的保持和载入

模型保持中的常见问题 &#xff0c;查看官网 模型保存常见问题-使用文档-PaddlePaddle深度学习平台 一、保存载入体系简介 模型保存与载入 一、保存载入体系简介 1.1 基础API保存载入体系 飞桨框架2.1对模型与参数的保存与载入相关接口进行了梳理&#xff1a;对于训练调优场景…

2023秋招nlp笔试题-太初

单选题 浮点数的表示范围和精度取决于 浮点数的取值范围由阶码的位数决定,而浮点数的精度由尾数的位数决定 响应中断请求的条件是 A.外设提出中断; B.外设工作完成和系统允许时; C.外设工作完成和中断标记触发器为“1”时; D.CPU提出中断。 计算器浮点运算速度为85.0167PF…

Day30_路由的props配置

提出问题&#xff1a; Detail是如何得到别传给他的参数&#xff0c;以及如何简化写法。 第一种写法的props 对象式 使用的很少&#xff0c;传递的是死数据 1.index.js组件里面 2.在detail组件里面 3效果图&#xff1a; 第二种写法props 布尔值 仅限于params参数传递…

心理学考研难度 分析

全国招收心理学院校排名 高等教育评价专业机构软科发布了“2020软科中国最好学科排名”&#xff0c;心理学院校有55所上榜&#xff0c;排名前10%依次为北京师范大学、北京大学、华南师范大学、西南大学、华东师范大学、华中师范大学、上海交通大学、浙江大学、陕西师范大学、上…

内存对齐对性能的影响

计算字节数 在 Go 语言中&#xff0c;可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。 package mainimport ("fmt""unsafe" )type Args struct {num1 intnum2 int }type Flag struct {num1 int16num2 int32 }func main() {fmt.Println…

浅析axios原理与使用(包括axios的优雅写法与res的解构赋值)

目录前言一&#xff0c;什么是axios二&#xff0c;axios的基本使用2.1 不含参的axios调用2.2 含参数的axios调用三&#xff0c;axios的原理&#xff08;拦截器&#xff09;3.1 客户端与服务器之间的交互原理&#xff08;复习可略过&#xff09;3.2 浅析axios原理四&#xff0c;…

西瓜书研读——第三章 线性模型: 线性判别分析 LDA

西瓜书研读系列&#xff1a; 西瓜书研读——第三章 线性模型&#xff1a;一元线性回归 西瓜书研读——第三章 线性模型&#xff1a;多元线性回归 西瓜书研读——第三章 线性模型&#xff1a;线性几率回归&#xff08;逻辑回归&#xff09; 主要教材为西瓜书&#xff0c;结合…

K8s存储与GlusterFS实战

一、存储概述 1、共享存储机制概述 Kubernetes对于有状态的容器应用或者对数据需要持久化的应用&#xff0c;不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷&#xff0c;而且需要更加可靠的存储来保存应用产生的重要数据&#xff0c;以便容器应用在重建之后…

常见的垃圾回收机制

如何工作在某些 Java 虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就向前移动一格。 这意味着对象存储空间的分配速度特别快。Java 的"堆指针"只是简单地移动到尚未分配的区域,所以它的效率与 C++ 在栈上分配空间的效率相当垃圾回收器工作时…

将Springbooot项目部署到云服务器上运行

将Springbooot项目部署到云服务器上运行一、项目打包二、将结果jar文件上传服务器三、授予jar文件权限&#xff0c;并运行四、运行失败可能原因一、项目打包 File->Project Structure Project Settings -> Artifacts -> 点击 号 -> JAR -> From modules with d…

Linux-常见命令(三)

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接收失败&#xff0c;但我不能接收放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 find指令&…

2022-2023-1 20221318 《计算机基础和程序设计》第五周学习总结

作业信息 这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP 作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03 作业目标 学习《计算机科学概论》的第6章 《程序设计》第4章 作业正文 https://i.cnblogs.com/posts/edit;postId=1673…

JavaScript:DOM

目录 一、DOM介绍 1、节点和节点的关系 2、获取页面中的元素可以使用以下几种方式 3、鼠标点击事件 4、访问节点 5、获取元素的样式 一、DOM介绍 DOM&#xff1a;Document Object Model&#xff08;文档对象模型&#xff09; DOM是W3C组织推荐的处理可扩展标记语言的标…

数据结构线性表

目录 2.1 线性表的基本概念 2.2 线性表的顺序表示 2.3 线性表的链式表示 2.3.1 单链表 2.3.2 循环单链表 2.3.3 双向链表 2.3.4 双向循环链表 2.3.5 静态链表 牢固掌握线性表在两种存储结构下的各种基本操作&#xff0c;牢记各种算法思想 2.1 线性表的基本概念 Def&a…