搜档网
当前位置:搜档网 › MyBatis3 教程 中文版

MyBatis3 教程 中文版

MyBatis3 教程 中文版
MyBatis3 教程 中文版

MyBatis 3 用户指南

从文档中复制代码的警告

是的,这不是一个法律上的警告,但是它可以帮助你保持清醒的认识。从美学上来讲,现代的文字处理工具在制作可读性强和格式良好的文本上做了大量的工作。然而,它们也往往会由于插入特殊字符而完全破坏代码示例,有时看起来和你想要的是一模一样的。“引号"和连字符就是一个很好的例子-在IDE环境或文本编辑器中,左边的那个符号就不会正常起作用,至少不会是你想要的那个效果。

阅读本文档,就要享受它,希望它能对你有帮助。当遇到代码段示例的时候,可以寻找示例和下载(包括单元测试等),或是来自网站和邮件列表的示例。

帮助我们把文档做得更好…

如果你发现了本文档的遗漏之处,或者丢失MyBatis特性的说明时,那么最好的方法就是了解一下这个遗漏之处然后把它记录下来。

我们在wiki接收公共的文档贡献:

https://www.sodocs.net/doc/8211051549.html,/confluence/oss/display/IBATIS/Contribute+ Documentation

你也是本文档的最佳作者,其他用户也会来阅读它的。

关于翻译

MyBatis 3的用户指南翻译由南磊完成,若对翻译质量有任何意见和建议,请联系nanlei1987@https://www.sodocs.net/doc/8211051549.html,或https://www.sodocs.net/doc/8211051549.html,/nanlei1987,愿和大家共同提高,共同进步。

本文档免费发布和使用,但不可用于任何商业途径,版权归译者南磊所有,源文档版权归MyBatis社区所有。

目录

什么是MyBatis? (5)

入门 (5)

从XML中构建SqlSessionFactory (5)

不使用XML构建SqlSessionFactory (6)

从SqlSessionFactory中获取SqlSession (6)

探究已映射的SQL语句 (7)

命名空间的一点注释 (8)

范围和生命周期 (8)

SqlSessionFactoryBuilder (8)

SqlSessionFactory (9)

SqlSession (9)

映射器实例 (9)

XML映射配置文件 (10)

properties (10)

Settings (11)

typeAliases (12)

typeHandlers (13)

objectFactory (14)

plugins (15)

environments (16)

transactionManager (17)

dataSsource (17)

mappers (19)

SQL映射的XML文件 (19)

select (20)

insert,update,delete (21)

sql (23)

Parameters (24)

resultMap (25)

高级结果映射 (27)

id,result (29)

支持的JDBC类型 (30)

构造方法 (30)

关联 (31)

集合 (34)

鉴别器 (36)

缓存 (38)

使用自定义缓存 (38)

参照缓存 (39)

动态SQL (39)

if (40)

choose, when, otherwise (40)

trim, where, set (41)

foreach (43)

Java API (44)

应用目录结构 (44)

SqlSessions (45)

SqlSessionFactoryBuilder (45)

SqlSessionFactory (47)

SqlSession (48)

SelectBuilder (53)

SqlBuilder (56)

什么是MyBatis?

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

入门

每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得。SqlSessionFactoryBuilder对象可以通过XML配置文件,或从以往使用惯例中准备好的Configuration类实例中来构建SqlSessionFactory对象。

从XML中构建SqlSessionFactory

从XML文件中构建SqlSessionFactory的实例非常简单。这里建议你使用类路径下的资源文件来配置,但是你可以使用任意的Reader实例,这个实例包括由文字形式的文件路径或URL形式的文件路径file://来创建。MyBatis包含了一些工具类,称作为资源,这些工具类包含一些方法,这些方法使得从类路径或其它位置加载资源文件更加简单。

String resource = "org/mybatis/example/Configuration.xml";

Reader reader = Resources.getResourceAsReader(resource);

sqlMapper = new SqlSessionFactoryBuilder().build(reader);

XML配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。关于XML配置文件的详细内容可以在文档后面找到,这里给出一个简单的示例:

"https://www.sodocs.net/doc/8211051549.html,/dtd/mybatis-3-config.dtd">

当然,在XML配置文件中还有很多可以配置的,上面的示例指出的则是最关键的部分。要注意XML头部的声明,需要用来验证XML文档正确性。environment元素体中包含对事务管理和连接池的环境配置。mappers元素是包含所有mapper(映射器)的列表,这些mapper 的XML文件包含SQL代码和映射定义信息。

不使用XML构建SqlSessionFactory

如果你喜欢从Java程序而不是XML文件中直接创建配置实例,或创建你自己的配置构建器,MyBatis也提供完整的配置类,提供所有从XML文件中加载配置信息的选项。

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();

TransactionFactory transactionFactory = new

JdbcTransactionFactory();

Environment environment =

new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);

configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(configuration);

注意这种情况下配置是添加映射器类。映射器类是Java类,这些类包含SQL映射语句的注解从而避免了XML文件的依赖,XML映射仍然在大多数高级映射(比如:嵌套Join 映射)时需要。出于这样的原因,如果存在XML配置文件的话,MyBatis将会自动查找和加载一个对等的XML文件(这种情况下,基于类路径下的BlogMapper.class类的类名,那么BlogMapper.xml将会被加载)。后面我们会了解更多。

从SqlSessionFactory中获取SqlSession

现在,我们已经知道如何获取SqlSessionFactory对象了,基于同样的启示,我们就可以获得SqlSession的实例了。SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法。你可以用SqlSession实例来直接执行已映射的SQL语句。例如:

SqlSession session = sqlMapper.openSession();

try {

Blog blog = (Blog) session.selectOne(

"org.mybatis.example.BlogMapper.selectBlog", 101);

} finally {

session.close();

}

这种方法起到的作用,和我们使用之前的MyBatis版本是相似的,现在有一种更简洁的方法。使用合理描述参数和SQL语句返回值的接口(比如BlogMapper.class),这样现在就可以执行更简单,更安全的代码,没有容易发生的字符串文字和转换的错误。

例如:

SqlSession session = sqlSessionFactory.openSession();

try {

BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);

} finally {

session.close();

}

现在我们来探究一下这里到底执行了什么。

探究已映射的SQL语句

这里你也许想知道通过SqlSession和Mapper对象到底执行了什么操作。已映射的SQL 语句是一个很大的主题,而且这个主题会贯穿本文档的大部分内容。为了给出一个宏观的概念,这里有一些示例。

上面提到的任何一个示例,语句是通过XML或注解定义的。我们先来看看XML。使用基于XML的映射语言,在过去的几年中使得MyBatis非常流行,它为MyBatis提供所有的特性设置。如果你以前用过MyBatis,这个概念就应该很熟悉了,但是XML映射文件也有很多的改进,后面我们会详细来说。这里给出一个基于XML映射语句的示例,这些语句应该可以满足上述示例中SqlSession对象的调用。

"https://www.sodocs.net/doc/8211051549.html,/dtd/mybatis-3-mapper.dtd">

这个简单的例子中看起来有很多额外的东西,但是也相当简洁了。如果你喜欢,你可以在一个单独的XML映射文件中定义很多的映射语句,除XML头部和文档类型声明之外,你可以得到很多方便之处。在文件的剩余部分是很好的自我解释。在命名空间“com.mybatis.example.BlogMapper”中,它定义了一个名为“selectBlog”的映射语句,这样它允许你使用完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句,我们下面示例中所有的写法也是这样的。

Blog blog = (Blog) session.selectOne(

"org.mybatis.example.BlogMapper.selectBlog", 101);

要注意这个使用完全限定名调用Java对象的方法是相似的,这样做是有原因的。这个命名可以直接映射相同命名空间下的映射器类,使用一个名称,参数和返回值和已映射的查询语句都一样的方法即可。这就允许你非常容易地调用映射器接口中的方法,这和你前面看到的是一样的,下面这个示例中它又出现了。

BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);

第二种方式有很多的优点,首先它不是基于文字的,那就更安全了。第二,如果你的IDE有代码补全功能,那么你可以利用它来操纵已映射的SQL语句。第三,不需要强制类

型转换,同时BlogMapper接口可以保持简洁,返回值类型很安全(参数类型也很安全)。

命名空间的一点注释

命名空间在之前版本的MyBatis中是可选项,非常混乱在使用上也没有帮助。现在,命名空间是必须的,而且有一个目的,它使用更长的完全限定名来隔离语句。

命名空间使得接口绑定成为可能,就像你看到的那样,如果之前不了解,那么现在你就会使用它们了,你应该按照下面给出示例的来练习,以免改变自己的想法。使用命名空间,并将它放在合适的Java包空间之下,这将会使你的代码变得简洁,在很长的时间内提高MyBatis的作用。

命名解析:为了减少输入量,MyBatis对所有的命名配置元素使用如下的命名解析规则,包括语句,结果映射,缓存等。

●直接查找完全限定名(比如“com.mypackage.MyMapper.selectAllThings”),如果

发现就使用。

●短名称(比如“selectAllThings”)可以用来引用任意含糊的对象。而如果有两个

或两个以上的(比如“com.foo.selectAllThings”和“com.bar.selectAllThings”),

那么就会得到错误报告,说短名称是含糊的,因此就必须使用完全限定名。

对BlogMapper这样的映射器类来说,还有一个妙招。它们中间映射的语句可以不需要在XML中来写,而可以使用Java注解来替换。比如,上面的XML示例可以如下来替换:package org.mybatis.example;

public interface BlogMapper {

@Select("SELECT * FROM blog WHERE id = #{id}")

Blog selectBlog(int id);

}

对于简单语句来说,使用注解代码会更加清晰,然而Java注解对于复杂语句来说就会混乱,应该限制使用。因此,如果你不得不做复杂的事情,那么最好使用XML来映射语句。

当然这也取决于你和你的项目团队的决定,看哪种更适合你来使用,还有以长久方式来使用映射语句的重要性。也就是说,不要将自己局限在一种方式中。你可以轻松地将注解换成XML映射语句,反之亦然。

范围和生命周期

理解我们目前已经讨论过的不同范围和生命周期类是很重要的。不正确的使用它们会导致严重的并发问题。

SqlSessionFactoryBuilder

这个类可以被实例化,使用和丢弃。一旦你创建了SqlSessionFactory后,这个类就不需要存在了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但是最好的方式是不需要保持它一直存在来保证所有XML解析资源,因为还有更重要的事情要做。

SqlSessionFactory

一旦被创建,SqlSessionFactory实例应该在你的应用程序执行期间都存在。没有理由来处理或重新创建它。使用SqlSessionFactory的最佳实践是在应用程序运行期间不要重复创建多次。这样的操作将被视为是非常糟糕的。因此SqlSessionFactory的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。然而这两种方法都不认为是最佳实践。这样的话,你可以考虑依赖注入容器,比如Google Guice或Spring。这样的框架允许你创建支持程序来管理单例SqlSessionFactory的生命周期。

SqlSession

每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet架构中的HttpSession。如果你现在正用任意的Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围内。换句话说,基于收到的HTTP请求,你可以打开了一个SqlSession,然后返回响应,就可以关闭它了。关闭Session很重要,你应该确保使用finally块来关闭它。下面的示例就是一个确保SqlSession关闭的基本模式:SqlSession session = sqlSessionFactory.openSession();

try {

// do work

} finally {

session.close();

}

在你的代码中一贯地使用这种模式,将会保证所有数据库资源都正确地关闭(假设你没有通过你自己的连接关闭,这会给MyBatis造成一种迹象表明你要自己管理连接资源)。

映射器实例

映射器是你创建绑定映射语句的接口。映射器接口的实例可以从SqlSession中获得。那么从技术上来说,当被请求时,任意映射器实例的最宽范围和SqlSession是相同的。然而,映射器实例的最佳范围是方法范围。也就是说,它们应该在使用它们的方法中被请求,然后就抛弃掉。它们不需要明确地关闭,那么在请求对象中保留它们也就不是什么问题了,这和SqlSession相似。你也许会发现,在这个水平上管理太多的资源的话会失控。保持简单,将映射器放在方法范围内。下面的示例就展示了这个实例:

SqlSession session = sqlSessionFactory.openSession();

try {

BlogMapper mapper = session.getMapper(BlogMapper.class);

// do work

} finally {

session.close();

}

XML映射配置文件

MyBatis的XML配置文件包含了影响MyBatis行为甚深的设置和属性信息。XML文档的高层级结构如下:

●configuration配置

●properties属性

●settings设置

●typeAliases类型命名

●typeHandlers类型处理器

●objectFactory对象工厂

●plugins插件

●environments环境

●environment环境变量

●transactionManager事务管理器

●dataSource数据源

●映射器

properties

这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。例如:

其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。比如:

这个例子中的username和password将会由properties元素中设置的值来替换。driver和url属性将会从包含进来的config.properties文件中的值来替换。这里提供很多配置的选项。

属性也可以被传递到SqlSessionBuilder.build()方法中。例如:

SqlSessionFactory factory =

sqlSessionFactoryBuilder.build(reader, props);

// ... or ...

SqlSessionFactory factory =

sqlSessionFactoryBuilder.build(reader, environment, props);

如果在这些地方,属性多于一个的话,MyBatis按照如下的顺序加载它们:

●在properties元素体内指定的属性首先被读取。

●从类路径下资源或properties元素的url属性中加载的属性第二被读取,它会

覆盖已经存在的完全一样的属性。

●作为方法参数传递的属性最后被读取,它也会覆盖任一已经存在的完全一样的

属性,这些属性可能是从properties元素体内和资源/url属性中加载的。

因此,最高优先级的属性是那些作为方法参数的,然后是资源/url属性,最后是properties 元素中指定的属性。

Settings

这些是极其重要的调整,它们会修改MyBatis在运行时的行为方式。下面这个表格描述了设置信息,它们的含义和默认值。

typeAliases

类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。例如:

使用这个配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。

对于普通的Java类型,有许多内建的类型别名。它们都是大小写不敏感的,由于重载

typeHandlers

无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个表格描述了默认的类型处理器。

这样做的话,简单实现TypeHandler接口(org.mybatis.type),然后映射新的类型处理器类到Java类型,还有可选的一个JDBC类型。例如:

// E xampleTypeHandler.java

public class ExampleTypeHandler implements TypeHandler { public void setParameter(PreparedStatement ps, int i, Object

parameter,JdbcType jdbcType) throws SQLException {

ps.setString(i, (String) parameter);

}

public Object getResult(ResultSet rs, String columnName) throws SQLException {

return rs.getString(columnName);

}

public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {

return cs.getString(columnIndex);

}

}

// MapperConfig.xml

handler="org.mybatis.example.ExampleTypeHandler"/>

使用这样的类型处理器将会覆盖已经存在的处理Java的String类型属性和V ARCHAR 参数及结果的类型处理器。要注意MyBatis不会审视数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指定那是V ARCHAR类型的字段,来绑定到正确的类型处理器上。这是因为MyBatis直到语句被执行都不知道数据类型的这个现实导致的。

objectFactory

MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。如果你想重写默认的ObjectFactory,你可以创建你自己的。比如:// E xampleObjectFactory.java

public class ExampleObjectFactory extends DefaultObjectFactory { public Object create(Class type) {

return super.create(type);

}

public Object create(Class type,List constructorArgTypes, List constructorArgs) {

return super.create(type, constructorArgTypes,

constructorArgs);

}

public void setProperties(Properties properties) {

super.setProperties(properties);

}

}

// MapperConfig.xml

ObjectFactory接口非常简单。它包含两个用于创建的方法,一个是默认构造方法,另外一个是处理带参数的构造方法。最终,setProperties方法可以被用来配置ObjectFactory。在初始化你的ObjectFactory实例后,objectFactory元素体中定义的属性会被传递给setProperties 方法。

plugins

MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:

●Executor

(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

●ParameterHandler

(getParameterObject, setParameters)

●ResultSetHandler

(handleResultSets, handleOutputParameters)

●StatementHandler

(prepare, parameterize, batch, update, query)

这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码存在于MyBatis的发行包中。你应该理解你所覆盖方法的行为,假设你所做的要比监视调用要多。如果你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。

使用插件是它们提供的非常简单的力量。简单实现拦截器接口,要确定你想拦截的指定签名。

// E xamplePlugin.java

@Intercepts({@Signature(type= Executor.class,method = "update", args = {MappedStatement.class,Object.class})})

public class ExamplePlugin implements Interceptor {

public Object intercept(Invocation invocation) throws Throwable {

return invocation.proceed();

}

public Object plugin(Object target) {

return Plugin.wrap(target, this);

}

public void setProperties(Properties properties) {

}

}

// MapperConfig.xml

上面的插件将会拦截在Executor实例中所有的“update”方法调用,它也是负责低层次映射语句执行的内部对象。

environments

MyBatis可以配置多种环境。这会帮助你将SQL映射应用于多种数据库之中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的SQL映射。这种用例是很多的。

要记得一个很重要的问题:你可以配置多种环境,但你只能为每个SqlSessionFactory 实例选择一个。

所以,如果你想连接两个数据库,你需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。记忆起来很简单: 每个数据库对应一个SqlSessionFactory

为了明确创建哪种环境,你可以将它作为可选的参数传递给SqlSessionFactoryBuilder。可以接受环境配置的两个方法签名是:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);

如果环境被忽略,那么默认环境将会被加载,如下进行:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);

环境元素定义了如何配置环境。

注意这里的关键部分:

●默认的环境ID(比如:default=”development”)。

●每个environment元素定义的环境ID(比如:id=”development”)。

●事务管理器的配置(比如:type=”JDBC”)。

●数据源的配置(比如:type=”POOLED”)。

默认的环境和环境ID是自我解释的。你可以使用你喜欢的名称来命名,只要确定默认的要匹配其中之一。

transactionManager

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):

●JDBC –这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得

到的连接来管理事务范围。

●MANAGED –这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让

容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认

情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止

它,将closeConnection属性设置为false。例如:

这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需要放置将你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。

public interface TransactionFactory {

void setProperties(Properties props);

Transaction newTransaction(Connection conn, boolean autoCommit);

}

任何在XML中配置的属性在实例化之后将会被传递给setProperties()方法。你的实现类需要创建一个事务接口的实现,这个接口也很简单:

public interface Transaction {

Connection getConnection();

void commit() throws SQLException;

void rollback() throws SQLException;

void close() throws SQLException;

}

使用这两个接口,你可以完全自定义MyBatis对事务的处理。

dataSsource

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。

许多MyBatis的应用程序将会按示例中的例子来配置数据源。然而它并不是必须的。

要知道为了方便使用延迟加载,数据源才是必须的。

有三种内建的数据源类型(也就是type=”???”):

UNPOOLED–这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的。UNPOOLED类型的数据源仅仅用来配置以下5种属性:

●driver–这是JDBC驱动的Java类的完全限定名(如果你的驱动包含的有,它也

不是数据源类)。

●url –这是数据库的JDBC URL地址。

●username –登录数据库的用户名。

●password –登录数据库的密码。

●defaultT ransactionIsolationLevel –默认的连接事务隔离级别。

作为可选项,你可以传递数据库驱动的属性。要这样做,属性的前缀是以“driver.”开头的,例如:

●driver.encoding=UTF8

这样就会传递以值“UTF8”来传递“encoding”属性,它是通过DriverManager.getConnection(url,driverProperties)方法传递给数据库驱动。

POOLED–这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前Web应用程序用来快速响应请求很流行的方法。

除了上述(UNPOOLED)的属性之外,还有很多属性可以用来配置POOLED数据源:

●poolMaximumActiveConnections –在任意时间存在的活动(也就是正在使用)连

接的数量。默认值:10

●poolMaximumIdleConnections –任意时间存在的空闲连接数。

●poolMaximumCheckoutTime –在被强制返回之前,池中连接被检查的时间。默认

值:20000毫秒(也就是20秒)

●poolTimeT oWait –这是给连接池一个打印日志状态机会的低层次设置,还有重新

尝试获得连接,这些情况下往往需要很长时间(为了避免连接池没有配置时静默失

败)。默认值:20000毫秒(也就是20秒)

●poolPingQuery –发送到数据的侦测查询,用来验证连接是否正常工作,并且准备

接受请求。默认是“NO PING QUERY SET”,这会引起许多数据库驱动连接由一

个错误信息而导致失败。

●poolPingEnabled–这是开启或禁用侦测查询。如果开启,你必须用一个合法的

SQL语句(最好是很快速的)设置poolPingQuery属性。默认值:false。

●poolPingConnectionsNotUsedFor–这是用来配置poolPingQuery多次时间被用一

次。这可以被设置匹配标准的数据库连接超时时间,来避免不必要的侦测。默认值:

0(也就是所有连接每一时刻都被侦测-但仅仅当poolPingEnabled为true时适用)。

JNDI–这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。这个数据源配置只需要两个属性:

●initial_context –这个属性用来从初始上下文中寻找环境(也就是

initialContext.lookup(initial——context))。这是个可选属性,如果被忽略,那么

data_source属性将会直接以initialContext为背景再次寻找。

●data_source –这是引用数据源实例位置的上下文的路径。它会以由initial_context

查询返回的环境为背景来查找,如果initial_context没有返回结果时,直接以初始

上下文为环境来查找。

和其他数据源配置相似,它也可以通过名为“env.”的前缀直接向初始上下文发送属性。比如:

●env.encoding=UTF8

在初始化之后,这就会以值“UTF8”向初始上下文的构造方法传递名为“encoding”

的属性。

mappers

既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句。Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis到哪里去找映射文件。你可以使用相对于类路径的资源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:// 使用相对于类路径的资源

// 使用完全限定路径

这些语句简单告诉了MyBatis去哪里找映射文件。其余的细节就是在每个SQL映射文件中了,下面的部分我们来讨论SQL映射文件。

SQL映射的XML文件

MyBatis真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL 映射的XML文件是相当的简单。当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大约95%的代码量。MyBatis的构建就是聚焦于SQL的,使其远离于普通的方式。

SQL映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

●cache - 配置给定命名空间的缓存。

●cache-ref –从其他命名空间引用缓存配置。

●resultMap –最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加

载你的对象。

●parameterMap –已经被废弃了!老式风格的参数映射。内联参数是首选,这个元

素可能在将来被移除。这里不会记录。

●sql –可以重用的SQL块,也可以被其他语句引用。

●insert –映射插入语句

●update –映射更新语句

●delete –映射删除语句

●select –映射查询语句

下一部分将从语句本身开始来描述每个元素的细节。

select

查询语句是使用MyBatis时最常用的元素之一。直到你从数据库取出数据时才会发现将数据存在数据库中是多么的有价值,所以许多应用程序的查询操作要比更改数据操作多的多。对于每次插入,更新或删除,那也会有很多的查询。这是MyBatis的一个基本原则,也是将重心和努力放到查询和结果映射的原因。对简单类别的查询元素是非常简单的。比如:

这个语句被称作selectPerson,使用一个int(或Integer)类型的参数,并返回一个HashMap 类型的对象,其中的键是列名,值是列对应的值。

注意参数注释:

#{id}

这就告诉MyBatis创建一个PreparedStatement(预处理语句)参数。使用JDBC,这样的一个参数在SQL中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:// 相似的JDBC代码,不是MyBatis的

String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;

PreparedStatement ps = conn.prepareStatement(selectPerson);

ps.setInt(1,id);

当然,这需要很多单独的JDBC的代码来提取结果并将它们映射到对象实例中,这就是MyBatis节省你时间的地方。我们需要深入了解参数和结果映射。那些细节部分我们下面来了解。

select元素有很多属性允许你配置,来决定每条语句的作用细节。

id=”selectPerson”

parameterType=”int”

parameterMap=”deprecated”

resultType=”hashmap”

resultMap=”personResultMap”

flushCache=”false”

useCache=”true”

timeout=”10000”

fetchSize=”256”

statementType=”PREPARED”

resultSetType=”FORWARD_ONLY”

>

Inkscape教程

tutorial: 基础 本教程描述了Inkscape的基本操作方法。本文档以Inkscape的通用文件格式 保存,你可以用Inkscape进行查看、复制、编辑、保存等操作。 该教程的主要内容包括:画布浏览、文档管理、形状工具基础,图形选取、 变形,群组、填充与轮廓、对齐和叠放。对更复杂的操作,请在帮助菜单中 选择其它相关教程。 平移画布 平移画布(卷屏)的方法有很多种。使用Ctrl+arrow键可以用键盘卷屏。(你可以尝试这些按键来卷动本文档。) 也可以通过鼠标中键来拖动画布,或者使用屏幕边缘的滚动条(使用Ctrl+B来显示或隐藏滚 动条)。鼠标滚轮wheel可以上下卷动画布,按住Shift键,配合滚轮则可以水平卷动。 放大与缩小 最简单的缩放操作是通过-和+(或=)键。也可以通过Ctrl+middle click或Ctrl+right click来放大,Shift+middle click或Shift+right click来缩小画布。也可以用Ctrl键配合鼠标滚轮来缩放。或者在窗口右下角的缩放输入框中输入一个准确的百分比数值。在工具栏中也有缩放按钮,可以缩放到用户选定的区域(对象)。 Inkscape还会记录当前工作会话中使用的缩放历史,按`键回到上一次的缩放比例,Shift+`键来恢复撤销的缩放比例。 Inkscape工具列 Inkscape中的绘图和修改工具集中在左侧的竖直工具列中。在窗口的上方,菜单下面是命令

栏(Commands bar),提供了通用的一些控制命令,下面的工具控制栏(Tool Controls bar)则跟具体的绘图工具有关。窗口底部的状态栏(status bar)则实时显示一些操作提示和信息。 很多操作都有对应的快捷键,在帮助菜单中选择鼠标与快捷键(Help > Keys and Mouse)获取详细的说明。 创建和管理文档 选择菜单文件File > 新建New,或使用快捷键Ctrl+N新建文档。选择菜单文件File > 打开Open (Ctrl+O)打开已有文档。选择菜单文件File > 保存Save (Ctrl+S)来保存文件。或者选择菜单文件File > 另存为Save As (Shift+Ctrl+S)将当前文件以不同的文件名保存。(Inkscape可能有时不够稳定,切记经常保存!) Inkscape使用SVG(Scalable V ector Graphics可缩放矢量图形)文件格式。 SVG是一种被各种绘图软件广泛支持的开放文件标准。SVG文件是基于XML的,可以用任何文本和XML编辑器来编辑(Inkscape不属于这种文本编辑器)。除SVG外,Inkscape也可以导入和导出其它一些文件格式(EPS,PNG等)。 Inkscape为每个文档打开一个独立的窗口。你可以用操作系统中的窗口管理器来在各个窗口间切换(例 如Alt+Tab键),也可以使用Inkscape中内置的快捷键Ctrl+Tab在文档间循环切换。(现在可以新建一个文档,尝试在本文档和新文档间切换。) 注意:Inkscape将这些窗口看成类似于浏览器的标签页Tabs,即Ctrl+Tab只对同一个进程中的文档有效。如果你从文件管理器或Inkscape图标打开多个进程,这个快捷键将无效。 创建形状 下面我们开始创建一些很漂亮的图形!在工具列中选择矩形工具(Rectangle)(快捷键F4),在(本文档或新文档的)绘图区中点击、拖动:

英美概况 专有名词 中英文对照学习 打印版

The English Channel 英吉利海峡 The Dee estuary 迪河河口 The Act of Union of 1801 1801合并法案 Gaelic 盖尔语 The “backbone of England”英格兰的脊梁 Briton 不列颠人 Urbanization 城市化 Anglo-Saxon盎格鲁撒克逊人 The Norman 诺曼人 Celtic 凯尔特人 Iberians 伊比利亚人 Queen’s University of Belfast 贝尔法斯特大学 The Manchester Ship Canal 曼切斯特运河 The Black Country 黑区 Covert Garden Opera House 科文特加登皇家歌剧院Greater London 大伦敦 Cardiff 加的夫 Hadrian’s Wall 哈德良长城 Julius Caesar 朱利尤斯·凯撒 Alfred 阿尔弗雷德 Edmund 埃德蒙 Vikings 维京人 William, the Conqueror 征服者威廉 The Battle of Hastings 黑斯廷斯战役 Henry 二世亨利二世 The Assize of Arms 武器法令 The Greater Charter 大宪章 All Estates Parliament 各级议会 Modal Parliament 模范议会 Black Death 黑死病 The Lollards 罗拉德派 The Enclosure Movement 圈地运动 Francis Drake 弗朗西斯·德雷克 Chartered Companies 特许公司 The East India Company 东印度公司 Francis Bacon 培根 The Short and the Long Parliament 短期和长期议会Charles 1 查理一世 Oliver Cromwell 奥利弗·克伦威尔 New Model Army 新模范军队 The Diggers 掘地派 The Treaty of Utrecht 乌得勒支条约 The Seven Year’s War 英法七年战争 The Treaty of Paris 巴黎条约 The House of Hanover 汉诺威王朝 George Stephenson 乔治·史蒂芬森 James Watt 詹姆斯·瓦特 The Corn Law 谷物法 The Peterloo Massacre 彼得卢大屠杀 The Reform Bill 改革法案

Inkscape教程(三)--高级

tutorial: 高级 bulia byak, buliabyak@https://www.sodocs.net/doc/8211051549.html, ; josh andler, scislac@https://www.sodocs.net/doc/8211051549.html, 本教程包括:复制/粘贴、节点编辑、手绘和Bezier曲线、路径操作、布尔操作 、偏移、简化、以及文本工具。 通过Ctrl+arrows, 滚轮, 或者中键拖动将绘图页面向下卷动。绘图对象的 创建、选择、变换等基本操作,请参考帮助Help > 教程Tutorials中的基础教程 。 粘贴操作 当用Ctrl+C复制对象或Ctrl+X剪切对象后,通常的粘贴Paste命令(Ctrl+V)将复制的对象粘贴到鼠标光标处,如果光标在绘图窗口外,则粘贴到文档窗口的中心。实际上,剪贴板中的对象仍然记着它的原始位置,你可以用原位粘贴Paste in Place将它粘回原始位置(Ctrl+Alt+V)。 另一个粘贴命令,粘贴样式Paste Style(Shift+Ctrl+V),将复制对象的样式应用到所选对象。样式 包括:填充、轮廓、以及字体设置,但不包括形状、大小、以及与该形状相关的参数,如星形的角数等。 命令粘贴大小Paste Size,将复制对象的大小应用到所选对象上。该命令包括:粘贴大小、宽度、高度,以及分别粘贴大小、宽度、高度。 粘贴大小Paste Size将全部选择的总大小缩放到剪贴板中对象的总大小。粘贴宽度Paste Width/粘贴高度Paste Height则仅影响水平和竖直方向上的尺寸。这些命令依据复制对象的长宽比是否锁定(选择工具控制栏,W和H的中间),如果复制对象的长宽比锁定,目标对象的另外一个方向上的尺寸将根据该比例自动缩放;否则,另一个方向的尺寸将不改变。带有“分别Separately”的相应命令也是类似的,不同

英美概况英国的扩张(英文版)

Small Island,Big world As it is a fact that England has been a big country in the world for a long period,not only on the land ,but also on the sea.The British Empire was the largest country at that time,which occupied about 33 million square kilometers,taken up one fifth of the world’s total dry land and about 135 tomes as large as Great Britain.It ruled over a population of 560 million,which was more than ten times as large as that of Britain.It was called an empire “on which the sun never set”.Because on almost all the continents of the world Britain had its colonies that kept the sun can be seen on the sky all the time. Britain’s Overseas Expansion British overseas expansion was clearly part of an older tradition of European empire building.They traced this back to classical Greece and Rome,Spanish and Portuguese expansion following Columbus’ voyage to the new world. Britain’s overseas expansion was begin with several battles against Spanish during Elizabeth ’era.Elizabeth avoided open hostility with Spain,but she secretly encouraged English seadogs to raid Spanish colonies and plunder the Spanish ships that were returning back home to Spain.At first,the Spanish king did not know that Britain was their most dangerous rival or Elizabeth’s intention until Spanish king Philip was at the helm of the state.So ,in 1588,the king dispatched a fleet of 130 vessels which named “the Invincible Fleet ”to England.The fleet sailed up the English Channel and a large naval battle out.The English battleships threw their enemies into panic with fire ships.The badly battered the Spanish’s fleet fled to northward in confusion.Caught in a storm ,many of the Spanish warships died and only half of them survived and went back to Spain,never dare to come to England again. The lost of the war made Spain lose its lead position on the sea,while ,on the other hand,Britian could take over Spanish power became the leader.The victory not only established the position of England as a major sea power but also paved the way for its foreign expansion as a colonizing nation.What’s more,British overseas expansion helped the state gather many property for this empire’s construction. British Foreign Expansion In the eighteenth and nineteenth centuries,Britain experience the Industrial Revolution.It is a big event for all the British.During the Industrial Revolution,a varity of chater companies were the tentacles and they spearheaded the foreign expansion and colonization.These companies,such as the East India Company,had the right to use the English Navy.Charter companies would first force a foreign country to open its market,then they would control the market and establish the British sphere of influence.If the British had occupied the land,the natives would have to leave their land or controlled by them.At the same,as a result of the Industrial Revolution,the empire was quite eager for raw material and expanding its foreign market.So the Britain began to expand its colonies all over the world. The expansion began with the colonization of Newfoundland,soon,many continents had became British colonies. In Asia,the East India company was founded in 1600.At first,it traced with India through a few trading posts it had managed to secure on the coast and the southern tip of the peninsula.They also managed to edge out the French and Portuguese colonists who had also come for conquest.By 1819 the British conquest of India was almost complete.The British aggression caused anger

新编英美概况 许鲁之(第四版)Unit1-7课后习题简答题答案.

Unit 1 Geographical Features and Natural Resources 1. How many states are there in the United States? And which two states are geographically separated from the others? (50, Alaska, Hawaii) 2. What are the general characters of the Rocky Mountains and the Appalachian Mountains. 1) To the west of Atlantic coastal plain lie the Appalachian Mountains that begin in Canada and reach all the way to Georgia and Alabama. These are old mountains with rounded tops and wooded hills, usually not exceeding 800m in height. The highest point is only 2000m above the sea. Most of the mountain ridges are low enough to be easily crossed by modern highways. The Appalachians have much beautiful scenery and many tourist resorts. The Ohio and the Tennessee Rivers flow down the western slopes of the Appalachians to the great Mississippi River, deep in the heart of America. 2) To the west of the Great Plains lie the Rocky Mountains, “the backbone of the continent”. These high mountains stretch all the way from Mexico to the Arctic and form what is known as Continental Divide, or Great Divide, the most important watershed on the continent. The Rockies are more than twice as high as the Appalachians and high enough to receive more rain than the surrounding plains and plateaus. Consequently, they are mostly forested. The striking and varied scenery of the Rockies has given rise to the establishment of many national parks here. The other natural wonders include roaming herds of buffalo, elk, deer, antelope and sheep, as well as the famous grizzly bear. Chapter 2 American Population 1.Why is the United States known as a “melting pot”? It means that the US is composed of immigrants from different nations all over the world. ①The people of the US are predominantly white. ②The second most numerous minority in the US were the black people whose forefathers came from Africa. ③American Indians were the original inhabitants on the continent. ④There were about 50.5 million Hispanics in 2010 in the US. They are the Spanish-speaking immigrants from Latin American countries. ⑤The Chinese American have proved to be industrious and intelligent. 2.What factors cause the Americans to move frequently within the United States? ①The desire for economic betterment is generally the most important force inducing migration. ②Geographic difference in economic opportunity, as reflected by such factors as differences in employment opportunities and earning power for workers and differences in the availability and the price of land for farmers. ③Noneconomic factors. Such as climate, racial attitudes, and family tires, influencing migration. 3.Why do many Americans now migrate from cities to suburbs? ①The widespread uses of automobiles and the construction of express highways made it possible for people to live farther away from their jobs. ②The telephone reduced the need for them to work or live in close proximity to one another. ③Suburban areas offered more living space than cities, lower crime rates, less pollution, and superior schools. It is generally believed that they are better place for raising children. Chapter 3 Discovery and Colonization of the New World 1. Discuss the pre-Columbian cultures in the Americas. 1) The Aztecs of Mexico 2) The Incas of Peru 3) The Indians of North America 4) Indian contributions to European culture: Foods, Drugs and Utilitarian objects 2. Why did the discoveries of New World before Columbus not exert great influence in the world at that time?

如何在 Blender创建印花玻璃杯 How to Engrave Glass in Blender

如何在Blender创建印花玻璃杯第一部分How to Engrave Glass in Blender: Part 1 由Admin于周二三月24, 2015 9:08 pm 如何在Blender创建印花玻璃杯第一部分 How to Engrave Glass in Blender: Part 1 By Filippo Veniero Introduction 介绍 Blender development continues day on day, with each version boasting new features and tools to help artists improve their work. Blender的开发一天一天延续,每个版本拥有的新功能和工具,帮助艺术家改进它们的工作。In these tutorials we'll be using Blender 2.67 - new in this release is the Freestyle render engine for non-photorealistic rendering, a 3D printing add-on, subsu***ce scattering shader(SSS) now available for Cycles, new mesh modeling tools (Individual Face Inset, Poke Face and Knife Project) and in addition to the new features, over 260 bugs that existed in previous releases have been fixed! 在这个指南我们将使用Blender 2.67 --这个版本有非真实感的Freestyle渲染引擎,3D打印,次表面散射(SSS)都可以支持Cycles,新的网格建模工具(Individual Face Inset, Poke Face 和Knife Project)除了新功能,在以前的版本中存在超过260 bug已经修复! In this first tutorial we're going to look at how to create photorealistic engraved glass in Blender 2.67. Let's get started! 在这个指南我们将在Blender 2.67怎么创建真实的印花玻璃杯。让我们准备开始吧。Download the free tutorial files here. 点击这里下载免费的教程文件。 Modeling Glass 玻璃杯建模 First of all search, search for reference images of glasses. Open Blender, delete the default cube and set your first glass reference image as your background image (N key > background image > add image). Don't forget to change view mode from Perspective to Orthographic (shortcut key 5). 首先搜索,搜索玻璃参考图像。打开Blender, 删除默认的立方体,并设置你的玻璃窗口图

英美概况题库美国部分精编版

英美概况题库美国部分 精编版 MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】

The United States I. Choose the correct answer. 1. In area, the United States is the c largest country in the world. a. 2nd b. 3rd c. 4th d. 5th 2. The Midwest in the US refers to the region d . a. west of the Mississippi Valley b. west of the Appalachian Mountains c. east of the Rocky Mountains d. around the Great Lakes and the upper Mississippi Valley. 3. The Backbone of North America refers to the b . a. Appalachian Mountains b. Rocky Mountains c. the Rocky Mountains d. Sierra Nevada Mountains 4. Death Valley is on the western edge of a . a. the Great Basin b. California c. the Rocky Mountains d. the Sierra Nevada Mountains 5. Which region might have a dust storm in summer? c a. The Deep South. b. The Middle West. c. The Great Plains d. The Central Valley of California. 6. Which area has the highest rainfall in the US? b a. The region around the Great Lakes. b. The western part of Washington State. c. The Middle Atlantic states. d. The Central Valley of California. 7. The US primary suppliers of foreign oil are the following countries except b . a. Canada b. Japan c. Venezuela d. Saudi Arabia 8. The US largest open-pit copper-mining center is in b . a. California b. Utah c. Montana d. South Dakota

Inkscape高级教程

本Inkscape教程包括:复制/粘贴、节点编辑、手绘和Bezier曲线、路径操作、布尔操作、偏移、简化、以及文本工具。通过Ctrl+arrows, 滚轮, 或者中键拖动将绘图页面向下卷动。绘图对象的创建、选择、变换等基本操作,请参考帮助Help > 教程Tutorials中的基础教程。 在本教程开始之前,请确认你最好已经查看过“SVG编辑器软件:Inkscape基础教程”一文或者你已经对Inkscape有一定的了解。Inkscape基础教程篇详细的介绍了SVG编辑过程中的一些基本问题,另外”SVG制作软件Inkscape与Sodipodi的关系”介绍的是Inkscape的历史背景及创立故事。 1 粘贴操作 当用Ctrl+C复制对象或Ctrl+X剪切对象后,通常的粘贴Paste命令(Ctrl+V)将复制的对象粘贴到鼠标光标处,如果光标在绘图窗口外,则粘贴到文档窗口的中心。实际上,剪贴板中的对象仍然记着它的原始位置,你可以用原位粘贴Paste in Place将它粘回原始位置(Ctrl+Alt+V)。 另一个粘贴命令,粘贴样式Paste Style(Shift+Ctrl+V),将复制对象的样式应用到所选对象。样式包括:填充、轮廓、以及字体设置,但不包括形状、大小、以及与该形状相关的参数,如星形的角数等。 命令粘贴大小Paste Size,将复制对象的大小应用到所选对象上。该命令包括:粘贴大小、宽度、高度,以及分别粘贴大小、宽度、高度。 粘贴大小Paste Size将全部选择的总大小缩放到剪贴板中对象的总大小。粘贴宽度Paste Width/粘贴高度Paste Height则仅影响水平和竖直方向上的尺寸。这些命令依据复制对象的长宽比是否锁定(选择工具控制栏,W和H的中间),如果复制对象的长宽比锁定,目标对象的另外一个方向上的尺寸将根据该比例自动缩放;否则,另一个方向的尺寸将不改变。带有“分别Separately”的相应命令也是类似的,不同之处在于将每个选择对象都分别缩放以适应复制的对象。 注意,Inkscape使用自己的内部剪贴板,除了在文本工具中复制/粘贴文本外,不使用操作系统的剪贴板。 2 手绘和规则路径 创建任意形状的最简单的方法是使用铅笔(手绘)工具(F6):

完整word版,英美概况括考前知识点总结,推荐文档

英国概况 1,英国名称:The United Kingdom of Great Britain and Northern Ireland) 2,地理位置:Great Britain is the largest island of the British Isles, the largest island in Europe and the eighth-largest island in the world. It lies to the northwest of Continental Europe, with Ireland to the west, and makes up the largest part of the territory of the state known as the United Kingdom of Great Britain and Northern Ireland. It is surrounded by over 1,000[citation needed] smaller islands and islets. 或者回答British mainland western Europe from Great Britain and Ireland, north-east and many nearby islands, She east by the North Sea, the Atlantic Ocean to the west, up to the North Atlantic off Iceland, Yugoslavia and the European continent, separated only by a strip of water, the English Channel 3, 英国首都:London 4,组成部分:England, Scotland, Wales and Northern Ireland 5,民族:England Welsh、Scotch、Irish 6, 英国国旗:the Union Flag英国国歌:God Save The Queen 天佑女7,三次外族入侵:ⅠRoman Conquest;43AD, the roman empire

雕刻机补充教程

前几天在果壳上看到有自己做光驱激光雕刻机的教程(https://www.sodocs.net/doc/8211051549.html,/article/18616/),便去数码市场买了俩10块钱一个的光驱 写这个帖子主要是原帖里一看就是百度翻译的,各种匪夷所思的语句,关键的要点也没提及,我就在此重新说下 我买的这俩个光驱都是飞利浦的一个是rw 一个是rom 拆光驱的过程我就不多说了,这个大家都会,也没有什么要点,就此掠过 拆出来rw的激光头和rom的激光头不同,rw的激光头和原帖中一样,是两个三pin的激光发射管和红外管,但rom的激光头拆出来里面只有一个四pin发射管,于是我就弃用了。整体部分 总而言之,要把光驱拆成这样关于激光发射管是长这样的 引脚定义 先小心将引脚焊上引线,除了gnd(-),电源(+)不能碰到引脚以外的壳体 然后把激光发射管装在外壳里,这个外壳我是以前从tb上4.5买的9mm半导体激光管里拆下来的,里面连透镜和弹簧都有,我就把原来的发射电路拆下来装上这个激光管

这样激管部分就做好了,我手上的这个管子在在3.3v上有186ma,感觉有点超载的感觉,可以加个电阻来限流试试 然后分别把俩托架上的步进电机的软排线换成较长的引线,当然如果你电路板的接口支持也可以不换 将其中一块托架固定到光盘托盘(也是光驱里拆下来的)上,另一个横过来固定到光驱的塑料架子上

然后立起来交叉固定 电路部分 接下来是电路部分,使用一块arduino nano和两块A4988模块A4988模块一共有16pin GND接0V VCC接+5V VMOT接步进电机电源(+12V或者+9V或者+5V均可) MS1/MS2接+5V MS3接0V ENABLE接0V RESRT/SLEEP接5V ---以上为两块A4988相同接法 一块的 STEP接nano的D2 DIR接nano的D5 1A/1B/2A/2B接其中一个步进电机的四根线 另一块 STEP接nano的D3 DIR接nano的D6 1A/1B/2A/2B接其中另一个步进电机的四根线

Inkscape教程(二)--形状

tutorial: 形状 本教程涵盖四种形状工具:矩形、椭圆、星形和螺旋线。我们将向你展 示Inkscape在形状绘制上的能力,并通过实例演示这些工具的用法和用途。 通过Ctrl+Arrows, 滚轮, 或中键拖动将绘图页面向下卷动。绘图对象的创建 、选择、变换等基本操作,请参考帮助Help > 教程Tutorials中的基础教程。 Inkscape有四种通用的形状工具,可以创建和编辑相应的形状。每种形状类型都具有共同的特征,可以通过拖动式的控制柄和一些数值参数来调节,使其具有不同的外观。 例如,在星形工具中,可以改变星的角数,边长,角度,圆角等,但仍然保持星形。形状不像简单路径那样“自由”,但通常更有趣,也更有用。形状总是可以转为路径(Ctrl+Shift+C),但路径不能转为形状。 形状工具包括:矩形, 椭圆, 星形, 和螺旋线。首先,我们看一下形状工具的基本工作模式,然后再分别详细介绍。 一般性操作 选择相应的形状工具,在画布上拖动drag鼠标可以创建新的形状。新形状创建后(自动被选中),上面有白色标记状的控制柄,可以通过拖动这些控制柄改变形状的外观。 在任意一种形状工具模式下,或在节点工具模式下(F2),选择任意类型的形状,都可以使形状的控制柄显现出来。当鼠标悬停在控制柄上时,底部的状态栏将会告诉你拖动或点击将产生的编辑效果。 每一种形状工具在绘图区顶部都会显示一个水平的工具控制栏。通常包括几个数字输入框和恢复默认参数的按钮。如果当前选择的形状工具类型与当前对象的形状类型一致,在控制栏中输入数字也可以改变被选对象的形状。

制柄。 下图中前两个矩形具有等半径圆角,后两个则是椭圆形圆角: 在矩形工具模式下,点击选择这些矩形,看看他们的倒圆控制柄的区别。 有时,在整个绘图中,我们希望圆角的半径和形状保持不变,而不是随着矩形的大小而变化(例如流程图中,不同大小的矩形具有相同的圆角)。这在Inkscape中可以轻松实现。切换到选择工具,在工具控制栏的尾部,有四个开关按钮,左数第二个按钮(显示两个同心圆角),可以控制缩放矩形时圆角是否也同步缩放。 例如,在关闭“缩放圆角”情况下,下图中原始的红色矩形被复制和缩放了数次,各自具有不同的长宽 比例:

英美概况课程写作要求及选题

《英美概况》选修课课程论文选题及要求 一、要求 1. 课程论文内容应与所学内容密切相关,涉及英美两国历史、政治、教育、文化、语言等方面的有关内容及以上方面的中英对比等。严禁抄袭,如发现,一律按作弊论处。 2. 英语写作,800-1000字,包括论文题目,摘要,关键词及参考文献在内 3. 英文摘要80字左右,关键词3-5个。 4. 参考文献资料3篇及以上。 5. 参考文献:引用国外作者的文章按作者姓名英文字母先后排序, 引用国内作者的文章按拼音顺序。包括文献编号、作者姓名、书名、或文集名、期刊名、出版单位、出版年月、页码等。论文用A4纸单面打印,装订(页面设置为:左2.8,右2.5,上2.5,下2.5,行距固定值18磅)。 6. 页码从正文第一页开始按阿拉伯数字连续编排,位于页面底端居中。 二、上交时间 13-14周 三、封面及正文格式说明

青岛农业大学全校选修课 (宋体二号) 英美概况课程论文 (宋体一号加粗) 论文题目 (宋体3号) 学生专业班级英语2007级3班 学生姓名(学号)XXX 20073171 二O一三年五月XX 日

论文格式要求 题目字居中On Wordsworth and Emerson’s Conception of Nature (加粗Times New Roman小三空一行) Yu Lianjun(Times New Roman加粗四号) Class 2, 2007, Foreign Languages School (加粗Times New Roman小四号空一行) Abstract:(加粗Times New Roman小四号)The mid-20th century has brought with it many significant changes and progresses in the study of language.(Times New Roman 小四号) Key words(加粗Times New Roman小四号):Changes; Progresses; Study;Language (Times New Roman小四号空一行) 华兹华斯和爱默生对大自然的不同理解(宋体四号空一行) 摘要(加粗宋体小四号):本文旨在通过对华兹华斯和爱默生诗歌的比较和分析来理解两人对于自然不同的把握。(宋体小四号行距20磅) 关键词(加粗宋体小四号):自然;超验主义之自然;消极心态;个人主义(宋体小四号空一行) 1. Introduction(加粗Times New Roman四号,不用单独一页,接在关键词后) The mid-20th century has brought with it many significant changes and progresses in the study of language.(Times New Roman小四号行距20磅) 2. Wordsworth’s Conception of Nature(Times New Roman四号) 2.1 Wordsworth’s Living Backgrounds(Times New Roman四号) The mid-20th century has brought with it many significant changes and progresses in the study of language.(Times New Roman小四号行距20磅) 2.2 Instruments(Times New Roman四号) In the 19th century, romanticism prevailed as the literary mainstream throughout the European continent. William Wordsworth (1770-1850) was one of the pioneers in the romanticist movement.(Times New Roman小四号行距20磅) 3. Conclusion (Times New Roman四号)