• 框架图

    • SqlSessionFactoryBuilder

      • 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
      • 将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSesssionFactoryBuilder
      • 在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可
    • SqlSessionFactory
      • 通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)
      • 将来mybatis和spring整合后,使用单例模式管理SqlSessionFactory
    • SqlSession
      • 是一个面向(程序员)接口
      • SqlSession中提供了多操作数据库的方法,如:selectOne(返回单个对象)、selectList(返回单个或多个对象)
      • SqlSession是线程不安全的,在SqlSession实现类中除了有接口中的方法(操作数据库的方法),还有数据域属性
      • SqlSession最佳应用场合在方法体内,定义成局部变量使用。
  • 基础工程结构

  

  • 在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基础(上)相关推荐

  1. 2 数据源配置_[Mybatis]-[基础支持层]-数据源信息-数据源详解

    该系列文章针对 Mybatis 3.5.1 版本 在上一篇文章中,谈到了 <environment> 标签解析会构建 Environment 对象,Environment 对象中有两个关键 ...

  2. javaweb实训第六天下午——Mybatis基础

    Mybatis基础 1.课程介绍 2.为什么需要Mybatis 3.初识Mybatis 3.1.Mybatis是什么 3.1.1.什么是框架 3.1.2.什么叫数据库持久化 3.1.3.什么是ORM ...

  3. Mybatis基础学习之万能的Map和模糊查询

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

  4. Mybatis基础学习之一级缓存和二级缓存的简单使用

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

  5. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  6. 灵活性是原则性基础上的灵活

    灵活性是原则性基础上的灵活,没有原则性的灵活是耍流氓. 原则性是质,灵活性是量,灵活性有度的要求,就是不能改变质. 转载于:https://www.cnblogs.com/jcode/p/596186 ...

  7. R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)

    R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...

  8. 我们为什么不能只相信建立在深度学习基础上的人工智能系统

    来源:简书 本文摘自: https://www.jianshu.com/p/55e1abcd896d Gary Marcus介绍了如何实现通用智能以及为什么通用智能可能会让机器更安全. 加里•马库斯( ...

  9. 脑内世界模型:脑科学基础上的意识问题哲学解说

    来源:<华侨大学学报>哲学社会科学版2018年第5期 作者:方圆(中国科学院大学人文学院博士后研究人员) 本文旨在以当今时代脑科学研究结论为基础,在哲学层面回答"意识是什么&qu ...

  10. [Hadoop in China 2011] Facebook Message在HBase基础上的应用

    http://tech.it168.com/a2011/1203/1283/000001283206.shtml 在今天下午进行的NoSQL系统及应用分论坛中,来自Facebook的技术经理Guoqi ...

最新文章

  1. Numpy和Pandas的区别
  2. Deep TEN: Texture Encoding Network
  3. echarts雷达图线的样式_echarts 雷达图的个性化设置
  4. 线段树初见——区间询问与改变最大值
  5. JS 原型对象(prototype)
  6. linux arm移远重启4g,如何在Ubuntu16.04下配置移远RM500工业模组(5G工业模组)
  7. 下载并搭建VauditDemo
  8. jtm 一键安装mysql_一键安装MySQL
  9. JDBC和MySQL的实现原理
  10. qt mysql图形界面_qt数据库界面
  11. Garbled Circuits介绍 - 4 混淆电路的优化
  12. 计算机伦理学案例分析,医药伦理学案例分析
  13. 12306抢票使用教程
  14. 【项目管理/PMP/PMBOK第六版/新考纲】项目资源管理/权力理论/管理方格理论/领导生命周期理论/激励理论/马斯洛需求层次理论/赫兹伯格的双因素理论/X理论和Y理论/弗鲁姆的期望理论
  15. 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
  16. 刷脸开门上班取外卖等都会无处不在
  17. 大数据高效找所有素数/质数的算法
  18. 电气火灾监控探测器安装在哪里?
  19. 区块链将会怎样颠覆Google、Amazon、Facebook和Apple?
  20. matlab受力曲线导入adams中,如何在adams中导入dxf曲线

热门文章

  1. 优雅草YYC松鼠短视频2022年12月28日更新v5.1.6版本更新·修复因为消息提醒二开导致菜单栏无法显示·进一步完善推送
  2. ubuntu Rhythmbox 乱码解决
  3. Linux的一些基础命令
  4. IOS神器-fastlane工具实战-IOS自动化接入应用
  5. Qt开发环境下载和安装
  6. Python Playwright 打包报错 Please run the following command to download new browsers
  7. 利用Python实现Excel合并单元格
  8. 手机卫星定位系统_如何判断自己的手机是否支持北斗卫星定位功能,如何使用?...
  9. Team Tic Tac Toe--数据结构set的妙用
  10. 【MDCC专访】郑晔:用JavaScript征服物联网应用开发