`
ponlya
  • 浏览: 165403 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3笔记之 JDBC

阅读更多

使用Spring 的JDBC

先创建表:

DROP TABLE IF EXISTS `springjdbc`.`t_people`;
CREATE TABLE  `springjdbc`.`t_people` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `birthDay` datetime DEFAULT NULL,
  `sex` tinyint(1) DEFAULT NULL,
  `weight` double DEFAULT NULL,
  `height` float DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

 

再创建实体对象:

com.spring305.jdbc.po.People.java

public class People implements Serializable {

	private static final long serialVersionUID = -8692237020492316757L;
	private int id;
	private String name;
	private Date birthDay;
	private Boolean sex;
	private Double weight;
	private float height;
	
	public People() {
		super();
	}
	public People(int id, String name, Date birthDay, Boolean sex,
			Double weight, float height) {
		super();
		this.id = id;
		this.name = name;
		this.birthDay = birthDay;
		this.sex = sex;
		this.weight = weight;
		this.height = height;
	}
...
}

 DAO接口:

com.spring305.jdbc.dao.PeopleDao.java

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.spring305.jdbc.page.CurrentPage;
import com.spring305.jdbc.po.People;

/**
 * DAO接口
 * @author ZhengChao
 *
 */
public interface PeopleDao {
	
	/**
	 * 创建数据库表结构
	 * @param sql
	 * @return
	 */
	void doCreateTable(String sql);
	
	/**
	 * 保存对象
	 * @param p
	 */
	void doSaveObj(People p);
	
	/**
	 * 通过主键删除对象
	 * @param id
	 */
	void doDeleteObj(int id);
	
	/**
	 * 更新对象
	 * @param p
	 */
	void doUpdateObj(People p);
	
	/**
	 * 通过主键得到对象
	 * @param id
	 * @return
	 */
	Serializable getObjByID(int id);
	
	/**
	 * 通过主键得到日期类属性
	 * @param id
	 * @return
	 */
	Date getBirthDay(int id);
	
	/**
	 * 通过主键得到名字属性
	 * @param id
	 * @return
	 */
	String getNameAttri(int id);
	
	/**
	 * 通过主键拿到对象集合
	 * @param id
	 * @return
	 */
	List<People> getObjsByID(int id);
	
	/**
	 * 取总和
	 * @return
	 */
	int getCountEntites();
	
	/**
	 * 得到对象的集合
	 * @return
	 */
	List<Map<String, Object>>	getList();
	
	/**
	 * 分页查找 
	 * @param pageNo
	 * @param pageSize
	 * @param id
	 * @return
	 * @throws SQLException
	 */
	CurrentPage<People> getPeoplePage(final int pageNo, final int pageSize,int id) throws SQLException; 
	
	/**
	 * 使用NamedParameterJdbcTemplate命名参数
	 * @param id
	 * @return
	 */
	int getNamedParameterJdbcCounts(int id);
	
	/**
	 * 得到自动生成的主键
	 * @return
	 */
	int getAutoIncrementKey();
	
	/**
	 * 批处理
	 * @param actors
	 * @return
	 */
	int[] batchUpdate(final List<People> actors);
	
	
	
}

 

实现类:

com.spring305.jdbc.dao.impl.PeopleDaoImpl.java

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import com.spring305.jdbc.dao.PeopleDao;
import com.spring305.jdbc.page.CurrentPage;
import com.spring305.jdbc.page.PagingHelper;
import com.spring305.jdbc.po.People;

public class PeopleDaoImpl implements PeopleDao {

	//private DataSource dataSource;
	private JdbcTemplate jdbcTemplate;
	
	//NamedParameterJdbcTemplate为JDBC操作增加了命名参数的特性支持,而不是传统的使用('?')作为参数的占位符。
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	
	private SimpleJdbcTemplate simpleJdbcTemplate;
	
	public void setDataSource(DataSource dataSource) {
		//this.dataSource = dataSource;
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
		this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
		
		/**
		 *DriverManagerDataSource dataSource2 = new DriverManagerDataSource();
		dataSource2.setDriverClassName("org.hsqldb.jdbcDriver");
		dataSource2.setUrl("jdbc:hsqldb:hsql://localhost:");
		dataSource2.setUsername("sa");
		dataSource2.setPassword(""); 
		 */
	}

	/**
	 *官方文档上还有例子:
	 *this.jdbcTemplate.update("insert into t_actor (first_name, last_name) values (?, ?)","Leonor", "Watling");
	 *this.jdbcTemplate.update("update t_actor set = ? where id = ?","Banjo", 5276L);
	 *this.jdbcTemplate.update("delete from actor where id = ?",Long.valueOf(actorId));
	 *存储过程:
	 *this.jdbcTemplate.update("call SUPPORT.REFRESH_ACTORS_SUMMARY(?)",Long.valueOf(unionId));
	 */
	
	@Override
	public void doCreateTable(String sql) {
		this.jdbcTemplate.execute(sql);
	}

	@Override
	public void doDeleteObj(int id) {
		this.jdbcTemplate.update("delete from T_people where id = ?",id);//Long.valueOf(id)
	}

	@Override
	public void doSaveObj(People p) {
		//插入方式其一 ,原始的,拼写sql语句后直接发送执行
		/**
		 * this.jdbcTemplate.update("insert into T_people(name,birthDay,sex,weight,height) values(" +
				"'"+p.getName()+"','"+new java.sql.Timestamp(p.getBirthDay().getTime())+"',"+p.getSex()+","+p.getWeight()+","+p.getHeight()+")");
		*/
		//插入方式二
		jdbcTemplate.update("insert into T_people(name,birthDay,sex,weight,height) values(?,?,?,?,?)", 
				new Object[]{p.getName(),p.getBirthDay(),p.getSex(),p.getWeight(),p.getHeight()},
				new int[]{java.sql.Types.VARCHAR,java.sql.Types.TIMESTAMP,java.sql.Types.BOOLEAN,
				//java.sql.Types.DATE,则插入的只有日期,没有时间,2011-04-24 00:00:00;TIMESTAMP:2011-04-24 19:09:24
				java.sql.Types.DOUBLE,java.sql.Types.FLOAT});
		
		
	}
////id name birthDay sex weight height
	@Override
	public void doUpdateObj(People p) {
		jdbcTemplate.update("update T_people set name = ? , birthDay = ? , sex = ? , weight = ? , height = ?  where id = ? ", 
				new Object[]{p.getName(),p.getBirthDay(),p.getSex(),
				p.getWeight(),p.getHeight(),p.getId()},
				new int[]{java.sql.Types.VARCHAR,java.sql.Types.DATE,java.sql.Types.BOOLEAN,
				java.sql.Types.DOUBLE,java.sql.Types.FLOAT,java.sql.Types.INTEGER});
		
	}

	@Override
	public int getCountEntites() {
		//int rowCount = this.jdbcTemplate.queryForInt("select count(*) from T_People");
		int rowCount = this.jdbcTemplate.queryForInt("select count(*) from T_people where id >= ?",new Object[]{1});
		//select count(*) from T_people where id >= ?
		//= this.jdbcTemplate.queryForInt("select count(*) from T_People where name = ?", "XXX");
		return rowCount;
	}

	@Override
	public Serializable getObjByID(int id) {
		//Query for a String 
		//this.jdbcTemplate.queryForObject("select name from T_People where id = ?",new Object[]{1212}, String.class);
		People p = this.jdbcTemplate.queryForObject("select * from T_people where id = ?", new Object[]{id}, 
				new RowMapper<People>() {
					@Override
					public People mapRow(ResultSet rs, int rowNum)
							throws SQLException {
						People p = new People();
						p.setId(rs.getInt("id"));
						p.setName(rs.getString("name"));
						p.setBirthDay(rs.getDate("birthDay"));
						p.setWeight(rs.getDouble("weight"));
						p.setHeight(rs.getFloat("height"));
						p.setSex(rs.getBoolean("sex"));
						return p;
					}
				}
		);
		return p;
	}

	@Override
	public List<People> getObjsByID(int id) {
		List<People> plist = this.jdbcTemplate.query("select * from T_people where id >= ?", new Object[]{id}, 
				new RowMapper<People>() {
					@Override
					public People mapRow(ResultSet rs, int rowNum)
							throws SQLException {
						People p = new People();
						p.setId(rs.getInt("id"));
						p.setName(rs.getString("name"));
						p.setBirthDay(rs.getDate("birthDay"));
						p.setWeight(rs.getDouble("weight"));
						p.setHeight(rs.getFloat("height"));
						p.setSex(rs.getBoolean("sex"));
						return p;
					}
				}
		);
		return plist;
	}
	
	//上面这个List也可以用下面来实现
	public List<People> getObjsByID2(int id) {
		return this.jdbcTemplate.query("select * from T_people where id >= ?", new Object[]{id},new PeopleMapper()); 
	}
	
	private static final class PeopleMapper implements RowMapper<People> {
		public People mapRow(ResultSet rs, int rowNum) throws SQLException {
			People p = new People();
			p.setId(rs.getInt("id"));
			p.setName(rs.getString("name"));
			p.setBirthDay(rs.getDate("birthDay"));
			p.setWeight(rs.getDouble("weight"));
			p.setHeight(rs.getFloat("height"));
			p.setSex(rs.getBoolean("sex"));
		return p;
		}
	}
	

	@Override
	public String getNameAttri(int id) {
		String name = this.jdbcTemplate.queryForObject(
				"select name from T_people where id = ?",
				new Object[]{id}, String.class);
		return name;
	}

	@Override
	public Date getBirthDay(int id) {
		return this.jdbcTemplate.queryForObject(
				"select birthDay from T_people where id = ?",
				new Object[]{id}, Date.class);
	}


	@Override
	public List<Map<String, Object>> getList() {
		return this.jdbcTemplate.queryForList("select * from T_people ");
	}

	@Override
	public int[] batchUpdate(final List<People> peoples) {
		int[] updateCounts = jdbcTemplate.batchUpdate("update T_people set name = ? where id = ?",
				new BatchPreparedStatementSetter() {
					public void setValues(PreparedStatement ps, int i) throws SQLException {
						ps.setString(1, peoples.get(i).getName());
						ps.setInt(2, peoples.get(i).getId());
					}
					public int getBatchSize() {
						return peoples.size();
					}
				});
		return updateCounts;
	}
	
	/**
	 * 返回分页后结果
	 * @param pageNo
	 * @param pageSize
	 * @param id
	 * @return
	 * @throws SQLException
	 */
	public CurrentPage<People> getPeoplePage(final int pageNo, final int pageSize,int id) throws SQLException {
		 PagingHelper<People> ph = new PagingHelper<People>();  
		 CurrentPage<People> p = ph.fetchPage(jdbcTemplate,
				 "select count(*) from T_people where id >= ?",//sqlCountRows
				 "select * from T_people where id >= ?",//sqlFetchRows
				 new Object[]{id},//args
				 pageNo,//pageSize
				 pageSize,
				 new ParameterizedRowMapper<People>() {
	                    public People mapRow(ResultSet rs, int i) throws SQLException {
	                        return new People(
	                        		rs.getInt(1),//name,birthDay,sex,weight,height
	                        		rs.getString(2),
	                        		rs.getTimestamp(3),
	                        		rs.getBoolean(4),
	                        		rs.getDouble(5),
	                        		rs.getFloat(6)
	                        );
	                    }
	                }
		 );
		return p;
	}

	@Override
	public int getNamedParameterJdbcCounts(int id) {
		String sql = "select count(*) from T_people where id >= :id";
		SqlParameterSource namedParameters = new MapSqlParameterSource("id", id);
		//传一个对象
		//SqlParameterSource namedParametersx = new BeanPropertySqlParameterSource(new People());
		return namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
	}

	@Override
	public int getAutoIncrementKey() {
		final String INSERT_SQL = "insert into T_people (name) values(?)";
		final String name = "test getAutoIncrementKey";

		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplate.update(
		    new PreparedStatementCreator() {
				@Override
				public PreparedStatement createPreparedStatement(Connection con)
						throws SQLException {
					PreparedStatement ps = con.prepareStatement(INSERT_SQL, new String[] {name});
		            ps.setString(1, name);
		            return ps;

				}
		    },
		    keyHolder);
		return keyHolder.getKey().intValue();
	}
}

 XML(DBCP,c3po...):

<!-- Spring自带
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>
 	-->
 	
 	<!-- c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClassName}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>

	<!-- DBCP
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<property name="initialSize" value="1"></property>
		<property name="maxActive" value="100"></property>
		<property name="maxIdle" value="2"></property>
		<property name="minIdle" value="1"></property>
	</bean>
	 -->
	<context:property-placeholder location="spring3JDBC.properties"/>

	<bean id="peopleDao" class="com.spring305.jdbc.dao.impl.PeopleDaoImpl">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

 测试方法:com.spring305.jdbc.TestJDBC.java

	
	private static PeopleDao peopleDao = null;
	
	@BeforeClass
	public static void env(){
		ApplicationContext context =  new ClassPathXmlApplicationContext("Spring3JDBC.xml");
		peopleDao = (PeopleDao) context.getBean("peopleDao");
	}
	/**
	 * 测试环境
	 */
	
	//@Test
	public void testEnv(){//测试环境
		System.out.println(peopleDao);
	}
	
	/**
	 * DML语句
	 */
	//@Test//测试通过,创建表T_person
	public void CreateTable(){
		//java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList报了个错
		//commons-collections.jar 加上此jar
		String createSql = "CREATE TABLE T_people(id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT," +
							"name VARCHAR(45) NOT NULL," +
							"birthDay DATETIME NOT NULL," +
							"sex BOOLEAN NOT NULL," +
							"weight DOUBLE NOT NULL," +
							"height FLOAT NOT NULL," +
							"PRIMARY KEY (id)" +
							")ENGINE = InnoDB; ";
		peopleDao.doCreateTable(createSql);
	}

	/**
	 * 增删改查
	 */
	//id name birthDay sex weight height
	//@Test//测试通过,添加二条数据
	public void insert(){
		People people = new People();
		people.setName("ZCtime");
		people.setBirthDay(new Date());
		people.setSex(true);
		people.setHeight(178F);
		people.setWeight(130D);
		peopleDao.doSaveObj(people);
	}
	
	//@Test//测试通过
	public void update(){
		People people = new People();
		people.setId(1);
		people.setName("TestUpdate");
		people.setBirthDay(new Date());
		people.setSex(true);
		people.setHeight(178F);
		people.setWeight(130D);
		peopleDao.doUpdateObj(people);
	}
	
	//@Test//测试通过,查询单个对象
	public void selectOne(){
		People p = (People)peopleDao.getObjByID(1);
		System.out.println(p.getName()+"_"+p.getBirthDay());	
	}
	
	//@Test//测试通过,拿到多个对象
	public void selectList(){
		System.out.println(peopleDao.getObjsByID(2).size());
	}

	//@Test//测试通过得到属性为Date的
	public void SelectOneDateAtrri(){
		System.out.println(peopleDao.getBirthDay(1));
	}
	
	//@Test//测试通过得到属性为String的
	public void selectOneStringAttri(){
		String name = peopleDao.getNameAttri(1);
		System.out.println(name);
	}
	
	//@Test//测试通过
	public void selectCounts(){
		int counts = peopleDao.getCountEntites();
		System.out.println(counts);
	}
	
	//@Test//测试通过,这搞出来的怎么类json数据?
	public void selectForList(){
		System.out.println(peopleDao.getList());
	}

	//@Test//测试通过
	public void deleteObj(){
		peopleDao.doDeleteObj(2);
	}
	
	//@Test//分页测试
	public void testPage() throws SQLException{
		CurrentPage<People> currentPagePeople = peopleDao.getPeoplePage(1, 2, 0);
		List<People> pList = currentPagePeople.getPageItems();
		for (int i = 0; i <pList.size(); i++) {
			System.out.println(pList.get(i));
		}
		
	}
	
	//@Test//测试通过,拿到插入后自动生成的主键
	public void getGeneratedKey(){
		System.out.println(peopleDao.getAutoIncrementKey());
	}
	
	//测试批处理
	@Test
	public void testBatch(){
		People people = new People();
		people.setId(1);
		people.setName("123");
		People people2 = new People();
		people2.setId(3);
		people2.setName("123");
		List<People> peList = new ArrayList<People>();
		peList.add(people);
		peList.add(people2);
		System.out.println(peopleDao.batchUpdate(peList));;
	}
	

 分页代码放在下篇...

分享到:
评论
1 楼 carlosfu 2013-07-24  
很好很全,很有收获

相关推荐

    Scratch图形化编程语言入门与进阶指南

    内容概要:本文全面介绍了Scratch编程语言,包括其历史、发展、特点、主要组件以及如何进行基本和进阶编程操作。通过具体示例,展示了如何利用代码块制作动画、游戏和音乐艺术作品,并介绍了物理模拟、网络编程和扩展库等功能。 适合人群:编程初学者、教育工作者、青少年学生及对编程感兴趣的各年龄段用户。 使用场景及目标:①帮助初学者理解编程的基本概念和逻辑;②提高学生的创造力、逻辑思维能力和问题解决能力;③引导用户通过实践掌握Scratch的基本和高级功能,制作个性化作品。 其他说明:除了基础教学,文章还提供了丰富的学习资源和社区支持,帮助用户进一步提升技能。

    mmexport1734874094130.jpg

    mmexport1734874094130.jpg

    基于simulink的悬架仿真模型,有主动悬架被动悬架天棚控制半主动悬架 1基于pid控制的四自由度主被动悬架仿真模型 2基于模糊控制的二自由度仿真模型,对比pid控制对比被动控制,的比较说明

    基于simulink的悬架仿真模型,有主动悬架被动悬架天棚控制半主动悬架 [1]基于pid控制的四自由度主被动悬架仿真模型 [2]基于模糊控制的二自由度仿真模型,对比pid控制对比被动控制,的比较说明 [3]基于天棚控制的二自由度悬架仿真 以上模型,说明文档齐全,仿真效果明显

    【组合数学答案】组合数学-苏大李凡长版-课后习题答案

    内容概要:本文档是《组合数学答案-网络流传版.pdf》的内容,主要包含了排列组合的基础知识以及一些经典的组合数学题目。这些题目涵盖了从排列数计算、二项式定理的应用到容斥原理的实际应用等方面。通过对这些题目的解析,帮助读者加深对组合数学概念和技巧的理解。 适用人群:适合初学者和有一定基础的学习者。 使用场景及目标:可以在学习组合数学课程时作为练习题参考,也可以在复习考试或准备竞赛时使用,目的是提高解决组合数学问题的能力。 其他说明:文档中的题目覆盖了组合数学的基本知识点,适合逐步深入学习。每个题目都有详细的解答步骤,有助于读者掌握解题思路和方法。

    YOLO算法-雨水排放涵洞模型数据集-1000张图像带标签-.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    操作系统实验 Ucore lab5

    操作系统实验 Ucore lab5

    学生成绩管理系统软件界面

    基于matlab开发的学生成绩管理系统GUI界面,可以实现学生成绩载入,显示,处理及查询。

    NVR-K51-BL-CN-V4.50.010-210322

    老版本4.0固件,(.dav固件包),支持7700N-K4,7900N-K4等K51平台,升级后出现异常或变砖可使用此版本。请核对自己的机器信息,确认适用后在下载。

    YOLO算法-塑料数据集-7张图像带标签-塑料.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    YOLO算法-杂草检测项目数据集-3970张图像带标签-杂草.zip

    YOLO算法-杂草检测项目数据集-3970张图像带标签-杂草.zip

    E008 库洛米(3页).zip

    E008 库洛米(3页).zip

    基于西门子 PLC 的晶圆研磨机自动控制系统设计与实现-论文

    内容概要:本文详细阐述了基于西门子PLC的晶圆研磨机自动控制系统的设计与实现。该系统结合了传感器技术、电机驱动技术和人机界面技术,实现了晶圆研磨过程的高精度和高效率控制。文中详细介绍了控制系统的硬件选型与设计、软件编程与功能实现,通过实验测试和实际应用案例验证了系统的稳定性和可靠性。 适合人群:具备一定的自动化控制和机械设计基础的工程师、研究人员以及从事半导体制造的技术人员。 使用场景及目标:本研究为半导体制造企业提供了一种有效的自动化解决方案,旨在提高晶圆研磨的质量和生产效率,降低劳动强度和生产成本。系统适用于不同规格晶圆的研磨作业,可以实现高精度、高效率、自动化的晶圆研磨过程。 阅读建议:阅读本文时,重点关注晶圆研磨工艺流程和技术要求,控制系统的硬件和软件设计方法,以及实验测试和结果分析。这将有助于读者理解和掌握该自动控制系统的实现原理和应用价值。

    YOLO算法-禾本科杂草数据集-4760张图像带标签.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    深圳建筑安装公司“挖掘机安全操作规程”.docx

    深圳建筑安装公司“挖掘机安全操作规程”

    YOLO算法-汽车数据集-120张图像带标签-汽车.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    大题解题方法等4个文件.zip

    大题解题方法等4个文件.zip

    保障性安居工程考评内容和评价标准.docx

    保障性安居工程考评内容和评价标准.docx

    监督机构检查记录表.docx

    监督机构检查记录表.docx

    (177588850)基于java+mysql+swing的学生选课成绩信息系统

    该项目适合初学者进行学习,有效的掌握java、swing、mysql等技术的基础知识。资源包含源码、视频和文档 资源下载|如果你正在做毕业设计,需要源码和论文,各类课题都可以,私聊我。 商务合作|如果你是在校大学生,正好你又懂语言编程,或者你可以找来需要做毕设的伙伴,私聊我。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    218) Leverage - 创意机构与作品集 WordPress 主题 2.2.7.zip

    218) Leverage - 创意机构与作品集 WordPress 主题 2.2.7.zip

Global site tag (gtag.js) - Google Analytics