数据持久层框架Mybatis

article/2025/8/11 0:31:17

目录

1.软件开发3层架构

2.什么是框架?

3.传统JDBC开发的不足?

4.什么是Mybatis?

5.Mybatis入门案例?

6.Mybatis增删改查案例?

7.Mybatis代理实现DAO开发?

8.Mybatis高级映射


1.软件开发3层架构

 软件开发的3层架构是Java提出分层开发(经典开发)模式,即将软件开发分为表示层、业务逻辑层、数据持久层开发,互相独立,各不影响。

表示层

  1. 由与用户进行交互的组件和容器构成(接收请求并响应请求),比如servlet。
  2. 分包:action/web/servlet。
  3. 处理表示层的框架SprintMVC/Struts2。

业务逻辑层

  1. 由业务处理的组件组成。
  2. 分包:service/biz。
  3. 处理业务逻辑层的框架Spring Framwork。

数据持久层

  1. 实现与数据库直接交互,比如jdbc。
  2. 分包:dao。
  3. 处理数据持久层的框架Mybatis/Hibernate/JdbcTemplate。

2.什么是框架?

定义

  1. 将重复性的、繁琐的内容封装起来的一套程序。
  2. 框架使开发人员能够将更多地精力放在业务的分析和理解上。

好处

  1. 简化开发,配置即可
  2. 屏蔽细节
  3. 提高开发效率

3.传统JDBC开发的不足?

在引入框架之前,我们都使用JDBC完成数据持久层的开发,但有下面几处不足:

  1. 数据库驱动注册和连接获取的硬编码问题(配置文件解决)
  2. SQL预编译时赋值和结果集封装的时候繁琐(反射解决 ORM,即对象关系映射)
  3. 频繁打开和释放连接消耗资源(连接池解决)

4.什么是Mybatis?

官网:http://www.mybatis.org/mybatis-3

  1. MyBatis 是一款优秀的持久层框架
  2. MyBatis只需要关注SQL语句、输入参数和输出结果的映射
  3. MyBatis是一个ORM框架。ORM表示对象关系映射,解决面向对象编程模型和关系型数据库模型之间的映射问题。

5.Mybatis入门案例?

步骤

  1. 准备jar包,mysql驱动包(mysql-connector-java-5.1.45-bin.jar)和Mybatis核心jar包(mybatis-3.4.5.jar)
    1. Mybatis原本是apache项目,原来被叫做 ibatis
    2. 后来移植到google code,改名为mybatis
    3. 现在在github(开源软件托管平台)脱光,官网:https://github.com/mybatis/mybatis-3/releases
  2. 创建Java项目,并将前面的2个jar包导入项目,如下图所示,其中lib目录手动创建,2个jar拷贝到lib,并build path二者。
  3. 创建并编写2种配置文件
    1. 全局配置文件:4个参数配置连接池、进行事务管理
    2. 映射配置:定制化sql语句、输入参数与输出结果映射
    3. 配置方式:
      1. 在Java项目下创建source folder(与src目录同级并且一样的目录)用于存放配置文件
      2. 全局配置文件和映射配置文件的编写方式见下方代码
  4. 读取配置并运行测试
    1. Sqlsession:面向开发者的一个接口,提供了发送sql命令的方法。
    2. SqlSessionFactory:session工厂,创建和管理session对象的。

代码

项目目录结构

pojo中User类

package pojo;
public class User {private int uid;private String uname;private String password;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [uid=" + uid + ", " + (uname != null ? "uname=" + uname + ", " : "") + (password != null ? "password=" + password : "") + "]";}
}

Java属性文件jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///bd1808?useSSL=true
user=root
password=root

全局配置文件mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这段主要作用就是约束当前文档怎么去写xml描述文件:dtd/schema,作用是约束标签-->
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 加载外部属性文件 -->	<properties resource="jdbc.properties"></properties><!-- 类型别名:标签时候顺序的,这个必须写到properties标签的后面 --><typeAliases><!-- 单个类型别名 --><!-- <typeAlias alias="user" type="pojo.User"/> --><!-- 批量起别名:别名就是类名,而且不区分大小写 --><package name="pojo" /></typeAliases><!-- 环境context:复数 mysql、oracle、db2本地环境、预上线环境、线上环境default:默认使用环境--><environments default="development"><!-- 环境:id是唯一表示 --><environment id="development"><!-- 事务管理器:JDBC,mybatis框架的事务管理器 --><transactionManager type="JDBC"/><!-- 数据源:POOLED连接池(存储连接) 其他连接池:dbcp/c3p0/druid/jdbctemplate --><dataSource type="POOLED"><!-- name属性的值都是固定的,必须这么写,否则框架无法识别 --><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 映射器 :配置映射文件路径--><mappers><mapper resource="UserMapper.xml"/></mappers>
</configuration>

 映射配置文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间(字符串)隔离sql这里abcd随便写的-->  
<mapper namespace="ahsb1"><!-- 根据uid查询user的对象一个标签就代表一个Statement的对象#{}:代表占位符,在jdbc里面就是?的意思#{}中的id:关键字,即输入参数参数是简单类型:比如基本数据类型和字符串,可任意参数是用类型:属性名称id:标签的唯一表示parameterType:输入参数类型(可选),不写就会进行类型推断resultType:	输出结果类型(单个结果的类型)--><select id="selectUser" resultType="User">select * from user where uid = #{uid}</select><!-- 查询所有 --><select id="selectAll" resultType="User">select * from user</select><!-- 模糊查询${}:表示连接关键字与输入参数的类型有关:简单类型:value引用类型:属性名称--><select id="selectLikeName" resultType="User">select * from user where uname like '%${value}%'</select><!-- 插入 --><insert id="insert1" >insert into user(uname,password) values(#{uname},#{password})</insert>  
</mapper>

测试类Test

package test;
import java.io.IOException;
import java.io.Reader;
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 pojo.User;
public class Test {public static void main(String[] args) throws IOException {//读取配置文件Reader reader = Resources.getResourceAsReader("mybatis.xml");SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);//发送定制好的sql//SqlSession session = ssf.openSession();//关闭自动提交SqlSession session = ssf.openSession(true);//不关闭自动提交/*User user = session.selectOne("ahsb.selectUser", 1);System.out.println(user);*///查询所有/*List<User> users = session.selectList("ahsb.selectAll");System.out.println(users);*///模糊查询/*List<User> users = session.selectList("ahsb.selectLikeName","s");System.out.println(users);*/User user = new User();user.setUname("zl");user.setPassword("123");int rows = session.insert("ahsb1.insert1", user);//手动事务提交//session.commit();System.out.println(rows);session.close();}
}

6.Mybatis增删改查案例?

参见上面第5部分的代码,注意点如下:

  1. 查询所有
  2. 模糊查询:知识点是${ }连接占位符。这里导入了2个文件,即log4j-1.2.17.jar 和 log4j.properties(与mybatis.xml同目录)
  3. 插入数据:知识点是执行完sql语句后手动提交事务或获取session对象时选择不关闭自动提交的工厂方法。

7.Mybatis代理实现DAO开发?

原理:mapper的接口+mapper的映射

要求

  1. mapper接口和mapper的映射同包同名(注册映射时方便)
  2. mapper映射文件的namespace和接口的完全限定名保持一致
  3. 标签的id和方法的名称保持一致
  4. 标签的输入参数类型和方法的参数类型一致
  5. 标签的输出结果类型和方法的返回值类型一致

代码(配置文件版)

User类

package pojo;
public class User {private int uid;private String uname;private String password;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [uid=" + uid + ", " + (uname != null ? "uname=" + uname + ", " : "") + (password != null ? "password=" + password : "") + "]";}
}

UserMapper接口

package mapper;
import java.util.List;
import pojo.User;
public interface UserMapper {List<User> queryAll();User queryById(int uid);
}

UserMapper.xml文件(即UserMapper接口的映射文件,存放在mapper包下面哈,和UserMapper同包同名)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper"><select id="queryAll" resultType="User">select * from user</select><select id="queryById" resultType="User">select * from user where uid=#{}</select>
</mapper>

Test类(获取配置,运行代码)

package test;
import java.io.IOException;
import java.io.Reader;
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 mapper.UserMapper;
public class Test {public static void main(String[] args) throws IOException {Reader reader = Resources.getResourceAsReader("mybatis.xml");SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);SqlSession session = ssf.openSession();UserMapper mapper = session.getMapper(UserMapper.class);System.out.println(mapper.queryAll());session.close();}
}

代码(注解配置版)(关系比较简单时使用)

//在mapper接口中通过注解配置,就不需要mapper配置文件了!
//其他代码和配置仍然保持不变
public interface UserMapper {@Select("select * from user")List<User> queryAll();@Select("select * from user where uid=#{uid}")User queryById(int uid);
}

8.Mybatis高级映射

需求描述:查询部门及其部门下的所有员工。

映射分类:一对多和一对一

一对多:

  1. resultType特点
    1. 结果集中字段名称和类属性名称完全一致,此时将映射成功。
    2. 结果集中的字段和类的属性名称部分一致,部分映射成功。
    3. 结果集中的字段和类的属性名称都不一致,此时不会创建对象。
  2. 一对多:使用resultMap+collection标签

一对一:使用resultMap+association标签

代码实现

项目目录结构

pojo类:

package pojo;import java.util.List;public class Dept {private int deptno;private String dname;private String loc;private List<Emp> emps;public int getDeptno() {return deptno;}public void setDeptno(int deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}public List<Emp> getEmps() {return emps;}public void setEmps(List<Emp> emps) {this.emps = emps;}@Overridepublic String toString() {return "Dept [deptno=" + deptno + ", " + (dname != null ? "dname=" + dname + ", " : "")+ (loc != null ? "loc=" + loc + ", " : "") + (emps != null ? "emps=" + emps : "") + "]";}}package pojo;public class Emp {private int empno;private String ename;private String job;private int mgr;private String hiredate;private double sal;private double comm;private int deptno;private Dept dept;public int getEmpno() {return empno;}public void setEmpno(int empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public int getMgr() {return mgr;}public void setMgr(int mgr) {this.mgr = mgr;}public String getHiredate() {return hiredate;}public void setHiredate(String hiredate) {this.hiredate = hiredate;}public double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public double getComm() {return comm;}public void setComm(double comm) {this.comm = comm;}public int getDeptno() {return deptno;}public void setDeptno(int deptno) {this.deptno = deptno;}public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}@Overridepublic String toString() {return "Emp [empno=" + empno + ", " + (ename != null ? "ename=" + ename + ", " : "")+ (job != null ? "job=" + job + ", " : "") + "mgr=" + mgr + ", "+ (hiredate != null ? "hiredate=" + hiredate + ", " : "") + "sal=" + sal + ", comm=" + comm+ ", deptno=" + deptno + ", " + (dept != null ? "dept=" + dept : "") + "]";}
}

全局配置文件:mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 加载Java属性文件 --><properties resource="jdbc.properties"></properties><typeAliases><package name="pojo"/></typeAliases><!-- 配置环境 --><environments default="dev"><environment id="dev"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><!-- name属性的值都是固定的,必须这么写,否则框架无法识别 --><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><!-- 批量注册映射文件:mappr接口和映射文件必须同包同名 --><package name="mapper"/></mappers>
</configuration>

mappr:接口+映射文件

package mapper;
import java.util.List;
import pojo.Dept;
public interface DeptMapper {List<Dept> findDeptAndEmps();
}package mapper;
import java.util.List;
import pojo.Emp;
public interface EmpMapper {List<Emp> findEmpAndDept();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.DeptMapper"><!-- id:唯一标识    type:封装类型 --><resultMap type="Dept" id="deptMap"><!--主键字段的映射    property:属性名称    column:结果集中字段名称    property的值必须与实体类中的属性名称一致,否则找不到setter访问器 --><id property="deptno" column="deptno" /><result property="dname" column="dname" /><result property="loc" column="loc" /><!-- 将表中的数据封装到集合中  property:Dept类的属性  column:dept表和emp表的关联字段    ofType:dept类的属性emps集合中数据的类型 --><collection property="emps" ofType="Emp" column="deptno"><id property="empno" column="empno" /><result property="ename" column="ename" /><result property="job" column="job" /><result property="mgr" column="mgr" /><result property="hiredate" column="hiredate" /><result property="sal" column="sal" /><result property="comm" column="comm" /><result property="deptno" column="deptno" /></collection></resultMap><!-- resultMap的值是上面resultMap标签的唯一标识id --><select id="findDeptAndEmps" resultMap="deptMap">select * from dept left join emp on dept.deptno=emp.deptno</select>
</mapper><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper"><resultMap type="emp" id="empMap"><id property="empno" column="empno"/><result property="ename" column="ename" /><result property="job" column="job" /><result property="mgr" column="mgr" /><result property="hiredate" column="hiredate" /><result property="sal" column="sal" /><result property="comm" column="comm" /><result property="deptno" column="deptno" /><!-- 将结果集封装到对象中     property:Emp类的属性  column:emp表和dept表的关联字段  javaType:Emp类的属性的数据类型--><association property="dept" column="deptno" javaType="dept"><id property="deptno" column="deptno" /><result property="dname" column="dname"/><result property="loc" column="loc"/></association></resultMap><select id="findEmpAndDept" resultMap="empMap">select * from emp left join dept on dept.deptno=emp.deptno</select>
</mapper>

测试类:Test

package test;import java.io.IOException;
import java.io.Reader;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 mapper.DeptMapper;
import mapper.EmpMapper;public class Test {public static void main(String[] args) throws IOException {Reader reader = Resources.getResourceAsReader("mybatis.xml");SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);SqlSession session = ssf.openSession();DeptMapper mapper = session.getMapper(DeptMapper.class);System.out.println(mapper.findDeptAndEmps());EmpMapper mapper1 = session.getMapper(EmpMapper.class);System.out.println(mapper1.findEmpAndDept());session.close();}
}

 


http://chatgpt.dhexx.cn/article/G2dlGelQ.shtml

相关文章

常见持久层框架赏析,到底是什么让你选择 MyBatis?

在绝大多数在线应用场景中&#xff0c;数据是存储在关系型数据库中的&#xff0c;当然&#xff0c;有特殊要求的场景中&#xff0c;我们也会将其他持久化存储&#xff08;如 ElasticSearch、HBase、MongoDB 等&#xff09;作为辅助存储。但不可否认的是&#xff0c;关系型数据库…

Java持久层框架

一、ORM框架 ORM:对象关系映射(英语:(Object Relational Mapping&#xff0c;简称ORM&#xff0c;或O/RM&#xff0c;或O/R mapping)&#xff0c;是一种程序技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说&#xff0c;它其实是创建了一…

17-Spring持久层框架整合

上一篇&#xff1a;16-Spring 基于注解的AOP编程、AOP总结https://blog.csdn.net/fsjwin/article/details/109482768 1.为什么Spring要与持久层框架进行整合 spring是一个优秀的框架&#xff0c;他的优秀支持就是能整合所有程序员想要让他整合的框架&#xff0c;这里所说的持…

MyBatis持久层框架

文章目录 一、Maven搭建1、本地maven仓库以及本地依赖2、idea搭建maven环境3、配置Product实体类4、配置Product接口5、配置db.properties文件6、配置SqlMapperConfig.xml文件7、配置ProductMapper.xml8、配置测试类9、运行 一、Maven搭建 1、本地maven仓库以及本地依赖 2、id…

Java数据持久层框架

一、前言 1.持久层 Java数据持久层&#xff0c;其本身是为了实现与数据源进行数据交互的存在&#xff0c;其目的是通过分层架构风格&#xff0c;进行应用&数据的解耦。 我从整体角度&#xff0c;依次阐述JDBC、Mybatis、MybatisPlus。 前者总是后者的依赖。只有在了解前…

三大框架 —— 持久层框架MyBatis

持久层框架MyBatis 1. mybatis介绍2. 执行流程3. 使用步骤代码实现举例&#xff1a;商品分类CRUD操作 4. 关联关系4.1 一对一4.2 一对多 5. 参数占位符6. 复杂搜索6.1 动态SQL语句6.2 集合参数 1. mybatis介绍 传统框架的缺点&#xff1a; 使用jdbc需要程序员创建连接&#xff…

持久层框架(Mybatis)

持久层框架 工具和框架 工具&#xff1a; JDBC -> DbUtils(QueyRunner) -> JdbcTemplate: 功能简单&#xff0c;SQL语句编写在Java代码中&#xff0c;这是硬编码&#xff0c;高耦合。 框架&#xff1a; 框架是整体解决方案。 如何进行事务控制&#xff0c;如何实现查询缓…

【Java必学框架】一文搞懂Java持久层框架Mybatis,由浅入深

文章目录 一.简介二.快速入门三.映射文件配置详解1.基本增删改查标签、属性2.动态sql2.1\标签2.2\标签 四.核心配置文件1.核心配置文件标签层级关系及作用2.配置示例3.事务管理器4.数据源5.Mapper标签6.自定义类型转换器7.插件机制 五.相应API1.工具对象2.openSession方法3.Sql…

python怎么输入根号

今天我们来说一说Python中如何实现对一个数字开平方。有三种解决办法、 下面我们分别来演示Python中数字开平方的三种方法 第一种方法&#xff1a;使用math模块&#xff0c;使用之前需要先调用,如下 第二种方法&#xff1a;使用内置函数pow(),如下 第三种方法&#xff1a;使用数…

Python-开根号的几种方式

文章目录 前言方法一方法二方法三 前言 使用Python中的自带库math、自带函数pow和自带库cmath来对数字进行开根号运算 方法一 使用&#xff1a;math.sqrt(数字) import math n int(input(数字:)) x math.sqrt(n) print(x) print(type(x)) #开根号后的类型为float方法二 使用&…

chatgpt赋能python:Python开根号:从入门到精通

Python开根号&#xff1a; 从入门到精通 Python是一种通用的高级编程语言&#xff0c;被广泛应用于数据、人工智能、网络应用、图像处理等多个领域。其中&#xff0c;数学计算是使用Python的常见场景之一&#xff0c;而在数学计算中&#xff0c;常常需要对数值进行开根号运算。…

求解任意正整数n开根号的值,不用函数求解√2(根号二),二分法求根号,定义函数fun()求根号,二分法查找

求解任意正整数n开根号的值 提示&#xff1a;理解二分法、函数调用 定义函数double fun(int n)实现 #include<bits/stdc.h> //万能函数头文件 using namespace std; double fun(int n); //定义一个求解根号的函数声明 int main() { int n;cout<<"输入想…

C语言根号作用,c语言中如何开根号运算

用math.h里封装好的函数&#xff0c;具体如下&#xff1a; 求平方根&#xff1a;double sqrt(double x) 例&#xff1a; #include #include int main(void) { double x 4.0, result; result sqrt(x); printf("The square root of %lf is %lf ", x, result); retu…

JavaScript中的乘方和开根号的使用方法

1、乘方 <script>var ikun Math.pow(4,3);console.log(ikun); </script> 2、开根号 <script>var ikun Math.sqrt(64);console.log(ikun); </script> 我们在开根号后还可以再次开根号 <script>var ikun Math.sqrt( Math.sqrt(81));console.…

python三种方法开根号(穷举法、二分法、牛顿拉夫逊法)

文章目录 方法一&#xff1a;穷举法方法二&#xff1a;二分法方法三&#xff1a;牛顿-拉夫逊算法总结 方法一&#xff1a;穷举法 positive_num int(input("输入一个正数:")) #无穷逼近法 answer0 #正数的根号结果 numGuess0 #循环次数 epsilon0.01 …

计算机开根号原理,根号的原理_怎么开的根号,有原理吗

怎么开的根号,有原理吗 JPG&#xff0c;526x296&#xff0c;128KB&#xff0c;444_250 怎么在数轴上画出根号3,求详细过程和原理 JPG&#xff0c;600x293&#xff0c;231KB&#xff0c;514_250 求根号 X 2 2 9 根号 X 3 2 4 的最小值 JPG&#xff0c;598x800&#xff0c;128KB&…

python中根号怎么输入_python中根号怎么表示

sqrt() 方法返回数字x的平方根。 以下是 sqrt() 方法的语法:&#xff08;推荐学习&#xff1a;Python视频教程&#xff09;import math math.sqrt( x ) 注意&#xff1a;sqrt()是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;通过静态对象调用该方法。 参数 x…

java 开三次根号_java里实现开根号

java里实现开根号 [2021-02-03 08:57:13] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教 excel中开根号的函数…

开根号的笔算算法图解_一个数的开根号怎么计算

一个数的开根号怎么计算2020-11-08 15:46:47文/钟诗贺 带根号的式子可以直接进行开平方的运算。一些特殊的根号运算有;√2≈1.414、1/2-√3≈0.5-1.732≈-1.232、2√5≈22.236≈4.236、√7-√6≈2.646-2.449≈0.197。 开平方的笔算方法 1&#xff0e;将被开方数的整数部分从个位…

chatgpt赋能python:如何在Python中表示开根号?

如何在Python中表示开根号&#xff1f; 在Python中&#xff0c;表示开根号有多种方法。本文将介绍其中最常用的三种方法&#xff0c;并对它们的优缺点进行比较&#xff0c;以便读者意识到哪种方法最适合他们的需求。 方法一&#xff1a;使用math模块的sqrt函数 在Python中&a…