- 浏览: 412135 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (347)
- java基础 (58)
- ajax (10)
- s2sh (10)
- 版本控制 (4)
- 数据库 (34)
- 服务器 (4)
- 开发工具 (8)
- javascript (15)
- soockte (5)
- ext (2)
- 环境搭建 (7)
- struts2 (9)
- 找工作中的面试技巧 (2)
- 承接网站零活 (0)
- JNI+JONSE+OGNL (8)
- 性能优化 (4)
- Android开发 (5)
- xul (8)
- jquery (2)
- 线程 (3)
- jsp+jdbc (7)
- servlet (2)
- java对xml操作 (1)
- IO流的操作 (10)
- 项目开发前配置 (1)
- css (0)
- 上传、下载 (2)
- 知识探讨 (2)
- html (2)
- HQL (0)
- 工作技巧 (1)
- IT (1)
- Hibernate杂谈 (10)
- Spring杂谈 (35)
- DWR (5)
- JUnit测试 (3)
- EasyMock测试web (1)
- ibatis (6)
- maysql (5)
- C++ (0)
- 正则表达式(解剖) (1)
- 密码安全 (2)
- 上传 (1)
- socket (1)
- jni(java与c++结合) (1)
- jdk版本问题 (0)
- tomcat版本问题 (5)
- linux基本命令(初学) (7)
- linux项目发布 (1)
- 3年的经验总结 (1)
- 加解密 (2)
- 高级java阶段 (2)
- java内存分区 (1)
- 浏览器 (1)
- 职业规划 (1)
- 管理 (5)
- java语音 (1)
- SSH (1)
- jsp (3)
- extjs (1)
- uml (2)
- 加密 (1)
- web (2)
- Ant (1)
- 自述 (1)
- Linux (1)
- ssh源码解剖 (1)
- 代码优化 (1)
- 设计模式 (0)
- xml (2)
- JOSN (1)
- scala (0)
- hadoop (0)
- spark (0)
- hana (1)
- shior (1)
- java Word (6)
- java PDF (4)
- java Excel (0)
最新评论
-
高级java工程师:
ztao2333 写道谢谢。收藏下这个总结。呵呵
温习jdk和tomcat -
ztao2333:
大写的,不是大学的
温习jdk和tomcat -
ztao2333:
谢谢。收藏下这个总结。
温习jdk和tomcat -
the_small_base_:
你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢
java实现语音 -
高级java工程师:
文思涌动 写道楼主新年好。可否再传一遍给我,我没有收到, 不清 ...
s2sh整合
相对Hibernate和Apache OJB 等“一站式”ORM解决方案而言,ibatis 是一种“半
自动化”的ORM实现。
所谓“半自动”,可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate 还是
Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全
套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate
或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,
Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执
行。 ----摘自官方资料的一段话
iBatis是一种很好的解决方案,使用起来很灵活,参考一些网络中的资料我也想把自己的使用过程写下来,如有错误希望指正。
环境:JDK1.5+Eclipse3.2 使用时仅需要在Eclipse中导入项目。
首先是表结构, 提供了两种数据库的支持分别为MySQL与hsqldb,可以根据实际情况选择使用。以MySQL为例:
Java代码
然后是iBatis的配置文件 SqlMapConfig.xml
这里进行数据源的配置以及一些参数的设置和优化
Java代码
User.java就是domain了,是映射的对象。
Java代码
下面是比较重要的SQL Map XML映射文件,所有方法都在这里。
User.xml
Java代码
这样就可以来测试了,测试也使用了两种方法,先使用一个普通应用程序来测试一下程序的运行好了
Java代码
方便测试,首先为SqlMap的单元测试编写一个抽象的测试基类
Java代码
然后为每个SqlMap映射文件编写一个测试用例,extends上面的抽象类
Java代码
注意,其中测试insert时由于id为auto_increment,可能需要对测试数据中<dataset/>进行设置,网络中并未查询到相关的方法,所以在映射文件中加入了一个
Java代码
用例测试中测试的是insertUserTest,并非insertUser,请注意。
到这里就结束了,demo比较简单,希望能给大家带来帮助。
参考:
http://ibatis.apache.org/
http://hsqldb.org/
http://www.dbunit.org/
自动化”的ORM实现。
所谓“半自动”,可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate 还是
Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全
套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate
或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,
Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执
行。 ----摘自官方资料的一段话
iBatis是一种很好的解决方案,使用起来很灵活,参考一些网络中的资料我也想把自己的使用过程写下来,如有错误希望指正。
环境:JDK1.5+Eclipse3.2 使用时仅需要在Eclipse中导入项目。
首先是表结构, 提供了两种数据库的支持分别为MySQL与hsqldb,可以根据实际情况选择使用。以MySQL为例:
Java代码
create database if not exists `ibatis_schema`; USE `ibatis_schema`; drop table if exists `t_user`; CREATE TABLE `t_user` ( `id` int(12) NOT NULL auto_increment, `name` varchar(50) default NULL, `date` date default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=GBK; Insertinto `t_user`(name,date) values('liulu','2007-03-15'),('liulu2','2007-03-15'),('liulu3','2007-03-15');
然后是iBatis的配置文件 SqlMapConfig.xml
这里进行数据源的配置以及一些参数的设置和优化
Java代码
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" useStatementNamespaces="true" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/ibatis_schema" /> <property name="JDBC.Username" value="root" /> <property name="JDBC.Password" value="1234" /> </dataSource> </transactionManager> <sqlMap resource="com/javaeye/liulu/maps/User.xml" /> </sqlMapConfig>
User.java就是domain了,是映射的对象。
Java代码
package com.javaeye.liulu.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ private int id; private String name; private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
下面是比较重要的SQL Map XML映射文件,所有方法都在这里。
User.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="User"> <typeAlias alias="UserObject" type="com.javaeye.liulu.domain.User" /> <resultMap id="userResult" class="UserObject"> <result property="id" column="id" jdbcType="NUMBER" /> <result property="name" column="name" jdbcType="VARCHAR2" /> <result property="date" column="date" jdbcType="DATE" /> </resultMap> <select id="getByPK" resultMap="userResult" parameterClass="UserObject"> <![CDATA[ select id, name, date from t_user where id = #id# ]]> </select> <select id="getById" resultMap="userResult" parameterClass="java.lang.String"> <![CDATA[ select id, name, date from t_user where id = $String$ ]]> </select> <sql id="Dy_SC"> <dynamic prepend="WHERE"> <isNotNull prepend="AND" property="id">id like #id#</isNotNull> <isNotNull prepend="AND" property="name">name like #name#</isNotNull> </dynamic> </sql> <select id="getUser" resultMap="userResult"> <![CDATA[ select id, name, date from t_user ]]> <include refid="Dy_SC" /> </select> <insert id="insertUser" parameterClass="UserObject"> INSERT INTO t_user (name,date) VALUES (#name#,#date#) </insert> <insert id="insertUserTest" parameterClass="UserObject"> INSERT INTO t_user (id,name,date) VALUES (#id#,#name#,#date#) </insert> <update id="updateUser" parameterClass="UserObject"> <![CDATA[ UPDATE t_user SET name=#name#, date=#date# WHERE id = #id# ]]> </update> <delete id="deleteUser" parameterClass="java.lang.String"> delete from t_user where id=#value# </delete> <statement id="getMaxId" resultClass="java.lang.Integer"> select Max(id) from t_user </statement> <statement id="getMax" resultClass="java.util.HashMap"> select Max(id) as id,Max(name) as name,Max(date) as date from t_user </statement> </sqlMap>
这样就可以来测试了,测试也使用了两种方法,先使用一个普通应用程序来测试一下程序的运行好了
Java代码
package com.javaeye.liulu; import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import com.ibatis.common.jdbc.ScriptRunner; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.javaeye.liulu.domain.User; public class Main { //hsql初始化,对MySQL没有影响 static { try { Properties props = Resources.getResourceAsProperties("properties/database.properties"); String url = props.getProperty("url"); String driver = props.getProperty("driver"); String username = props.getProperty("username"); String password = props.getProperty("password"); if (url.equals("jdbc:hsqldb:mem:ibatisDemo")) { Class.forName(driver).newInstance(); Connection conn = DriverManager.getConnection(url, username, password); try { ScriptRunner runner = new ScriptRunner(conn, false, false); runner.setErrorLogWriter(null); runner.setLogWriter(null); runner.runScript(Resources.getResourceAsReader("ddl/hsql/ibatisdemo-hsqldb-schema.sql")); runner.runScript(Resources.getResourceAsReader("ddl/hsql/ibatisdemo-hsqldb-dataload.sql")); } finally { conn.close(); } } } catch (Exception e) { throw new RuntimeException("Description. Cause: " + e, e); } } /** * 初始化iBatis获得一个SqlMapClient对象 * * @param * @return SqlMapClient */ public static SqlMapClient getSqlMapClient() { String resource = "com/javaeye/liulu/maps/SqlMapConfig.xml"; SqlMapClient sqlMap = null; try { Reader reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); } return sqlMap; } /** * 插入一条记录 * * @param * @return */ public static void insert() { SqlMapClient sqlMap = getSqlMapClient(); try { sqlMap.startTransaction(); User user = new User(); user.setName("insert1"); user.setDate(new Date()); sqlMap.insert("User.insertUser", user); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } } /** * 将第一条记录的信息更新 * * @param * @return */ public static void update() { SqlMapClient sqlMap = getSqlMapClient(); try { sqlMap.startTransaction(); User user = (User)sqlMap.queryForObject("User.getById", "1"); user.setName("update1"); sqlMap.update("User.updateUser", user); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } finally { try { sqlMap.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 删除id最大的记录 * * @param * @return */ public static void delete() { SqlMapClient sqlMap = getSqlMapClient(); try { sqlMap.startTransaction(); String maxId = sqlMap.queryForObject("User.getMaxId", null).toString(); sqlMap.delete("User.deleteUser", maxId); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } } /** * 根据name查询User为Map的List * * @param * @return List */ public static List getUser() { SqlMapClient sqlMap = getSqlMapClient(); List<User> user = null; try { sqlMap.startTransaction(); HashMap params = new HashMap(); params.put("name", "%liulu%"); user = sqlMap.queryForList("User.getUser", params); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } finally { try { sqlMap.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } return user; } /** * 查询各个字段的最大值(一般用于统计,此处演示使用方法) * * @param * @return */ public static void getMax() { SqlMapClient sqlMap = getSqlMapClient(); try { sqlMap.startTransaction(); Map search = (HashMap) sqlMap.queryForObject("User.getMax", null); System.out.println(search.get("id").toString() + "\n" + search.get("name").toString() + "\n" + search.get("date").toString()); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } } /** * 通过主键查找,返回user * * @param * @return */ public static void getByPK() { SqlMapClient sqlMap = getSqlMapClient(); User user = new User(); try { sqlMap.startTransaction(); user.setId(1); user = (User) sqlMap.queryForObject("User.getByPK", user); System.out.println(user.getId() + "\n" + user.getName() + "\n" + user.getDate()); sqlMap.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { //insert(); //update(); //delete(); List<User> user = getUser(); for (User o : user) { System.out.println("id:" + o.getId() + "\nname:" + o.getName() + "\nDate:" + o.getDate() + "\n------------"); } //getMax(); //getByPK(); } }
方便测试,首先为SqlMap的单元测试编写一个抽象的测试基类
Java代码
package com.javaeye.liulu.test; import java.io.Reader; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; import javax.sql.DataSource; import org.dbunit.DatabaseTestCase; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import com.ibatis.common.resources.Resources; import com.ibatis.db.util.ScriptRunner; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public abstract class BaseSqlMapTest extends DatabaseTestCase { protected static SqlMapClient sqlMap; protected IDatabaseConnection getConnection() throws Exception { return new DatabaseConnection(getJdbcConnection()); } protected void setUp() throws Exception { super.setUp(); init(); } protected void tearDown() throws Exception { super.tearDown(); getConnection().close(); if (sqlMap != null) { DataSource ds = sqlMap.getDataSource(); Connection conn = ds.getConnection(); conn.close(); } } protected void init() throws Exception { initSqlMap("com/javaeye/liulu/maps/SqlMapConfig.xml", null); } protected SqlMapClient getSqlMapClient() { return sqlMap; } protected void initSqlMap(String configFile, Properties props) throws Exception { Reader reader = Resources.getResourceAsReader(configFile); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader, props); reader.close(); } protected void initScript(String script) throws Exception { DataSource ds = sqlMap.getDataSource(); Connection conn = ds.getConnection(); Reader reader = Resources.getResourceAsReader(script); ScriptRunner runner = new ScriptRunner(); runner.setStopOnError(false); runner.setLogWriter(null); runner.setErrorLogWriter(null); runner.runScript(conn, reader); conn.commit(); conn.close(); reader.close(); } private Connection getJdbcConnection() throws Exception { /* Properties props = new Properties(); props.load(Resources.getResourceAsStream("properties/database.properties")); Class driver = Class.forName(props.getProperty("driver")); Connection conn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password")); */ Class driver = Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/ibatis_schema","root","1234"); return conn; } }
然后为每个SqlMap映射文件编写一个测试用例,extends上面的抽象类
Java代码
package com.javaeye.liulu.test; import java.io.Reader; import java.util.Date; import java.util.HashMap; import java.util.List; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.operation.DatabaseOperation; import com.ibatis.common.resources.Resources; import com.javaeye.liulu.domain.User; public class UserTest extends BaseSqlMapTest { protected IDataSet getDataSet() throws Exception { Reader reader = Resources.getResourceAsReader("com/javaeye/liulu/test/user_seed.xml"); return new FlatXmlDataSet(reader); } public void testGetByPK() throws Exception { User user = new User(); user.setId(1); user = (User) sqlMap.queryForObject("User.getByPK", user); assertNotNull(user); assertEquals(user.getId(), 1); assertEquals(user.getName(), "liulu"); assertEquals(user.getDate().getDay(), 1); } public void testGetUser() throws Exception { List users = null; HashMap params = new HashMap(); params.put("name", "%liulu%"); users = (List) sqlMap.queryForList("User.getUser", params); assertEquals(users.size(),3); } public void testInsertUser() throws Exception { User user = new User(); user.setId(4); user.setName("insert1"); user.setDate(new Date()); sqlMap.insert("User.insertUserTest", user); User user2 = new User(); user2.setId(4); user2 = (User) sqlMap.queryForObject("User.getById", "4"); assertEquals(user.getId(),user2.getId()); assertEquals(user.getName(),user2.getName()); } public void testUpdateUser() throws Exception { User user = (User)sqlMap.queryForObject("User.getById", "1"); user.setName("liulu7"); sqlMap.update("User.updateUser", user); User user2 = (User)sqlMap.queryForObject("User.getById", "1"); assertEquals(user2.getName(),"liulu7"); } public void testDeleteUser() throws Exception { int num = sqlMap.delete("User.deleteUser", "1"); assertEquals(num,1); } public void testGetMaxId() throws Exception { int i = (Integer)sqlMap.queryForObject("User.getMaxId", null); assertEquals(3,i); } }
注意,其中测试insert时由于id为auto_increment,可能需要对测试数据中<dataset/>进行设置,网络中并未查询到相关的方法,所以在映射文件中加入了一个
Java代码
<insert id="insertUserTest" parameterClass="UserObject"> INSERT INTO t_user (id,name,date) VALUES (#id#,#name#,#date#) </insert>
用例测试中测试的是insertUserTest,并非insertUser,请注意。
到这里就结束了,demo比较简单,希望能给大家带来帮助。
参考:
http://ibatis.apache.org/
http://hsqldb.org/
http://www.dbunit.org/
发表评论
-
myeclipse 安装 ibatis 插件 自动生成java代码
2013-05-15 12:08 1218一.安装插件 从http://ibatis.apache.or ... -
hibernate于ibatis如何处理updateUser?
2012-12-07 15:35 736hibernate? 当new一个user的时候,是处于 ... -
ibatis开发指南
2012-03-12 10:57 1802相对Hibernate和Apache OJB 等“一站式”OR ... -
ibatis学习
2011-09-12 14:49 621本文在http://sarin.iteye.com/blog/ ... -
ibatis增删改查实例
2011-09-12 14:24 1161相对Hibernate和Apache OJB 等“一站式”OR ...
相关推荐
在这个"struts+ibatas+mysql(1)"的小项目中,我们可以推测开发者可能创建了一个简单的Web应用,利用Struts框架来处理用户的请求,通过iBatis与MySQL数据库交互,实现数据的增删查改操作。项目的第一部分可能涉及了...
基于风光负荷不确定性的微电网两阶段鲁棒优化模型:投资与运行成本的综合考虑及CCG算法的Matlab+Yamilp+CPLEX求解方法,考虑风光负荷的不确定性,构建了微电网两阶段鲁棒优化容量配置模型,第一阶段目标函数为微电网投资成本,第二阶段目标函数为微电网的运行成本。 采用CCG算法求解。 包含非线性项的线性化处理。 程序代码matlab+yamilp+CPLEX ,核心关键词: 微电网; 两阶段鲁棒优化; 容量配置模型; CCG算法; 线性化处理; MATLAB; YAMILP; CPLEX 用分号分隔每个关键词的结果为: 微电网; 两阶段鲁棒优化; 容量配置模型; CCG算法; 线性化处理; MATLAB; Yamilp; CPLEX,微电网鲁棒优化模型:两阶段成本最小化与线性化处理
西门子S7-200PLC在Z35摇臂钻床控制系统中的应用与组态王组态设计研究,98西门子S7-200PLC和组态王组态Z35摇臂钻床控制系统组态设计PLC设计 ,西门子S7-200PLC; 组态王组态; 摇臂钻床控制系统; PLC设计,西门子S7-200PLC与组态王Z35摇臂钻床控制系统组态设计
烟花代码编程python满屏-10.排队接水——我直接把水吸过来.py
基于三菱PLC的喷灌控制系统设计及组态画面实现,No.393 三菱PLC组态王组态画面基于PLC的喷灌控制设计灌溉控制 ,基于三菱PLC; 喷灌控制设计; 组态王组态画面; 灌溉控制。,基于三菱PLC的喷灌控制设计:组态王组态画面应用
基于Dijkstra算法的路径规划Matlab代码:读取黑白色地图并实现图像上的路径规划示例,读取黑白色地图,在图片上进行路径规划matlab代码 路径规划算法基于读图识别的Dijkstra算法 随意设置坐标,规划路径 示例如下 ,读取地图; 路径规划算法; Dijkstra算法; 坐标设置; 规划路径,基于Dijkstra算法的Matlab黑白色地图路径规划代码
融合空间特征的债券图表数据文本检测方法研究.pdf
基于粒子群优化与遗传算法的高速列车横向悬挂模糊PID控制技术研究:s函数建模与仿真分析详解文件,基于粒子群 遗传算法的高速列车横向悬挂模糊PID控制-s函数搭建。 赠word详解文件 ,基于粒子群; 遗传算法; 高速列车横向悬挂; 模糊PID控制; s函数搭建,基于遗传算法的高速列车悬挂PID模糊控制的S函数构建方案
一种基于Retinex的非线性彩色图像增强算法.pdf
基于因式分解的逆合成孔径雷达三维成像技术及序列因子分解法研究,逆合成孔径雷达三维成像,因式分解法,序列因子分解法。 此部分只做了因式分解的工作,假设散射点已经准确提取并得到散射点坐标矩阵,利用因式分解恢复目标三维结构 ,逆合成孔径雷达三维成像; 因式分解法; 序列因子分解; 散射点提取; 散射点坐标矩阵; 恢复目标三维结构。,利用因式分解恢复三维结构:逆合成孔径雷达三维成像技术
MATLAB R2021b环境下深度学习驱动的车道线检测算法研究与应用,MATLAB环境下一种基于深度学习的车道线检测方法 算法运行环境为matlab r2021b,执行基于深度学习的车道线检测。 if batch ~= numBatches lastFrameIdx = miniBatchSize*batch; else 压缩包=数据+程序 ,核心关键词如下: MATLAB环境; 深度学习; 车道线检测; 算法运行环境; 批处理; 压缩包 以上关键词用分号分隔为: MATLAB环境; 深度学习; 车道线检测; 算法运行环境r2021b; 批处理(batch~numBatches); 压缩包(数据+程序) 注意:最后一个关键词“压缩包”并不是直接从您提供的信息中提炼出来的,而是根据您提到的“压缩包=数据+程序”这一句推断出来的。如果这不是您想要的核心关键词,请告诉我,我会进行相应的调整。,MATLAB深度学习车道线检测算法压缩包
西门子S7-200PLC在物料自动称量控制系统中的应用:基于称重配料混合程序的组态设计与王设计PLC程序设计,74基西门子S7-200PLC的物料自动称量控制系统称重配料物料混合程序组态设计组态设计组态王设计plc程序设计 ,核心关键词:西门子S7-200PLC;自动称量控制系统;物料混合程序;组态设计;组态王设计;PLC程序设计。,西门子S7-200PLC物料自动称量控制系统称重配料程序组态设计
优化无人机侦查与目标搜索路径规划:对未知区域进行覆盖并精确寻靶的Matlab代码解析与实践指南。,无人机覆盖搜索路径规划 无人机搜索目标路径规划 无人机侦查路径规划 对未知区域进行覆盖搜索,并且寻找目标 matlab代码有详细注释,可快速上手。 ,核心关键词:无人机; 覆盖搜索路径规划; 搜索目标路径规划; 侦查路径规划; 未知区域覆盖搜索; MATLAB代码注释。,**无人机未知区域覆盖搜索及目标路径规划Matlab代码详解**
shp格式,可直接导入arcgis使用
基于博途软件编程的11层电梯控制系统:文档齐全,优质售后保障的智能运行体验,基于PLC的单部11层电梯控制系统,采用博途软件编写提供画面,文档(含接线图,流程图,IO分配表)及优质的后服务。 最终运行效果,详见上方演示视频 ,核心关键词:PLC控制;11层电梯;博途软件;画面编写;文档资料;接线图;流程图;IO分配表;售后服务;演示视频。,"博途软件控制下的11层电梯系统,高效运行效果详见演示视频"
"飞剪追剪程序:PLC与伺服同步控制完整指南,适合新手学习与参考,包含PLC程序、触摸屏程序及CAD电路图纸",飞剪追剪程序plc程序伺服程序 同步控制 适合新手学习参考 包含PLC程序+触摸屏程序+CAD电路图纸。 ,飞剪追剪程序; PLC程序; 伺服程序; 同步控制; 新手学习参考; PLC程序+触摸屏程序; CAD电路图纸,适合新手的飞剪追剪程序全套教程:PLC+伺服同步控制
使用Matlab编程:无迹卡尔曼滤波算法(UKF)的编写及其在电池SOC估计中的应用,噪声系数自适应优化方案的研究。,使用matlab编写m脚本,编写无迹卡尔曼滤波算法(UKF)估计电池SOC,注释清晰。 卡尔曼滤波算法(EKF)锂电池SOC估计,噪声系数自适应 Matlab ,matlab; 无迹卡尔曼滤波算法(UKF); 电池SOC估计; 注释清晰; 噪声系数自适应。,Matlab无迹卡尔曼滤波(UKF)用于电池SOC估计的代码实现
Ansys LS-DYNA多孔延时起爆与重复起爆模拟的完整过程解析,Ansys ls_dyna多孔延时起爆,重复起爆模拟 全过程 ,Ansys;LS_dyna;多孔延时起爆;重复起爆模拟;全过程,Ansys LS-DYNA多孔延时重复起爆模拟全过程
FPGA驱动双目视觉系统:立体匹配、视差图与深度图生成技术的研究与应用,FPGA双目视觉 立体视觉 视差图 深度图 双目立体匹配sgm sgbm tang 20k 高云fpga usb摄像头采集图像 ,FPGA双目视觉;立体视觉;视差图;深度图;双目立体匹配sgm;sgbm;高云FPGA;USB摄像头图像采集。,基于FPGA的双目视觉系统:立体匹配与深度图生成
整个手套大盘的指数图如下.docx