【MyBatis】| MyBatis的逆向⼯程
创始人
2024-05-25 15:33:51
0

目录

一:MyBatis的逆向⼯程

1. 逆向⼯程配置与⽣成

2. 测试生成的逆向⼯程


一:MyBatis的逆向⼯程

(1)所谓的逆向⼯程是:根据数据库表逆向⽣成Java的pojo类,SqlMapper.xml⽂件,以及Mapper接⼝类等,这真是一个很强大的功能。 要完成这个⼯作,需要借助别⼈写好的逆向⼯程插件。

(2)思考:使⽤这个插件的话,需要给这个插件配置哪些信息?

①pojo类名、包名以及⽣成位置。

②SqlMapper.xml⽂件名以及⽣成位置。

③Mapper接⼝名以及⽣成位置。

④连接数据库的信息。

⑤指定哪些表参与逆向⼯程。

 ......

1. 逆向⼯程配置与⽣成

(1)基础环境准备

新建一个普通的Maven模块:mybatis-012-generator

打包⽅式:jar

(2)在pom.xml中添加逆向⼯程插件

①先引入mybatis逆向⼯程的插件,引入仓库中对应的插件坐标。

②允许覆盖:表示原来这些文件存在,true就以覆盖的方式生成文件,false就以追加的方式生成文件。

③引入插件的依赖:我们需要根据数据库表逆向生成pojo类、SqlMapper接口和里面的方法、SqlMapper.xml配置文件等,所以肯定需要mysql的驱动。


4.0.0com.bjpowernodemybatis-012-generator1.0-SNAPSHOTjarorg.mybatis.generatormybatis-generator-maven-plugin1.4.1truemysqlmysql-connector-java5.1.23

(3)配置generatorConfig.xml(基础版)

该⽂件名必须叫做:generatorConfig.xml。

并且该⽂件必须放在类的根路径下。


 (4)双击运行插件,就可以生成基础版的配置信息

自动生成的CarMapper接口、pojo类Car、CarMapper.xml配置文件

 CarMapper接口

package com.bjpowernode.mybatis.mapper;import com.bjpowernode.mybatis.pojo.Car;
import java.util.List;public interface CarMapper {int deleteByPrimaryKey(Long id);int insert(Car row);Car selectByPrimaryKey(Long id);List selectAll();int updateByPrimaryKey(Car row);
}

pojo类Car

注:生成的pojo类并没有重写toString方法

package com.bjpowernode.mybatis.pojo;import java.math.BigDecimal;public class Car {private Long id;private String carNum;private String brand;private BigDecimal guidePrice;private String produceTime;private String carType;@Overridepublic String toString() {return "Car{" +"id=" + id +", carNum='" + carNum + '\'' +", brand='" + brand + '\'' +", guidePrice=" + guidePrice +", produceTime='" + produceTime + '\'' +", carType='" + carType + '\'' +'}';}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getCarNum() {return carNum;}public void setCarNum(String carNum) {this.carNum = carNum == null ? null : carNum.trim();}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand == null ? null : brand.trim();}public BigDecimal getGuidePrice() {return guidePrice;}public void setGuidePrice(BigDecimal guidePrice) {this.guidePrice = guidePrice;}public String getProduceTime() {return produceTime;}public void setProduceTime(String produceTime) {this.produceTime = produceTime == null ? null : produceTime.trim();}public String getCarType() {return carType;}public void setCarType(String carType) {this.carType = carType == null ? null : carType.trim();}
}

CarMapper.xml配置文件



delete from t_carwhere id = #{id,jdbcType=BIGINT}insert into t_car (id, car_num, brand, guide_price, produce_time, car_type)values (#{id,jdbcType=BIGINT}, #{carNum,jdbcType=VARCHAR}, #{brand,jdbcType=VARCHAR}, #{guidePrice,jdbcType=DECIMAL}, #{produceTime,jdbcType=CHAR}, #{carType,jdbcType=VARCHAR})update t_carset car_num = #{carNum,jdbcType=VARCHAR},brand = #{brand,jdbcType=VARCHAR},guide_price = #{guidePrice,jdbcType=DECIMAL},produce_time = #{produceTime,jdbcType=CHAR},car_type = #{carType,jdbcType=VARCHAR}where id = #{id,jdbcType=BIGINT}

2. 测试生成的逆向⼯程

(1)环境准备

①依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖

②jdbc.properties、mybatis-config.xml、logback.xml

③拷贝工具类:SqlSessionUtil

(2)编写测试程序(基础版)

package com.bjpowernode.mybatis.test;import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.List;public class CarMapperTest {@Testpublic void testSelectAll(){SqlSession sqlSession = SqlSessionUtil.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List cars = mapper.selectAll();cars.forEach(car -> System.out.println(car));sqlSession.close();}
}

执行结果:

 (3)配置generatorConfig.xml(增强版)

 生成了两个pojo类,并且对于接口中的方法也变多了

 CarMapper接口

package com.bjpowernode.mybatis.mapper;import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.pojo.CarExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;public interface CarMapper {long countByExample(CarExample example);int deleteByExample(CarExample example);int deleteByPrimaryKey(Long id);int insert(Car row);int insertSelective(Car row);List selectByExample(CarExample example);Car selectByPrimaryKey(Long id);int updateByExampleSelective(@Param("row") Car row, @Param("example") CarExample example);int updateByExample(@Param("row") Car row, @Param("example") CarExample example);int updateByPrimaryKeySelective(Car row);int updateByPrimaryKey(Car row);
}

pojo类Car

package com.bjpowernode.mybatis.pojo;import java.math.BigDecimal;public class Car {private Long id;private String carNum;private String brand;private BigDecimal guidePrice;private String produceTime;private String carType;@Overridepublic String toString() {return "Car{" +"id=" + id +", carNum='" + carNum + '\'' +", brand='" + brand + '\'' +", guidePrice=" + guidePrice +", produceTime='" + produceTime + '\'' +", carType='" + carType + '\'' +'}';}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getCarNum() {return carNum;}public void setCarNum(String carNum) {this.carNum = carNum == null ? null : carNum.trim();}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand == null ? null : brand.trim();}public BigDecimal getGuidePrice() {return guidePrice;}public void setGuidePrice(BigDecimal guidePrice) {this.guidePrice = guidePrice;}public String getProduceTime() {return produceTime;}public void setProduceTime(String produceTime) {this.produceTime = produceTime == null ? null : produceTime.trim();}public String getCarType() {return carType;}public void setCarType(String carType) {this.carType = carType == null ? null : carType.trim();}
}

pojo类CarExample:封装查询条件的类

package com.bjpowernode.mybatis.pojo;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class CarExample {protected String orderByClause;protected boolean distinct;protected List oredCriteria;public CarExample() {oredCriteria = new ArrayList<>();}public void setOrderByClause(String orderByClause) {this.orderByClause = orderByClause;}public String getOrderByClause() {return orderByClause;}public void setDistinct(boolean distinct) {this.distinct = distinct;}public boolean isDistinct() {return distinct;}public List getOredCriteria() {return oredCriteria;}public void or(Criteria criteria) {oredCriteria.add(criteria);}public Criteria or() {Criteria criteria = createCriteriaInternal();oredCriteria.add(criteria);return criteria;}public Criteria createCriteria() {Criteria criteria = createCriteriaInternal();if (oredCriteria.size() == 0) {oredCriteria.add(criteria);}return criteria;}protected Criteria createCriteriaInternal() {Criteria criteria = new Criteria();return criteria;}public void clear() {oredCriteria.clear();orderByClause = null;distinct = false;}protected abstract static class GeneratedCriteria {protected List criteria;protected GeneratedCriteria() {super();criteria = new ArrayList<>();}public boolean isValid() {return criteria.size() > 0;}public List getAllCriteria() {return criteria;}public List getCriteria() {return criteria;}protected void addCriterion(String condition) {if (condition == null) {throw new RuntimeException("Value for condition cannot be null");}criteria.add(new Criterion(condition));}protected void addCriterion(String condition, Object value, String property) {if (value == null) {throw new RuntimeException("Value for " + property + " cannot be null");}criteria.add(new Criterion(condition, value));}protected void addCriterion(String condition, Object value1, Object value2, String property) {if (value1 == null || value2 == null) {throw new RuntimeException("Between values for " + property + " cannot be null");}criteria.add(new Criterion(condition, value1, value2));}public Criteria andIdIsNull() {addCriterion("id is null");return (Criteria) this;}public Criteria andIdIsNotNull() {addCriterion("id is not null");return (Criteria) this;}public Criteria andIdEqualTo(Long value) {addCriterion("id =", value, "id");return (Criteria) this;}public Criteria andIdNotEqualTo(Long value) {addCriterion("id <>", value, "id");return (Criteria) this;}public Criteria andIdGreaterThan(Long value) {addCriterion("id >", value, "id");return (Criteria) this;}public Criteria andIdGreaterThanOrEqualTo(Long value) {addCriterion("id >=", value, "id");return (Criteria) this;}public Criteria andIdLessThan(Long value) {addCriterion("id <", value, "id");return (Criteria) this;}public Criteria andIdLessThanOrEqualTo(Long value) {addCriterion("id <=", value, "id");return (Criteria) this;}public Criteria andIdIn(List values) {addCriterion("id in", values, "id");return (Criteria) this;}public Criteria andIdNotIn(List values) {addCriterion("id not in", values, "id");return (Criteria) this;}public Criteria andIdBetween(Long value1, Long value2) {addCriterion("id between", value1, value2, "id");return (Criteria) this;}public Criteria andIdNotBetween(Long value1, Long value2) {addCriterion("id not between", value1, value2, "id");return (Criteria) this;}public Criteria andCarNumIsNull() {addCriterion("car_num is null");return (Criteria) this;}public Criteria andCarNumIsNotNull() {addCriterion("car_num is not null");return (Criteria) this;}public Criteria andCarNumEqualTo(String value) {addCriterion("car_num =", value, "carNum");return (Criteria) this;}public Criteria andCarNumNotEqualTo(String value) {addCriterion("car_num <>", value, "carNum");return (Criteria) this;}public Criteria andCarNumGreaterThan(String value) {addCriterion("car_num >", value, "carNum");return (Criteria) this;}public Criteria andCarNumGreaterThanOrEqualTo(String value) {addCriterion("car_num >=", value, "carNum");return (Criteria) this;}public Criteria andCarNumLessThan(String value) {addCriterion("car_num <", value, "carNum");return (Criteria) this;}public Criteria andCarNumLessThanOrEqualTo(String value) {addCriterion("car_num <=", value, "carNum");return (Criteria) this;}public Criteria andCarNumLike(String value) {addCriterion("car_num like", value, "carNum");return (Criteria) this;}public Criteria andCarNumNotLike(String value) {addCriterion("car_num not like", value, "carNum");return (Criteria) this;}public Criteria andCarNumIn(List values) {addCriterion("car_num in", values, "carNum");return (Criteria) this;}public Criteria andCarNumNotIn(List values) {addCriterion("car_num not in", values, "carNum");return (Criteria) this;}public Criteria andCarNumBetween(String value1, String value2) {addCriterion("car_num between", value1, value2, "carNum");return (Criteria) this;}public Criteria andCarNumNotBetween(String value1, String value2) {addCriterion("car_num not between", value1, value2, "carNum");return (Criteria) this;}public Criteria andBrandIsNull() {addCriterion("brand is null");return (Criteria) this;}public Criteria andBrandIsNotNull() {addCriterion("brand is not null");return (Criteria) this;}public Criteria andBrandEqualTo(String value) {addCriterion("brand =", value, "brand");return (Criteria) this;}public Criteria andBrandNotEqualTo(String value) {addCriterion("brand <>", value, "brand");return (Criteria) this;}public Criteria andBrandGreaterThan(String value) {addCriterion("brand >", value, "brand");return (Criteria) this;}public Criteria andBrandGreaterThanOrEqualTo(String value) {addCriterion("brand >=", value, "brand");return (Criteria) this;}public Criteria andBrandLessThan(String value) {addCriterion("brand <", value, "brand");return (Criteria) this;}public Criteria andBrandLessThanOrEqualTo(String value) {addCriterion("brand <=", value, "brand");return (Criteria) this;}public Criteria andBrandLike(String value) {addCriterion("brand like", value, "brand");return (Criteria) this;}public Criteria andBrandNotLike(String value) {addCriterion("brand not like", value, "brand");return (Criteria) this;}public Criteria andBrandIn(List values) {addCriterion("brand in", values, "brand");return (Criteria) this;}public Criteria andBrandNotIn(List values) {addCriterion("brand not in", values, "brand");return (Criteria) this;}public Criteria andBrandBetween(String value1, String value2) {addCriterion("brand between", value1, value2, "brand");return (Criteria) this;}public Criteria andBrandNotBetween(String value1, String value2) {addCriterion("brand not between", value1, value2, "brand");return (Criteria) this;}public Criteria andGuidePriceIsNull() {addCriterion("guide_price is null");return (Criteria) this;}public Criteria andGuidePriceIsNotNull() {addCriterion("guide_price is not null");return (Criteria) this;}public Criteria andGuidePriceEqualTo(BigDecimal value) {addCriterion("guide_price =", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceNotEqualTo(BigDecimal value) {addCriterion("guide_price <>", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceGreaterThan(BigDecimal value) {addCriterion("guide_price >", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceGreaterThanOrEqualTo(BigDecimal value) {addCriterion("guide_price >=", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceLessThan(BigDecimal value) {addCriterion("guide_price <", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceLessThanOrEqualTo(BigDecimal value) {addCriterion("guide_price <=", value, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceIn(List values) {addCriterion("guide_price in", values, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceNotIn(List values) {addCriterion("guide_price not in", values, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceBetween(BigDecimal value1, BigDecimal value2) {addCriterion("guide_price between", value1, value2, "guidePrice");return (Criteria) this;}public Criteria andGuidePriceNotBetween(BigDecimal value1, BigDecimal value2) {addCriterion("guide_price not between", value1, value2, "guidePrice");return (Criteria) this;}public Criteria andProduceTimeIsNull() {addCriterion("produce_time is null");return (Criteria) this;}public Criteria andProduceTimeIsNotNull() {addCriterion("produce_time is not null");return (Criteria) this;}public Criteria andProduceTimeEqualTo(String value) {addCriterion("produce_time =", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeNotEqualTo(String value) {addCriterion("produce_time <>", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeGreaterThan(String value) {addCriterion("produce_time >", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeGreaterThanOrEqualTo(String value) {addCriterion("produce_time >=", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeLessThan(String value) {addCriterion("produce_time <", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeLessThanOrEqualTo(String value) {addCriterion("produce_time <=", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeLike(String value) {addCriterion("produce_time like", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeNotLike(String value) {addCriterion("produce_time not like", value, "produceTime");return (Criteria) this;}public Criteria andProduceTimeIn(List values) {addCriterion("produce_time in", values, "produceTime");return (Criteria) this;}public Criteria andProduceTimeNotIn(List values) {addCriterion("produce_time not in", values, "produceTime");return (Criteria) this;}public Criteria andProduceTimeBetween(String value1, String value2) {addCriterion("produce_time between", value1, value2, "produceTime");return (Criteria) this;}public Criteria andProduceTimeNotBetween(String value1, String value2) {addCriterion("produce_time not between", value1, value2, "produceTime");return (Criteria) this;}public Criteria andCarTypeIsNull() {addCriterion("car_type is null");return (Criteria) this;}public Criteria andCarTypeIsNotNull() {addCriterion("car_type is not null");return (Criteria) this;}public Criteria andCarTypeEqualTo(String value) {addCriterion("car_type =", value, "carType");return (Criteria) this;}public Criteria andCarTypeNotEqualTo(String value) {addCriterion("car_type <>", value, "carType");return (Criteria) this;}public Criteria andCarTypeGreaterThan(String value) {addCriterion("car_type >", value, "carType");return (Criteria) this;}public Criteria andCarTypeGreaterThanOrEqualTo(String value) {addCriterion("car_type >=", value, "carType");return (Criteria) this;}public Criteria andCarTypeLessThan(String value) {addCriterion("car_type <", value, "carType");return (Criteria) this;}public Criteria andCarTypeLessThanOrEqualTo(String value) {addCriterion("car_type <=", value, "carType");return (Criteria) this;}public Criteria andCarTypeLike(String value) {addCriterion("car_type like", value, "carType");return (Criteria) this;}public Criteria andCarTypeNotLike(String value) {addCriterion("car_type not like", value, "carType");return (Criteria) this;}public Criteria andCarTypeIn(List values) {addCriterion("car_type in", values, "carType");return (Criteria) this;}public Criteria andCarTypeNotIn(List values) {addCriterion("car_type not in", values, "carType");return (Criteria) this;}public Criteria andCarTypeBetween(String value1, String value2) {addCriterion("car_type between", value1, value2, "carType");return (Criteria) this;}public Criteria andCarTypeNotBetween(String value1, String value2) {addCriterion("car_type not between", value1, value2, "carType");return (Criteria) this;}}public static class Criteria extends GeneratedCriteria {protected Criteria() {super();}}public static class Criterion {private String condition;private Object value;private Object secondValue;private boolean noValue;private boolean singleValue;private boolean betweenValue;private boolean listValue;private String typeHandler;public String getCondition() {return condition;}public Object getValue() {return value;}public Object getSecondValue() {return secondValue;}public boolean isNoValue() {return noValue;}public boolean isSingleValue() {return singleValue;}public boolean isBetweenValue() {return betweenValue;}public boolean isListValue() {return listValue;}public String getTypeHandler() {return typeHandler;}protected Criterion(String condition) {super();this.condition = condition;this.typeHandler = null;this.noValue = true;}protected Criterion(String condition, Object value, String typeHandler) {super();this.condition = condition;this.value = value;this.typeHandler = typeHandler;if (value instanceof List) {this.listValue = true;} else {this.singleValue = true;}}protected Criterion(String condition, Object value) {this(condition, value, null);}protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {super();this.condition = condition;this.value = value;this.secondValue = secondValue;this.typeHandler = typeHandler;this.betweenValue = true;}protected Criterion(String condition, Object value, Object secondValue) {this(condition, value, secondValue, null);}}
}

CarMapper.xml配置文件



and ${criterion.condition}and ${criterion.condition} #{criterion.value}and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}and ${criterion.condition}#{listItem}and ${criterion.condition}and ${criterion.condition} #{criterion.value}and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}and ${criterion.condition}#{listItem}id, car_num, brand, guide_price, produce_time, car_typedelete from t_carwhere id = #{id,jdbcType=BIGINT}delete from t_carinsert into t_car (id, car_num, brand, guide_price, produce_time, car_type)values (#{id,jdbcType=BIGINT}, #{carNum,jdbcType=VARCHAR}, #{brand,jdbcType=VARCHAR}, #{guidePrice,jdbcType=DECIMAL}, #{produceTime,jdbcType=CHAR}, #{carType,jdbcType=VARCHAR})insert into t_carid,car_num,brand,guide_price,produce_time,car_type,#{id,jdbcType=BIGINT},#{carNum,jdbcType=VARCHAR},#{brand,jdbcType=VARCHAR},#{guidePrice,jdbcType=DECIMAL},#{produceTime,jdbcType=CHAR},#{carType,jdbcType=VARCHAR},update t_carid = #{row.id,jdbcType=BIGINT},car_num = #{row.carNum,jdbcType=VARCHAR},brand = #{row.brand,jdbcType=VARCHAR},guide_price = #{row.guidePrice,jdbcType=DECIMAL},produce_time = #{row.produceTime,jdbcType=CHAR},car_type = #{row.carType,jdbcType=VARCHAR},update t_carset id = #{row.id,jdbcType=BIGINT},car_num = #{row.carNum,jdbcType=VARCHAR},brand = #{row.brand,jdbcType=VARCHAR},guide_price = #{row.guidePrice,jdbcType=DECIMAL},produce_time = #{row.produceTime,jdbcType=CHAR},car_type = #{row.carType,jdbcType=VARCHAR}update t_carcar_num = #{carNum,jdbcType=VARCHAR},brand = #{brand,jdbcType=VARCHAR},guide_price = #{guidePrice,jdbcType=DECIMAL},produce_time = #{produceTime,jdbcType=CHAR},car_type = #{carType,jdbcType=VARCHAR},where id = #{id,jdbcType=BIGINT}update t_carset car_num = #{carNum,jdbcType=VARCHAR},brand = #{brand,jdbcType=VARCHAR},guide_price = #{guidePrice,jdbcType=DECIMAL},produce_time = #{produceTime,jdbcType=CHAR},car_type = #{carType,jdbcType=VARCHAR}where id = #{id,jdbcType=BIGINT}

(4)编写测试程序(增强版)

(1)增强版的查询方式就比较特殊,特别是根据条件查询,是QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句!

(2)条件查询步骤:

①先封装条件,通过CarExample对象来封装查询条件

②调用carExample.createCriteria()方法来创建查询条件,后面通过" 点. "的方式跟上方法

package com.bjpowernode.mybatis.test;import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.pojo.CarExample;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.math.BigDecimal;
import java.util.List;public class CarMapperTest {@Testpublic void testSelect(){SqlSession sqlSession = SqlSessionUtil.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);// 执行查询// 1. 查询一个Car car = mapper.selectByPrimaryKey(34L);System.out.println(car);// 2. 查询所有(selectByExample,根据条件查询,如果条件是null表示没有条件)List cars = mapper.selectByExample(null);cars.forEach(car1 -> System.out.println(car1));System.out.println("==================");// 3.按照条件进行查询// QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。// 3.1 封装条件,通过CarExample对象来封装查询条件CarExample carExample = new CarExample();// 3.2调用carExample.createCriteria()方法来创建查询条件carExample.createCriteria().andBrandLike("帕萨特").andGuidePriceGreaterThan(new BigDecimal(20.0));// 添加orcarExample.or().andCarTypeEqualTo("燃油车");// 执行查询List cars1 = mapper.selectByExample(carExample);cars1.forEach(car1 -> System.out.println(car1));sqlSession.close();}}

以上的SQL语句就等价于:

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...