支援整合课视频我想学习什么叫资源整合 震撼支援整合

&& &文章主题:
交流经验:3830
总积分:261644
级别:VIP5
文章: 1162
8.4& 集成JPA
&&&&&& JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有Hibernate、OpenJPA、TopLink、EclipseJPA等实现。
8.4.1& 如何集成
&&&&&& Spring目前提供集成Hibernate、OpenJPA、TopLink、EclipseJPA四个JPA标准实现。
&&&&&& Spring通过使用如下Bean进行集成JPA(EntityManagerFactory):
LocalEntityManagerFactoryBean:适用于那些仅使用JPA进行数据访问的项目,该FactoryBean将根据JPA PersistenceProvider自动检测配置文件进行工作,一般从“META-INF/persistence.xml”读取配置信息,这种方式最简单,但不能设置Spring中定义的DataSource,且不支持Spring管理的全局事务,而且JPA 实现商可能在JVM启动时依赖于VM agent从而允许它们进行持久化类字节码转换(不同的实现厂商要求不同,需要时阅读其文档),不建议使用这种方式;
& & & & &persistenceUnitName:指定持久化单元的名称;
& & & & &使用方式:
java代码:
&bean id=&entityManagerFactory& class=&org.springframework.orm.jpa.LocalEntityManagerFactoryBean&&
&property name=&persistenceUnitName& value=&persistenceUnit&/&
从JNDI中获取:用于从Java EE服务器获取指定的EntityManagerFactory,这种方式在进行Spring事务管理时一般要使用JTA事务管理;
& & & 使用方式:
java代码:
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:jee=&http://www.springframework.org/schema/jee&
xsi:schemaLocation=&
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd&&
&jee:jndi-lookup id=&entityManagerFactory&
jndi-name=&persistence/persistenceUnit&/&
此处需要使用“jee”命名标签,且使用&jee:jndi-lookup&标签进行JNDI查找,“jndi-name”属性用于指定JNDI名字。
LocalContainerEntityManagerFactoryBean:适用于所有环境的FactoryBean,能全面控制EntityManagerFactory配置,如指定Spring定义的DataSource等等。
& & & & &persistenceUnitManager:用于获取JPA持久化单元,默认实现DefaultPersistenceUnitManager用于解决多配置文件情况
& & & & &dataSource:用于指定Spring定义的数据源;
& & & & &persistenceXmlLocation:用于指定JPA配置文件,对于对配置文件情况请选择设置persistenceUnitManager属性来解决;
& & & & &persistenceUnitName:用于指定持久化单元名字;
& & & & &persistenceProvider:用于指定持久化实现厂商类;如Hibernate为org.hibernate.ejb.HibernatePersistence类;
& & & & &jpaVendorAdapter:用于设置实现厂商JPA实现的特定属性,如设置Hibernate的是否自动生成DDL的属性generateDdl;这些属性是厂商特定的,因此最好在这里设置;目前Spring提供HibernateJpaVendorAdapter、OpenJpaVendorAdapter、EclipseLinkJpaVendorAdapter、TopLinkJpaVendorAdapter、OpenJpaVendorAdapter四个实现。其中最重要的属性是“database”,用来指定使用的数据库类型,从而能根据数据库类型来决定比如如何将数据库特定异常转换为Spring的一致性异常,目前支持如下数据库(DB2、DERBY、H2、HSQL、INFORMIX、MYSQL、ORACLE、POSTGRESQL、SQL_SERVER、SYBASE)。
& & & & &jpaDialect:用于指定一些高级特性,如事务管理,获取具有事务功能的连接对象等,目前Spring提供HibernateJpaDialect、OpenJpaDialect 、EclipseLinkJpaDialect、TopLinkJpaDialect、和DefaultJpaDialect实现,注意DefaultJpaDialect不提供任何功能,因此在使用特定实现厂商JPA实现时需要指定JpaDialect实现,如使用Hibernate就使用HibernateJpaDialect。当指定jpaVendorAdapter属性时可以不指定jpaDialect,会自动设置相应的JpaDialect实现;
& & & & &jpaProperties和jpaPropertyMap:指定JPA属性;如Hibernate中指定是否显示SQL的“hibernate.show_sql”属性,对于jpaProperties设置的属性自动会放进jpaPropertyMap中;
& & & & &loadTimeWeaver:用于指定LoadTimeWeaver实现,从而允许JPA 加载时修改相应的类文件。具体使用得参考相应的JPA规范实现厂商文档,如Hibernate就不需要指定loadTimeWeaver。
接下来学习一下Spring如何集成JPA吧:
1、准备jar包,从下载的hibernate-distribution-3.6.0.Final包中获取如下Hibernate需要的jar包从而支持JPA:
lib\jpa\hibernate-jpa-2.0-api-1.0.0.Final.jar //用于支持JPA
&&&&&&&&&&&&&
2、对象模型定义,此处使用UserModel2:
java代码:
package cn.javass.spring.chapter8;
//省略import
@Table(name = &test&)
public class UserModel2 {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = &name&)
private String myN
//省略getter和setter
注意此处使用的所有注解都是位于javax.persistence包下,如使用@org.hibernate.annotations.Entity 而非@javax.persistence. Entity将导致JPA不能正常工作。
1、 JPA配置定义(chapter8/persistence.xml),定义对象和数据库之间的映射:
java代码:
&?xml version=&1.0& encoding=&UTF-8&?&
&persistence version=&1.0&
xmlns=&/xml/ns/persistence&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&/xml/ns/persistence
/xml/ns/persistence/persistence_1_0.xsd&&
&persistence-unit name=&persistenceUnit& transaction-type=&RESOURCE_LOCAL&/&
&/persistence&
&&&&& 在JPA配置文件中,我们指定要持久化单元名字,和事务类型,其他都将在Spring中配置。
2、 数据源定义,此处使用第7章的配置文件,即“chapter7/ applicationContext-resources.xml”文件。
3、 EntityManagerFactory配置定义(chapter8/applicationContext-jpa.xml):
java代码:
&bean id=&entityManagerFactory& class=&org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&&
&property name=&dataSource& ref=&dataSource&/&
&property name=&persistenceXmlLocation& value=&chapter8/persistence.xml&/&
&property name=&persistenceUnitName& value=&persistenceUnit&/&
&property name=&persistenceProvider& ref=&persistenceProvider&/&
&property name=&jpaVendorAdapter& ref=&jpaVendorAdapter&/&
&property name=&jpaDialect& ref=&jpaDialect&/&
&property name=&jpaProperties&&
&prop key=&hibernate.show_sql&&true&/prop&
&/property&
&bean id=&persistenceProvider& class=&org.hibernate.ejb.HibernatePersistence&/&
java代码:
&bean id=&jpaVendorAdapter& class=&org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&&
&property name=&generateDdl& value=&false& /&
&property name=&database& value=&HSQL&/&
&bean id=&jpaDialect& class=&org.springframework.orm.jpa.vendor.HibernateJpaDialect&/&
LocalContainerEntityManagerFactoryBean:指定使用本地容器管理EntityManagerFactory,从而进行细粒度控制;
dataSource属性指定使用Spring定义的数据源;
persistenceXmlLocation指定JPA配置文件为chapter8/persistence.xml,且该配置文件非常简单,具体配置完全在Spring中进行;
persistenceUnitName指定持久化单元名字,即JPA配置文件中指定的;
persistenceProvider:指定JPA持久化提供商,此处使用Hibernate实现HibernatePersistence类;
jpaVendorAdapter:指定实现厂商专用特性,即generateDdl= false表示不自动生成DDL,database= HSQL表示使用hsqldb数据库;
jpaDialect:如果指定jpaVendorAdapter此属性可选,此处为HibernateJpaDialect;
&jpaProperties:此处指定“hibernate.show_sql =true”表示在日志系统debug级别下将打印所有生成的SQL。
4、 获取EntityManagerFactory:
java代码:
package cn.javass.spring.chapter8;
//省略import
public class JPATest {
private static EntityManagerFactory entityManagerF
@BeforeClass
public static void setUpClass() {
String[] configLocations = new String[] {
&classpath:chapter7/applicationContext-resources.xml&,
&classpath:chapter8/applicationContext-jpa.xml&};
ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
entityManagerFactory = ctx.getBean(EntityManagerFactory.class);
此处我们使用了chapter7/applicationContext-resources.xml定义的“dataSource”数据源,通过ctx.getBean(EntityManagerFactory.class)获取EntityManagerFactory。
5、& 通过EntityManagerFactory获取EntityManager进行创建和删除表:
java代码:
public void setUp() throws SQLException {
//id自增主键从0开始
String createTableSql = &create memory table test& + &(id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, & + &name varchar(100))&;
executeSql(createTableSql);
public void tearDown() throws SQLException {
String dropTableSql = &drop table test&;
executeSql(dropTableSql);
private void executeSql(String sql) throws SQLException {
EntityManager em = entityManagerFactory.createEntityManager();
beginTransaction(em);
em.createNativeQuery(sql).executeUpdate();
commitTransaction(em);
closeEntityManager(em);
private void closeEntityManager(EntityManager em) {
em.close();
private void rollbackTransacrion(EntityManager em) throws SQLException {
if(em != null) {
em.getTransaction().rollback();
private void commitTransaction(EntityManager em) throws SQLException {
em.getTransaction().commit();
private void beginTransaction(EntityManager em) throws SQLException {
em.getTransaction().begin();
使用EntityManagerFactory创建EntityManager,然后通过EntityManager对象的createNativeQuery创建本地SQL执行创建和删除表。
6、 使用EntityManagerFactory获取EntityManager对象进行持久化数据:
java代码:
public void testFirst() throws SQLException {
UserModel2 model = new UserModel2();
model.setMyName(&test&);
EntityManager em =
em = entityManagerFactory.createEntityManager();
beginTransaction(em);
em.persist(model);
commitTransaction(em);
} catch (SQLException e) {
rollbackTransacrion(em);
} finally {
closeEntityManager(em);
使用EntityManagerFactory获取EntityManager进行操作,看到这还能忍受冗长的代码和事务管理吗?Spring同样提供JpaTemplate模板类来简化这些操作。
大家有没有注意到此处的模型对象能自动映射到数据库,这是因为Hibernate JPA实现默认自动扫描类路径中的@Entity注解类及*.hbm.xml映射文件,可以通过更改Hibernate JPA属性“hibernate.ejb.resource_scanner”,并指定org.hibernate.ejb.packaging.Scanner接口实现来定制新的扫描策略。
8.4.2& 使用JpaTemplate
JpaTemplate模板类用于简化事务管理及常见操作,类似于JdbcTemplate模板类,对于复杂操作通过提供JpaCallback回调接口来允许更复杂的操作。
&&&&&& 接下来示例一下JpaTemplate的使用:
1、修改Spring配置文件(chapter8/applicationContext-jpa.xml),添加JPA事务管理器:
java代码:
&bean id=&txManager& class=&org.springframework.orm.jpa.JpaTransactionManager&&
&property name=&entityManagerFactory& ref=&entityManagerFactory&/&
txManager:指定事务管理器,JPA使用JpaTransactionManager事务管理器实现,通过entityManagerFactory指定EntityManagerFactory;用于支持Java SE环境的JPA扩展的持久化上下文(EXTENDED Persistence Context)。
2、修改JPATest类,添加类变量ctx,用于后边使用其获取事务管理器使用:
java代码:
package cn.javass.spring.chapter8;
public class JPATest {
private static EntityManagerFactory entityManagerF
private static ApplicationC
@BeforeClass
public static void beforeClass() {
String[] configLocations = new String[] {
&classpath:chapter7/applicationContext-resources.xml&,
&classpath:chapter8/applicationContext-jpa.xml&};
ctx = new ClassPathXmlApplicationContext(configLocations);
entityManagerFactory = ctx.getBean(EntityManagerFactory.class);
3)JpaTemplate模板类使用:
java代码:
public void testJpaTemplate() {
final JpaTemplate jpaTemplate = new JpaTemplate(entityManagerFactory);
final UserModel2 model = new UserModel2();
model.setMyName(&test1&);
PlatformTransactionManager txManager = ctx.getBean(PlatformTransactionManager.class);
new TransactionTemplate(txManager).execute(
new TransactionCallback&Void&() {
public Void doInTransaction(TransactionStatus status) {
jpaTemplate.persist(model);
String COUNT_ALL = &select count(*) from UserModel&;
Number count = (Number) jpaTemplate.find(COUNT_ALL).get(0);
Assert.assertEquals(1, count.intValue());
jpaTemplate:可通过new JpaTemplate(entityManagerFactory)方式创建;
txManager:通过ctx.getBean(PlatformTransactionManager.class)获取事务管理器;
TransactionTemplate:通过new TransactionTemplate(txManager)创建事务模板对象,并通过execute方法执行TransactionCallback回调中的doInTransaction方法中定义需要执行的操作,从而将由模板类通过txManager事务管理器来进行事务管理,此处是调用jpaTemplate对象的persist方法进行持久化;
jpaTemplate.persist():根据JPA规范,在JPA扩展的持久化上下文,该操作必须运行在事务环境,还有persist()、 merge()、remove()操作也必须运行在事务环境;
jpaTemplate.find():根据JPA规范,该操作无需运行在事务环境,还有find()、getReference()、 refresh()、detach()和查询操作都无需运行在事务环境。
此实例与Hibernate和Ibatis有所区别,通过JpaTemplate模板类进行如持久化等操作时必须有运行在事务环境中,否则可能抛出如下异常或警告:
“javax.persistence.TransactionRequiredException:Executing an update/delete query”:表示没有事务支持,不能执行更新或删除操作;
警告“delaying identity-insert due to no transaction in progress”:需要在日志系统启动debug模式才能看到,表示在无事务环境中无法进行持久化,而选择了延迟标识插入。
以上异常和警告是没有事务造成的,也是最让人困惑的问题,需要大家注意。
8.4.3& 集成JPA及最佳实践
&&&&&& 类似于JdbcDaoSupport类,Spring对JPA也提供了JpaDaoSupport类来支持一致的数据库访问。JpaDaoSupport也是DaoSupport实现:
&&&&&& 接下来示例一下Spring集成JPA的最佳实践:
1、 定义Dao接口,此处使用cn.javass.spring.chapter7.dao. IUserDao:
2、 定义Dao接口实现,此处是JPA实现:
java代码:
package cn.javass.spring.chapter8.dao.
//省略import
@Transactional(propagation = Propagation.REQUIRED)
public class UserJpaDaoImpl extends JpaDaoSupport implements IUserDao {
private static final String COUNT_ALL_JPAQL = &select count(*) from UserModel&;
public void save(UserModel model) {
getJpaTemplate().persist(model);
public int countAll() {
Number count =
(Number) getJpaTemplate().find(COUNT_ALL_JPAQL).get(0);
return count.intValue();
此处注意首先JPA实现放在dao.jpa包里,其次实现类命名如UserJpaDaoImpl,即&&&JpaDaoImpl,当然如果自己有更好的命名规范可以遵循自己的,此处只是提个建议。
另外在类上添加了@Transactional注解表示该类的所有方法将在调用时需要事务支持,propagation传播属性为Propagation.REQUIRED表示事务是必需的,如果执行该类的方法没有开启事务,将开启一个新的事务。
3、进行资源配置,使用resources/chapter7/applicationContext-resources.xml:
4、dao定义配置,在chapter8/applicationContext-jpa.xml中添加如下配置:
4.1、首先添加tx命名空间用于支持事务:
java代码:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:tx=&http://www.springframework.org/schema/tx&
xsi:schemaLocation=&
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&&
4.2、为@Transactional注解事务开启事务支持:
java代码:
&tx:annotation-driven transaction-manager=&txManager&/&
只为类添加@Transactional 注解是不能支持事务的,需要通过&tx:annotation-driven&标签来开启事务支持,其中txManager属性指定事务管理器。
4.3、配置DAO Bean:
java代码:
&bean id=&abstractDao& abstract=&true&&
&property name=&entityManagerFactory& ref=&entityManagerFactory&/&
&bean id=&userDao&
class=&cn.javass.spring.chapter8.dao.jpa.UserJpaDaoImpl&
parent=&abstractDao&/&
首先定义抽象的abstractDao,其有一个entityManagerFactory属性,从而可以让继承的子类自动继承entityManagerFactory属性注入;然后定义userDao,且继承abstractDao,从而继承entityManagerFactory注入;我们在此给配置文件命名为applicationContext-jpa.xml表示JPA实现。
5、最后测试一下吧(cn.javass.spring.chapter8. JPATest):
java代码:
public void testBestPractice() {
String[] configLocations = new String[] {
&classpath:chapter7/applicationContext-resources.xml&,
&classpath:chapter8/applicationContext-jpa.xml&};
ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
IUserDao userDao = ctx.getBean(IUserDao.class);
UserModel model = new UserModel();
model.setMyName(&test&);
userDao.save(model);
Assert.assertEquals(1, userDao.countAll());
和Spring JDBC框架的最佳实践完全一样,除了使用applicationContext-jpa.xml代替了applicationContext-jdbc.xml,其他完全一样。也就是说,DAO层的实现替换可以透明化。
还有与集成其他ORM框架不同的是JPA在进行持久化或更新数据库操作时需要事务支持。
8.4.4& Spring+JPA的CRUD
Spring+JPA CRUD(增删改查)也相当简单,让我们直接看具体示例吧:
java代码:
public void testCRUD() {
PlatformTransactionManager txManager = ctx.getBean(PlatformTransactionManager.class);
final JpaTemplate jpaTemplate = new JpaTemplate(entityManagerFactory);
TransactionTemplate tansactionTemplate = new TransactionTemplate(txManager);
tansactionTemplate.execute(new TransactionCallback&Void&() {
public Void doInTransaction(TransactionStatus status) {
UserModel model = new UserModel();
model.setMyName(&test&);
jpaTemplate.persist(model);
model.setMyName(&test2&);
jpaTemplate.flush();//可选
String sql = &from UserModel where myName=?&;
List result = jpaTemplate.find(sql, &test2&);
Assert.assertEquals(1, result.size());
jpaTemplate.remove(model);
对于增删改必须运行在事务环境,因此我们使用TransactionTemplate事务模板类来支持事务。
持久化:使用JpaTemplate 类的persist方法持久化模型对象;
更新:对于持久化状态的模型对象直接修改属性,调用flush方法即可更新到数据库,在一些场合时flush方法调用可选,如执行一个查询操作等,具体请参考相关文档;
查询:可以使用find方法执行JPA QL查询;
删除:使用remove方法删除一个持久化状态的模型对象。
&&&&&& Spring集成JPA进行增删改查也相当简单,但本文介绍的稍微复杂一点,因为牵扯到编程式事务,如果采用声明式事务将和集成Hibernate方式一样简洁。
原创内容,转载请注明出处【】
这篇文章被编辑了 1 次. 最近一次更新是在
精品视频课程推荐
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术
技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容
数据校验、Javascript模拟多线程、下拉列表联动、操作XML、AJAX结合JSON的操作、Json-lib的使用
内容概述:本课程专注于构建:高可扩展性、高性能、大数据量、高并发、分布式的系统架构。
从零开始、全面系统、成体系的软件架构课程,循序渐进的讲述构建上述系统架构所需要的各种技术知识和技能。
技术要点:
1:构建基本的业务功能块,基于Maven+Git+Spring mvc+spring+mybatis+ehcache+mysql+X-gen代码生成
&2:高扩展性的分布式体系架构(基于Nginx+Varnish+Memcache+ActiveMQ)
&3:NoSQL的合理使用和架构优化(基于MongoDB)
&4:分布式文件存储和架构优化(基于MogileFS)
深入浅出的讲解JavaBen的写法、JavaBean的用法、JavaBean的实现机制、JavaBean对应翻译的代码理解。
选择一个版面
软件设计专版
Web前端技术
学习问题讨论
面试、就业
版权所有 Copyright(C) 私塾在线学习网用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1786)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'在这里输入标题回顾主题单元案例《网络我作主》,并结合自己的技术整合经验,从以下几个方面参与网络课程平台的讨论,比较使用技术前后,案例的各个要素所产生的变化,从而体会技术在其中的支持作用: 1.该案例体现了信息技术的哪些支持作用? 2.结合日常教学实践,请考虑在主题单元学习中开展信息化教学有何优势? 3. 你对案例在信息技术与课程整合方面的设计有什么好的建议?',
blogAbstract:'案例中对教学起了最好的作用是梳理,如果日常物理教学中使用信息技术,一方面可以有广阔的施展空间,可以展示各种现代神秘的军事科技,使现实与物理知识更好地结合,同时使学生学习的兴趣得到更大的提高?但同时我觉得采用主题单元案例的方法教学,等同于教师出课本,难度非常之大,为了制作这个作业,我将办公室的资料全搬了回房做,为了不影响日常的工作,今天用了一整天的时间来做,做完后还是觉得很差。我建议这种单元案例让专家来作,教师修改实施,毕业教师离专家还有一定的距离,教师的素质也不是个个教很好,如果我素质能够经常制作这种主题单元案例的话,我就不会在这教学了。不当之处的评论,请见凉。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 什么叫4k视频 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信