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

1.6 初探JdbcTemplate操作

一、JdbcTemplate案例演示

1、创建数据库与表

(1)创建数据库

执行命令:CREATE DATABASE simonshop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
或者利用菜单方式创建数据库 - simonshop
在这里插入图片描述

打开数据库simonshop
在这里插入图片描述

(2)创建用户表

创建用户表 - t_user
在这里插入图片描述

CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(20) NOT NULL,`password` varchar(20) DEFAULT NULL,`telephone` varchar(11) DEFAULT NULL,`register_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,`popedom` int(11) DEFAULT NULL COMMENT '0:管理员;1:普通用户',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

(3)用户表添加记录

给用户表添加4条记录
在这里插入图片描述

INSERT INTO `t_user` VALUES ('1', 'admin', '12345', '15734345678', '2016-12-02 08:40:35', '0');
INSERT INTO `t_user` VALUES ('2', '郑晓红', '11111', '13956567889', '2016-12-20 09:51:43', '1');
INSERT INTO `t_user` VALUES ('3', '温志军', '22222', '13956678907', '2016-12-20 09:52:36', '1');
INSERT INTO `t_user` VALUES ('4', '涂文艳', '33333', '15890905678', '2016-12-05 09:52:56', '1');

(4)查看用户表内容

用户表 - t_user有4条记录
在这里插入图片描述

2、打开Spring项目

Spring项目 - SpringDemo
在这里插入图片描述

3、添加数据库相关依赖

在pom.xml文件里添加相关依赖
在这里插入图片描述

<!--Spring数据库支持-->                                  
<dependency>                                        <groupId>org.springframework</groupId>          <artifactId>spring-jdbc</artifactId>            <version>5.3.25</version>            
</dependency>                                       
<!--数据库驱动工具包-->                                     
<dependency>                                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>   <version>5.1.49</version>                       
</dependency>                                       
<!--数据库连接池框架-->                                     
<dependency>                                        <groupId>com.alibaba</groupId>                  <artifactId>druid</artifactId>                  <version>1.2.16</version>                       
</dependency>       

4、创建用户实体类

ORM(Object Relation Mapping)对象关系映射
用户表t_user对应的用户实体类User ,表里的字段对应实体类的属性,一条表记录对应一个实体对象
在net.hf.spring包里创建day06.bean子包,然后在子包里面创建User类
在这里插入图片描述

package net.hf.spring.day06.bean;import java.util.Date;/*** 功能:用户实体类* 作者:hf* 日期:2023年03月01日*/
public class User {private int id;private String username;private String password;private String telephone;private Date registerTime;private int popedom;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public Date getRegisterTime() {return registerTime;}public void setRegisterTime(Date registerTime) {this.registerTime = registerTime;}public int getPopedom() {return popedom;}public void setPopedom(int popedom) {this.popedom = popedom;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", telephone='" + telephone + '\'' +", registerTime=" + registerTime +", popedom=" + popedom +'}';}
}

5、创建用户数据访问接口

DAO(Data Access Object)数据访问对象
在net.hf.spring包里创建day06.dao子包,在子包里创建UserDao接口
在这里插入图片描述

package net.hf.spring.day06.dao;import net.hf.spring.day06.bean.User;import java.util.List;/*** 功能:用户数据访问接口* 作者:hf* 日期:2023年03月01日*/
public interface UserDao {int insert(User user);int deleteById(int id);int update(User user);User findById(int id);List<User> findAll();User login(String username, String password);
}

6、创建用户数据访问接口实现类

Impl - Implementation 实现
在net.hf.spring.day06.dao包里创建impl子包,然后在子包里创建UserDaoImpl类
在这里插入图片描述

package net.hf.spring.day06.dao.impl;import net.hf.spring.day06.bean.User;
import net.hf.spring.day06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;/*** 功能:用户数据访问接口实现类* 作者:hf* 日期:2023年03月01日*/
@Repository("userDao")
public class UserDaoImpl implements UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;/*** 插入用户记录** @param user* @return 插入记录数*/public int insert(User user) {// 定义字符串String strSQL = "INSERT INTO t_user (username, password, telephone, " +"register_time, popedom) VALUES (?, ?, ?, ?, ?)";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, user.getUsername(),user.getTelephone(), user.getRegisterTime(), user.getPopedom());}/*** 按编号删除用户记录** @param id* @return 删除记录数*/public int deleteById(int id) {// 定义SQL字符串String strSQL = "DELETE FROM t_user WHERE id = ?";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, id);}/*** 更新用户记录** @param user* @return 更新记录数*/public int update(User user) {// 定义SQL字符串String strSQL = "UPDATE t_user SET username = ?, password = ?, " +"telephone = ?, register_time = ?, popedom = ? WHERE id = ?";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, user.getUsername(), user.getPassword(),user.getTelephone(), user.getRegisterTime(), user.getPopedom(), user.getId());}/*** 按编号查询用户记录** @param id* @return 用户对象*/public User findById(int id) {String strSQL = "SELECT * FROM t_user WHERE id = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)@Overridepublic User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户表User user = new User();// 从结果获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return null;}}, id);}/*** 查询全部用户记录** @return 用户列表*/public List<User> findAll() {// 创建用户列表List<User> users = new ArrayList<>();// 定义SQL字符串String strSQL = "SELECT * FROM t_user";// 查询获取行列表List<Map<String, Object>> rows = jdbcTemplate.queryForList(strSQL);// 遍历行列表,生成用户列表for (Map<String, Object> row : rows) {// 创建用户对象User user = new User();// 从行获取列值设置用户对象属性user.setId((Integer) row.get("id"));user.setUsername((String) row.get("username"));user.setPassword((String) row.get("password"));user.setTelephone((String) row.get("telephone"));user.setRegisterTime((Date) row.get("register_time"));user.setPopedom((Integer) row.get("popedom"));// 将用户对象添加到用户列表users.add(user);}// 返回用户列表return null;}/*** 用户登录** @param username* @param password* @return 用户实体(null:登录失败,not null:登录成功)*/public User login(String username, String password) {String strSQL = "SELECT * FROM t_user WHERE username = ? AND password = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)public User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户对象User user = new User();// 从结果集获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return user;}}, username, password);}
}

7、创建用户服务类

在net.hf.spring.day06包里创建service子包,然后在子包里创建UserService类
在这里插入图片描述

package net.hf.spring.day06.service;import net.hf.spring.day06.bean.User;
import net.hf.spring.day06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 功能:用户服务类* 作者:hf* 日期:2023年03月07日*/@Service("userService")
public class UserService {@Autowiredprivate UserDao userDao;public int addUser(User user) {return userDao.insert(user);}public int deleteUserById(int id) {return userDao.deleteById(id);}public int updateUser(User user) {return userDao.update(user);}public User findUserById(int id) {return userDao.findById(id);}public List<User> findAllUsers() {return userDao.findAll();}public User login(String username, String password) {return userDao.login(username, password);}
}

8、创建数据库配置属性文件

在resources目录里创建数据库配置属性文件 - jdbc.properties
在这里插入图片描述

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/simonshop?useSSL=false
jdbc.username=root
jdbc.password=p@ssw0rd

注意密码要改成你安装MySQL时候设置的密码

9、创建Spring配置文件

在resources里创建Spring配置文件 - spring-config.xml
在这里插入图片描述

<?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/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描--><context:component-scan base-package="net.hf.spring.day06"/><!--声明属性占位符--><context:property-placeholder location="jdbc.properties"/><!--定义数据源Bean--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--定义JDBC模板Bean--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

10、创建用户服务测试类

在test/java目录的net.hf.spring包里创建day06.service子包,然后在子包里创建TestUserService类
在这里插入图片描述

package net.hf.spring.day06.service;import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试用户服务类* 作者:hf* 日期:2023年03月07日*/
public class TestUserService {private UserService userService; // 用户服务对象private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("spring-config.xml");// 根据名称从应用容器里获取用户服务对象userService = (UserService) context.getBean("userService");}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

(1)测试按编号查询用户方法

创建testFindUserById()方法
在这里插入图片描述

运行测试方法testFindUserById(),查看结果
在这里插入图片描述

修改测试方法里的id值,再运行,查看结果
在这里插入图片描述

在这里插入图片描述

修改测试方法,捕获异常,再运行,查看结果
在这里插入图片描述

(2)测试查询全部用户方法

创建testFindAllUsers()方法
在这里插入图片描述

在这里插入图片描述

(3)测试添加用户方法

创建testAddUser()方法
在这里插入图片描述

运行测试方法,查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

(4)测试更新用户方法

创建testUpdateUser()方法
在这里插入图片描述

运行测试方法testUpdateUser(),查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

(5)测试删除用户方法

创建testDeleteUserById()方法
在这里插入图片描述

运行测试方法testDeleteUserById(),查看结果
在这里插入图片描述

查看用户表记录,哇哈哈记录不见了
在这里插入图片描述

4、测试用户登录方法

创建testLogin()方法
在这里插入图片描述

运行测试方法testLogin(),查看结果
在这里插入图片描述

修改testLogin()方法
在这里插入图片描述

运行测试方法,查看结果
在这里插入图片描述

相关文章:

1.6 初探JdbcTemplate操作

一、JdbcTemplate案例演示 1、创建数据库与表 &#xff08;1&#xff09;创建数据库 执行命令&#xff1a;CREATE DATABASE simonshop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 或者利用菜单方式创建数据库 - simonshop 打开数据库simonshop &#x…...

为什么要用线程池?

线程池是一种管理和复用线程资源的机制&#xff0c;它由一个线程池管理器和一组工作线程组成。线程池管理器负责创建和销毁线程池&#xff0c;以及管理线程池中的工作线程。工作线程则负责执行具体的任务。 线程池的主要作用是管理和复用线程资源&#xff0c;避免了线程的频繁…...

c语言的预处理和编译

预处理 文件包含 当预处理器发现#include指令时&#xff0c;会查看后面的文件名并把文件的内容包含到当前文件中 两种写法 尖括号&#xff1a;引用的是编译器的库路径里面的头文件。 双引号&#xff1a;引用的是程序目录中相对路径中的头文件&#xff0c;如果找不到再去上面…...

网络安全必学 SQL 注入

1.1 .Sql 注入攻击原理 SQL 注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一&#xff0c;它也是目前被利用得最多的漏洞。要学会如何防御 SQL 注入&#xff0c;首先我们要学习它的原理。 针对 SQL 注入的攻击行为可描述为通过在用户可控参数中注入 SQL 语法&#x…...

Docker基础知识详解

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;文章 &#x1f96d;本文内容&am…...

腾讯、阿里入选首批“双柜台证券”,港股市场迎盛夏升温?

6月5日&#xff0c;香港交易所发布公告&#xff0c;将于6月19日在香港证券市场推出“港币&#xff0d;人民币双柜台模式”&#xff0c;当日确定有21只证券指定为双柜台证券。同时&#xff0c;港交所还表示&#xff0c;在双柜台模式推出前&#xff0c;更多证券或会被接纳并加入双…...

CentOS7 使用Docker 安装MySQL

CentOS7 使用Docker 安装MySQL Docker的相关知识本篇不会再概述&#xff0c;有疑惑的同学请自行查找相关知识。本篇只是介绍如何在CentOS7下使用Docker安装相应的镜像。 可登陆Docker官网 https://docs.docker.com 之后可以跟着官方的步骤进行安装。 clipboard.png 具体安装过…...

注解和反射复习

注解 注解&#xff1a;给程序和人看的&#xff0c;被程序读取&#xff0c;jdk5.0引用 内置注解 override:修饰方法&#xff0c;方法声明和重写父类方法&#xff0c; Deprecated:修饰&#xff0c;不推荐使用 suppressWarnings用来抑制编译时的警告,必须添加一个或多个参数s…...

RocketMQ的demo代码

下面是一个使用Java实现的RocketMQ示例代码&#xff0c;用于发送和消费消息&#xff1a; 首先&#xff0c;您需要下载并安装RocketMQ&#xff0c;并启动NameServer和Broker。 接下来&#xff0c;您可以使用以下示例代码来发送和消费消息&#xff1a; Producer.java文件&…...

C++ 连接、操作postgreSQL(基于libpq库)

C++ 连接postgreSQL(基于libpq库) 1.环境2.数据库操作2.1. c++ 连接数据库2.2. c++ 删除数据库属性表内容2.3. c++ 插入数据库属性表内容2.4 c++ 关闭数据库1.环境 使用libpq库来链接postgresql数据库,主要用到的头文件是这个: #include "libpq-fe.h"2.数据库操…...

Node.js技术简介及其在Web开发中的应用

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;使得JavaScript能够在服务器端运行。Node.js采用事件驱动、非阻塞I/O模型&#xff0c;能够处理大量并发请求&#xff0c;非常适合处理I/O密集型的应用程序。本文将介绍Node.js的特点、优势以及在Web开发中的应…...

时间序列分析:原理与MATLAB实现

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 1. 时间序列分析简介 2. 自回归模型(AR) 2.1. 参数估计 2.2. MATLAB实现...

mysql排序之if(isnull(字段名),0,1),字段名 或者 if(isnull(字段名),1,0),字段名

mysql排序之if(isnull(字段名),0,1),字段名 或者 if(isnull(字段名),1,0),字段名 默认情况下&#xff0c;MySQL将null算作最小值。如果想要手动指定null的顺序&#xff0c;可以这样处理&#xff1a; 将null强制放在最前 //null, null, 1,2,3,4&#xff08;默认就是这样&#…...

华为OD机试真题 Java 实现【递增字符串】【2023Q1 200分】,附详细解题思路

一、题目描述 定义字符串完全由“A’和B"组成,当然也可以全是"A"或全是"B。如果字符串从前往后都是以字典序排列的,那么我们称之为严格递增字符串。 给出一个字符串5,允许修改字符串中的任意字符,即可以将任何的"A"修改成"B,也可以将…...

合并文件解决HiveServer2内存溢出方案

一、文件过多导致HiveServer2内存溢出 1.1查看表文件个数 desc formatted yanyu.tmp• 表文件数量为6522102 1.2查看表文件信息 hadoop fs -ls warehouse/yanyu.db/tmp• 分区为string 类型的time字段&#xff0c;分了2001个区。 1.3.查看某个分区下的文件个数为10000个 …...

韧性数据安全体系缘起与三个目标 |CEO专栏

今年4月&#xff0c;美创科技在数据安全领域的新探索——“韧性”数据安全防护体系框架正式发布亮相。 为帮您更深入了解“韧性数据安全”&#xff0c;我们特别推出专栏“构建适应性进化的韧性数据安全体系”&#xff0c;CEO柳遵梁亲自执笔&#xff0c;进行系列解读分享。 首期…...

华为OD机试真题 Java 实现【火车进站】【牛客练习题】

一、题目描述 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。 要求输出所有火车出站的方案,以字典序排序输出。 …...

c#快速入门(下)

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;Inline和lambda委托和lambda &#x1f449;&#x1f…...

基于深度学习的目标姿态检测方法_kaic

目录 摘要 第1章 引言 1.1 研究背景和意义 1.2 国内外研究现状 1.3 主要内容 第2章 单目相机的目标姿态检测技术 2.1单目相机的工作原理 2.2目标姿态检测 2.3已有的目标姿态检测方法及其局限性 2.4本章总结 第3章 构建数据集 3.1 数据集来源 3.2数据集标注 3.3数据集分析 3.4本…...

Pycharm设置Python每个文件开头自定义模板(带上声明字符编码、作者名、时间等)

Pycharm设置地址&#xff1a; 在File---settings---Editor---File and Code Templates---Python script 脚本里添加: 模板声明设置参考&#xff1a; # ---encoding:utf-8--- # Time : ${DATE} ${HOUR}:${MINUTE} # Author : 作者名 # Email &#xff1a;你的邮箱 # Sit…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...