mybatis基础(上)
- 框架图
- SqlSessionFactoryBuilder
- 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
- 将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSesssionFactoryBuilder
- 在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可
- SqlSessionFactory
- 通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)
- 将来mybatis和spring整合后,使用单例模式管理SqlSessionFactory
- SqlSession
- 是一个面向(程序员)接口
- SqlSession中提供了多操作数据库的方法,如:selectOne(返回单个对象)、selectList(返回单个或多个对象)
- SqlSession是线程不安全的,在SqlSession实现类中除了有接口中的方法(操作数据库的方法),还有数据域属性
- SqlSession最佳应用场合在方法体内,定义成局部变量使用。
- SqlSessionFactoryBuilder
- 基础工程结构
- 在db.properties的内容
# Create a file called log4j.properties as shown below and place it in your classpath: # 创建一个名为log4j.properties的文件,如下所示,并将其放在类路径中: # Global logging configuration # 在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error log4j.rootLogger=DEBUG, stdout # MyBatis logging configuration... log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
- 在SqlMapConfig.xml的内容
<?xml version="1.0" encoding="UTF-8" ?> <!-- 配置XML文件包含MyBatis系统核心的设置,包括用于获取数据库连接实例的DataSource,以及用于确定如何确定事务范围和控制事务的TransactionManager。 --> <!-- 请注意验证XML文档所需的XML标头。 environment元素的主体包含事务管理和连接池的环境配置。mappers元素包含一个映射器列表 - 包含SQL代码和映射定义的XML文件和/或带注释的Java接口类。--> <!-- 与spring整合后environments配置将废除 --> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC"/><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc://mysql://localhost:3306/[数据库名]?characterEncoding=utf-8"/><property name="username" value="[账号]"/><property name="password" value="[密码]"/></dataSource></environment></environments><!-- 加载映射文件 --><mappers><mapper resource="sqlmap/User.xml"/></mappers> </configuration>
- 方法一
#db.properties #将数据库连接参数只配置在db.properties中(原因:方便对参数进行统一管理) jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/travelling_guideling?characterEncoding=utf-8 jdbc.username=root jdbc.password=root<?xml version="1.0" encoding="UTF-8" ?> <!-- 配置XML文件包含MyBatis系统核心的设置,包括用于获取数据库连接实例的DataSource,以及用于确定如何确定事务范围和控制事务的TransactionManager。 --> <!-- 请注意验证XML文档所需的XML标头。 environment元素的主体包含事务管理和连接池的环境配置。mappers元素包含一个映射器列表 - 包含SQL代码和映射定义的XML文件和/或带注释的Java接口类。--> <!-- 与spring整合后environments配置将废除 --> <!--mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:properties(属性)、settings(全局配置参数)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)、plugins(插件)、environments(环境集合属性对象)、environment(环境子属性对象)、transactionManager(事务管理)、dataSource(数据源)、mappers(映射器) --> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><properties resource="db.properties"></properties><!-- 别名定义 --><typeAliases><!--针对单个别名定义type:类型的路径alias:别名--><typeAlias type="cn.muriel.mybatis.po.User" alias="user"/><!--批量别名定义指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大小写都可以)--><!--<package name="cn.muriel.mybatis.po"/>--></typeAliases><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC"/><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><!-- ${jdbc.driver}写成${jdbc.Driver},报错 --><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 加载映射文件 --><mappers><!-- 通过resource方法一次加载一个映射文件 --><mapper resource="mapper/UserMapper.xml"/><mapper resource="sqlmap/User.xml"/><!-- 使用完全限定路径加载 --><!--<mapper url="file:///"/>--><!-- 使用mapper接口类路径 --><!--遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中上边规范的前提是:使用的是mapper代理方法--><!--<mapper class=""/>--><!-- 使用批量加载mapper --><!--指定mapper接口的报名,mybatis自动扫描包下边的mapper接口进行加载遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中上边规范的前提是:使用的是mapper代理方法--><!-- <package name=""/> --></mappers> </configuration><?xml version="1.0" encoding="UTF-8" ?> <!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 --> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用 --> <mapper namespace="user"><select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">select * from user</select> </mapper>/*** mybatis是一个持久层的框架*/ public class JDBCUtils {public SqlSession connection() throws IOException {//mybatis配置文件String path = "SqlMapConfig.xml";//得到配置文件流 InputStream inputStream = null;SqlSession sqlSession = null;inputStream = Resources.getResourceAsStream(path);//创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过工厂得到SqlSessionsqlSession = sqlSessionFactory.openSession();return sqlSession;} }public abstract class UserDao extends JDBCUtils {public abstract List<User> selectAllUser();}/*** UserDao的实现类*/ public class UserDaoImpl extends UserDao {@Overridepublic List<User> selectAllUser() {try {SqlSession connection = connection();List<User> users = connection.selectList("user.selectAllUser");return users;} catch (IOException e) {e.printStackTrace();}return null;}}/*** 测试类*/ public class TestUtil {public static void main(String[] args) {UserDao userDao = new UserDaoImpl();JSONArray jsonArray = JSONArray.fromObject(userDao.selectAllUser());System.out.println(jsonArray + "");} }
- 方法二
#db.properties #将数据库连接参数只配置在db.properties中(原因:方便对参数进行统一管理) jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/travelling_guideling?characterEncoding=utf-8 jdbc.username=root jdbc.password=root<?xml version="1.0" encoding="UTF-8" ?> <!-- 配置XML文件包含MyBatis系统核心的设置,包括用于获取数据库连接实例的DataSource,以及用于确定如何确定事务范围和控制事务的TransactionManager。 --> <!-- 请注意验证XML文档所需的XML标头。 environment元素的主体包含事务管理和连接池的环境配置。mappers元素包含一个映射器列表 - 包含SQL代码和映射定义的XML文件和/或带注释的Java接口类。--> <!-- 与spring整合后environments配置将废除 --> <!--mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:properties(属性)、settings(全局配置参数)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)、plugins(插件)、environments(环境集合属性对象)、environment(环境子属性对象)、transactionManager(事务管理)、dataSource(数据源)、mappers(映射器) --> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><properties resource="db.properties"></properties><!-- 别名定义 --><typeAliases><!--针对单个别名定义type:类型的路径alias:别名--><typeAlias type="cn.muriel.mybatis.po.User" alias="user"/><!--批量别名定义指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大小写都可以)--><!--<package name="cn.muriel.mybatis.po"/>--></typeAliases><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC"/><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><!-- ${jdbc.driver}写成${jdbc.Driver},报错 --><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 加载映射文件 --><mappers><!-- 通过resource方法一次加载一个映射文件 --><mapper resource="mapper/UserMapper.xml"/><mapper resource="sqlmap/User.xml"/><!-- 使用完全限定路径加载 --><!--<mapper url="file:///"/>--><!-- 使用mapper接口类路径 --><!--遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中上边规范的前提是:使用的是mapper代理方法--><!--<mapper class=""/>--><!-- 使用批量加载mapper --><!--指定mapper接口的报名,mybatis自动扫描包下边的mapper接口进行加载遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中上边规范的前提是:使用的是mapper代理方法--><!-- <package name=""/> --></mappers> </configuration><?xml version="1.0" encoding="UTF-8" ?> <!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 --> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用 --> <mapper namespace="user"><!-- 通过OGNL(Object-Graph-Navigation-Language)方式来进行获取 --><select id="selectUser" parameterType="cn.muriel.mybatis.po.UserQueryVo"resultType="cn.muriel.mybatis.po.UserCustom">select * from user where id = #{userCustom.id}</select></mapper>/*** mybatis是一个持久层的框架*/ public class JDBCUtils {public SqlSession connection() throws IOException {//mybatis配置文件String path = "SqlMapConfig.xml";//得到配置文件流InputStream inputStream = null;SqlSession sqlSession = null;inputStream = Resources.getResourceAsStream(path);//创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通过工厂得到SqlSessionsqlSession = sqlSessionFactory.openSession();return sqlSession;} }/*** mapper.java接口中的方法名和mapper.xml中的statement的id一致* mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致* mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致** 系统框架中,dao层的代码是被业务处公用的* 即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同的业务方法的需求* 注意:持久层方法的参数可以包装类型、map、service方法中建议不要使用包装类型** 【使用mapper.java的时候 必须是public interface UserMapper,* 若不小心写成Type class cn.muriel.mybatis.mapper.UserMapper is not known to the MapperRegistry.】*/ public interface UserMapper {public List selectAllUser();public User selectUser(int id) throws Exception; }/*** 测试类*/ public class TestUtil {public static void main(String[] args) {JDBCUtils jdbcUtils = new JDBCUtils();try {SqlSession sqlSession = jdbcUtils.connection();UserMapper mapper = sqlSession.getMapper(UserMapper.class);JSONArray sendJson = JSONArray.fromObject(mapper.selectUser(4));System.out.println(sendJson + "");} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}} }
- ResultType和ResultMap的区别
<!--定义resultMap:id:对resultMap的唯一标识type:reusltMap最终映射的java对象类型,可以使用别名--><resultMap id="userResultMap" type="cn.muriel.mybatis.po.User"><!--id标识查询结果集中唯一标识column:查询出来的列名property:type指定的pojo类型中的属性名最终resultMap对column和property作一个映射关系(对应关系)--><id column="id_" property="id"/><!--result:对普通名映射定义column:查询出来对列名property:type指定对pojo类型中对属性名最终resultMap对column和property做一个映射关系(对应关系)--><result column="username_" property="username"/></resultMap><!--(resultType和resultMap的区别)resultType:使用resultType进行输出映射,只有查询出来的列名和Pojo中的属性名一致,该列才可以映射成功不管是输出的pojp单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的在mapper.java指定的方法返回值类型不一样:(1)输出单个pojo对象,方法返回值是单个对象类型(2)输出list的pojo对象,方法返回值是List<pojo>resultMap:如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系(1)定义resultMap(2)使用resultMap作为statement的输出映射类型--><!-- 通过OGNL(Object-Graph-Navigation-Language)方式来进行获取 --><select id="selectUser" parameterType="id" resultMap="userResultMap"resultType="cn.muriel.mybatis.po.UserCustom">select id id_,username username username_ from user where id = #{userCustom.id}</select>
- 什么是动态sql
- mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼装、组接。
- if判断
<!-- 模糊查询用户 --><!-- 若resultType写成resultMap 抛异常Result Maps collection does not contain value for XXX --><select id="blurrySelectUser" parameterType="cn.muriel.mybatis.po.UserQueryVo" resultType="cn.muriel.mybatis.po.UserCustom">SELECT * from USER<!-- where 可以自动去掉条件中第一个and --><where><if test="userCustom != null"><if test="userCustom.root != null">and root = #{userCustom.root}</if><if test="userCustom.username != null and userCustom.username != ''">and username LIKE '%${userCustom.username}%'</if></if></where></select>public interface UserMapper {public List blurrySelectUser(UserQueryVo userQueryVo) throws Exception; }public class TestUtil {public static void main(String[] args) {JDBCUtils jdbcUtils = new JDBCUtils();try {SqlSession sqlSession = jdbcUtils.connection();UserMapper mapper = sqlSession.getMapper(UserMapper.class);UserQueryVo userQueryVo = new UserQueryVo();UserCustom user = new UserCustom();user.setUsername("a");user.setRoot(1);userQueryVo.setUserCustom(user);JSONArray sendJson = JSONArray.fromObject(mapper.blurrySelectUser(userQueryVo));System.out.println(sendJson + "");} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}} }
- sql片段
<!--定义sql片段:是基于单表来定义sql片段,这样的话这个sql片段可重用性才高在sql片段中不要包括where--><sql id="blurry_select_user_where"><if test="userCustom != null"><if test="userCustom.root != null">and root = #{userCustom.root}</if><if test="userCustom.username != null and userCustom.username != ''">and username LIKE '%${userCustom.username}%'</if></if></sql> <!-- 模糊查询用户 --><!-- 若resultType写成resultMap 抛异常Result Maps collection does not contain value for XXX --><select id="blurrySelectUser" parameterType="cn.muriel.mybatis.po.UserQueryVo" resultType="cn.muriel.mybatis.po.UserCustom">SELECT * from USER<!-- where 可以自动去掉条件中第一个and --><where><!-- 引用sql片段的id,如果refid指定的Id不再当前mapper文件中,需要在前边加namespace --><include refid="blurry_select_user_where"></include><!-- 在这里还可以引用其它的sql片段 --></where></select>
- foreach
public class UserQueryVo {private List<Integer> ids;//用户查询条件private UserCustom userCustom;public UserCustom getUserCustom() {return userCustom;}public void setUserCustom(UserCustom userCustom) {this.userCustom = userCustom;}public List<Integer> getIds() {return ids;}public void setIds(List<Integer> ids) {this.ids = ids;} }public interface UserMapper {public List blurrySelectUser(UserQueryVo userQueryVo) throws Exception; }<select id="blurrySelectUser" parameterType="cn.muriel.mybatis.po.UserQueryVo"resultType="cn.muriel.mybatis.po.UserCustom">SELECT * from USER<!-- where 可以自动去掉条件中第一个and --><where><!-- 引用sql片段的id,如果refid指定的Id不再当前mapper文件中,需要在前边加namespace --><include refid="blurry_select_user_where"></include><!-- 在这里还可以引用其它的sql片段 --></where></select><!--定义sql片段:是基于单表来定义sql片段,这样的话这个sql片段可重用性才高在sql片段中不要包括where--><sql id="blurry_select_user_where"><if test="userCustom != null"><if test="userCustom.root != null">and root = #{userCustom.root}</if><if test="userCustom.username != null and userCustom.username != ''">and username LIKE '%${userCustom.username}%'</if></if><!--collection:指定输入对象中属性集合item:每个遍历生成对象中open:开始遍历时拼接的串close:结束遍历时拼接的串spearator:遍历时两个对象中需要拼接的串(SQL语句格式:AND (id=1 or id=2 or id =3))=3))--><foreach collection="ids" item="user_id" open="AND (" close=")" separator="or"><!-- 每个遍历需要拼接的串 -->id = #{user_id}</foreach></sql>public class TestUtil {public static void main(String[] args) {JDBCUtils jdbcUtils = new JDBCUtils();try {SqlSession sqlSession = jdbcUtils.connection();UserMapper mapper = sqlSession.getMapper(UserMapper.class);UserQueryVo userQueryVo = new UserQueryVo();UserCustom user = new UserCustom();user.setUsername("a");user.setRoot(1);List list = new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);userQueryVo.setIds(list);userQueryVo.setUserCustom(user);JSONArray sendJson = JSONArray.fromObject(mapper.blurrySelectUser(userQueryVo));System.out.println(sendJson + "");} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}} }
<!--collection:指定输入对象中属性集合item:每个遍历生成对象中open:开始遍历时拼接的串close:结束遍历时拼接的串spearator:遍历时两个对象中需要拼接的串(SQL语句格式:AND id in (1 , 2 ,3))--><foreach collection="ids" item="user_id" open="and id IN (" close=")" separator=","><!-- 每个遍历需要拼接的串 -->#{user_id}</foreach>
转载于:https://www.cnblogs.com/fatRabbit-/p/10502484.html
mybatis基础(上)相关推荐
- 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解
该系列文章针对 Mybatis 3.5.1 版本 在上一篇文章中,谈到了 <environment> 标签解析会构建 Environment 对象,Environment 对象中有两个关键 ...
- javaweb实训第六天下午——Mybatis基础
Mybatis基础 1.课程介绍 2.为什么需要Mybatis 3.初识Mybatis 3.1.Mybatis是什么 3.1.1.什么是框架 3.1.2.什么叫数据库持久化 3.1.3.什么是ORM ...
- Mybatis基础学习之万能的Map和模糊查询
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...
- Mybatis基础学习之一级缓存和二级缓存的简单使用
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...
- java mybatis基础
java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...
- 灵活性是原则性基础上的灵活
灵活性是原则性基础上的灵活,没有原则性的灵活是耍流氓. 原则性是质,灵活性是量,灵活性有度的要求,就是不能改变质. 转载于:https://www.cnblogs.com/jcode/p/596186 ...
- R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)
R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...
- 我们为什么不能只相信建立在深度学习基础上的人工智能系统
来源:简书 本文摘自: https://www.jianshu.com/p/55e1abcd896d Gary Marcus介绍了如何实现通用智能以及为什么通用智能可能会让机器更安全. 加里•马库斯( ...
- 脑内世界模型:脑科学基础上的意识问题哲学解说
来源:<华侨大学学报>哲学社会科学版2018年第5期 作者:方圆(中国科学院大学人文学院博士后研究人员) 本文旨在以当今时代脑科学研究结论为基础,在哲学层面回答"意识是什么&qu ...
- [Hadoop in China 2011] Facebook Message在HBase基础上的应用
http://tech.it168.com/a2011/1203/1283/000001283206.shtml 在今天下午进行的NoSQL系统及应用分论坛中,来自Facebook的技术经理Guoqi ...
最新文章
- Numpy和Pandas的区别
- Deep TEN: Texture Encoding Network
- echarts雷达图线的样式_echarts 雷达图的个性化设置
- 线段树初见——区间询问与改变最大值
- JS 原型对象(prototype)
- linux arm移远重启4g,如何在Ubuntu16.04下配置移远RM500工业模组(5G工业模组)
- 下载并搭建VauditDemo
- jtm 一键安装mysql_一键安装MySQL
- JDBC和MySQL的实现原理
- qt mysql图形界面_qt数据库界面
- Garbled Circuits介绍 - 4 混淆电路的优化
- 计算机伦理学案例分析,医药伦理学案例分析
- 12306抢票使用教程
- 【项目管理/PMP/PMBOK第六版/新考纲】项目资源管理/权力理论/管理方格理论/领导生命周期理论/激励理论/马斯洛需求层次理论/赫兹伯格的双因素理论/X理论和Y理论/弗鲁姆的期望理论
- 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
- 刷脸开门上班取外卖等都会无处不在
- 大数据高效找所有素数/质数的算法
- 电气火灾监控探测器安装在哪里?
- 区块链将会怎样颠覆Google、Amazon、Facebook和Apple?
- matlab受力曲线导入adams中,如何在adams中导入dxf曲线
热门文章
- 优雅草YYC松鼠短视频2022年12月28日更新v5.1.6版本更新·修复因为消息提醒二开导致菜单栏无法显示·进一步完善推送
- ubuntu Rhythmbox 乱码解决
- Linux的一些基础命令
- IOS神器-fastlane工具实战-IOS自动化接入应用
- Qt开发环境下载和安装
- Python Playwright 打包报错 Please run the following command to download new browsers
- 利用Python实现Excel合并单元格
- 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
- Team Tic Tac Toe--数据结构set的妙用
- 【MDCC专访】郑晔:用JavaScript征服物联网应用开发