Coherent Sube un 21% en un Año a Medida que la IA Pasa "Del Cobre al Óptico". ¿Es una Compra?

Wiltone Asuncion • 5 minutos leídos
Revisado por: Michael Douglass
Última actualización Nov 8, 2026

@thexfilephoto from Getty Images via Canva; @SUMALI IBNU CHAMID from Alemedia.id via Canva

Puntos clave

  • La acción de Coherent ha subido un 21% en el último año, pero está aproximadamente un 56% por debajo del máximo que marcó en junio, una subida impulsada por la inversión de $2 mil millones de Nvidia.
  • Los ingresos aumentaron un 50% en el trimestre de septiembre, la dirección ahora espera un crecimiento de ingresos pro forma superior al 60% para el año fiscal 2027, y firmó un acuerdo PhotonLink valorado en unos $20 mil millones.
  • Los temores sobre el gasto en IA y la operación de $115 mil millones de Marvell por Lumentum han hecho que el P/E forward de Coherent caiga por debajo de su promedio de cinco años.
  • Coherent parece una compra a este múltiplo, siempre que el flujo de caja operativo vuelva a ser positivo para el informe del trimestre de diciembre.

Coherent (COHR) ha subido un 21% en el último año, pero ha dado un viaje de ida y vuelta para llegar ahí. Una inversión de $2 mil millones de Nvidia (NVDA) ayudó a enviar la acción a un récord en junio, y ahora está aproximadamente un 56% por debajo de ese pico. El 5 de noviembre, el día después de sus mejores previsiones hasta la fecha, cayó un 13% cuando las victorias de los demócratas en las elecciones intermedias hundieron las acciones de IA, para luego recuperar un 13,6% el 6 de noviembre.

El 2 de noviembre, Marvell Technology (MRVL) acordó comprar a su rival Lumentum (LITE) en una operación totalmente en acciones valorada en $115 mil millones. Esto deja a Coherent como el gran fabricante de láseres independiente.

Nvidia encendió la mecha

El 2 de marzo, Nvidia compró aproximadamente 7,8 millones de nuevas acciones de Coherent a $256,80 cada una y firmó un acuerdo de suministro a varios años para láseres y productos de redes ópticas. (Nvidia pagó muy por encima del nivel al que cotiza Coherent ahora, por lo que esa participación está en pérdidas).

Coherent se incorporó al S&P 500 el 23 de marzo, y en mayo reportó ingresos del trimestre de marzo un 21% más altos (27% pro forma). Luego, el 2 de junio, el CEO de Nvidia, Jensen Huang, apareció en la conferencia principal de Marvell en Computex y dijo que el cobre "tiene sus límites", dejando más trabajo para la óptica. Coherent saltó un 17% hasta un cierre récord.

TIKR sigue a 26 analistas sobre Coherent. ¿Cuántos dicen "Comprar"?

Consulta el desglose completo de las calificaciones de Compra, Mantener y Vender sobre Coherent, junto con las estimaciones de ingresos y ganancias de Wall Street, todo en un solo lugar. Más de 500.000 inversores usan TIKR para investigar acciones como esta. Ver las calificaciones de los analistas sobre Coherent

Luego los inversores se pusieron nerviosos por el gasto en IA

Los inversores comenzaron a dudar nuevamente de los presupuestos de IA después de que Lam Research reportara a finales de octubre, y los resultados de Intel y Amazon una semana después lo empeoraron.

La operación de Lumentum es más difícil de interpretar. Una vez que se cierre, Marvell venderá láseres y transceptores junto a sus propios chips, y el margen bruto no GAAP de Lumentum fue del 53,2% en el trimestre de septiembre, frente al 40,6% de Coherent. Los clientes cautelosos de comprar óptica a un fabricante de chips podrían enviar más pedidos a Coherent. O un Marvell vendiendo módulos completos podría mantener el margen de Coherent cerca del 40%.

Después del informe, BofA recortó su precio objetivo a $240 desde $400. B. Riley argumenta que los múltiplos de las acciones de óptica ahora siguen más de cerca el sentimiento sobre la financiación de la IA que los resultados trimestrales.

El negocio nunca se desaceleró

En el trimestre terminado el 30 de septiembre, los ingresos se dispararon un 50% hasta $2,37 mil millones. Para el trimestre de diciembre, Coherent prevé ingresos de $2,55 mil millones – $2,75 mil millones, por encima del consenso de $2,54 mil millones, y ahora espera un crecimiento pro forma para el año fiscal 2027 superior al 60%. También firmó un acuerdo PhotonLink con una importante empresa de IA valorado en unos $20 mil millones durante cinco años, con ingresos que aumentarán desde principios de 2028.

"A medida que los centros de datos de IA pasan de la conectividad de cobre a la óptica, la amplia plataforma de fotónica y la escala de fabricación de Coherent nos posicionan para ayudar a los clientes a satisfacer las crecientes necesidades de ancho de banda y eficiencia energética", dijo el CEO Jim Anderson en el comunicado de resultados del primer trimestre de Coherent.

Antes del informe, Wall Street tenía un EPS normalizado que subía desde $5,61 para el año fiscal 2026 (los años terminan en junio) a $9,42 para el año fiscal 2027 y $13,97 para el año fiscal 2028:

Gráfico de barras de TIKR del EPS normalizado de Coherent, resultados reales y estimaciones de consenso, $ por acción, años fiscales 2024-2029 (años terminados en junio).
Coherent# 1. 概述 ## 1.1 什么是MyBatis - MyBatis 是一款优秀的**持久层框架** - 它支持自定义 SQL、存储过程以及高级映射 - MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 - MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录 ## 1.2 持久化 数据持久化 - 持久化就是将程序的数据在持久状态和瞬时状态转化的过程 - 内存:**断电即失** - 数据库(jdbc),io文件持久化 ## 1.3 持久层 Dao层,Service层,Controller层 - 完成持久化工作的代码块 - 层界限十分明显 ## 1.4 为什么需要MyBatis - 帮助程序员将数据存入到数据库中 - 方便 - 传统的JDBC代码太复杂了,简化,框架,自动化 - 不用MyBatis也可以,更容易上手 - 优点: - 简单易学 - 灵活 - sql和代码的分离,提高了可维护性 - 提供映射标签,支持对象与数据库的orm字段关系映射 - 提供对象关系映射标签,支持对象关系组建维护 - 提供xml标签,支持编写动态sql # 2. 第一个MyBatis程序 思路:搭建环境 --> 导入MyBatis --> 编写代码 --> 测试 ## 2.1 搭建环境 搭建数据库 ```sql CREATE DATABASE `mybatis`; USE `mybatis`; CREATE TABLE `user`( `id` INT(20) NOT NULL PRIMARY KEY, `name` VARCHAR(30) DEFAULT NULL, `pwd` VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'张三','123456'), (2,'李四','123456'), (3,'王五','123456') ``` 新建项目 1. 新建一个普通的maven项目 2. 删除src目录 3. 导入maven依赖 ```xml mysql mysql-connector-java 8.0.25 org.mybatis mybatis 3.5.7 junit junit 4.13.2 ``` ## 2.2 创建一个模块 - 编写mybatis的核心配置文件 ```xml ``` - 编写mybatis工具类 ```java //sqlSessionFactory --> sqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用MyBatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } } ``` ## 2.3 编写代码 - 实体类 ```java public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } 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; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } } ``` - Dao接口 ```java public interface UserDao { List getUserList(); } ``` - 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件 ```xml ``` ## 2.4 测试 注意点: org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry. **MapperRegistry是什么?** 核心配置文件中注册mappers - junit测试 ```java public class UserDaoTest { @Test public void test(){ //第一步:获得SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List userList = userDao.getUserList(); for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); } } ``` 可能会遇到的问题: 1. 配置文件没有注册 2. 绑定接口错误 3. 方法名不对 4. 返回类型不对 5. Maven导出资源问题 # 3. CRUD ## 3.1 namespace namespace中的包名要和Dao/mapper接口的包名一致 ## 3.2 select 选择,查询语句 - id:就是对应的namespace中的方法名 - resultType:Sql语句执行的返回值 - parameterType:参数类型 1. 编写接口 ```java //根据ID查询用户 User getUserById(int id); ``` 2. 编写对应的mapper中的sql语句 ```xml ``` 3. 测试 ```java @Test public void getUserById(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } ``` ## 3.3 Insert ```xml insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd}) ``` ## 3.4 Update ```xml update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id} ``` ## 3.5 Delete ```xml delete from mybatis.user where id = #{id} ``` 注意点: - 增删改需要提交事务 ## 3.6 分析错误 - 标签不要匹配错 - resource绑定mapper,需要使用路径 - 程序配置文件必须符合规范 - NullPointerException,没有注册到资源 - 输出的xml文件中存在中文乱码问题 - maven资源没有导出问题 ## 3.7 万能Map 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map ```java //万能的Map int addUser2(Map map); ``` ```xml insert into mybatis.user (id, name, pwd) values (#{userid},#{userName},#{password}) ``` ```java @Test public void addUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map map = new HashMap(); map.put("userid",5); map.put("userName","Hello"); map.put("password","222333"); mapper.addUser2(map); sqlSession.commit(); sqlSession.close(); } ``` Map传递参数,直接在sql中取出key即可 对象传递参数,直接在sql中取对象的属性即可 只有一个基本类型参数的情况下,可以直接在sql中取到 多个参数用Map,**或者注解** ## 3.8 思考题 模糊查询怎么写? 1. Java代码执行的时候,传递通配符% % ```java List userList = mapper.getUserLike("%李%"); ``` 2. 在sql拼接中使用通配符 ```xml select * from mybatis.user where name like "%"#{value}"%" ``` # 4. 配置解析 ## 4.1 核心配置文件 - mybatis-config.xml - MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息 ```xml configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器) ``` ## 4.2 环境配置(environments) MyBatis可以配置成适应多种环境 **不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境** MyBatis默认的事务管理器就是JDBC,连接池:POOLED ## 4.3 属性(properties) 我们可以通过properties属性来实现引用配置文件 这些属性可以在外部进行配置,并可以进行动态替换。你既可以在 properties 元素体中直接编写属性,如: ```xml ``` 编写一个配置文件 db.properties ```properties driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456 ``` 在核心配置文件中引入 ```xml ``` - 可以直接引入外部文件 - 可以在其中增加一些属性配置 - 如果两个文件有同一个字段,优先使用外部配置文件的 ## 4.4 类型别名(typeAliases) - 类型别名是为Java类型设置一个短的名字 - 存在的意义仅在于用来减少类完全限定名的冗余 ```xml ``` 也可以指定一个包名,MyBatis会在包名下面搜索需要的Java Bean,比如: 扫描实体类的包,它的默认别名就为这个类的类名,首字母小写 ```xml ``` 在实体类比较少的时候,使用第一种方式 如果实体类十分多,建议使用第二种 第一种可以DIY别名,第二种则不行,如果非要改,需要在实体上增加注解 ```java @Alias("user") public class User {} ``` ## 4.5 设置(settings) | 设置名 | 描述 | 有效值 | 默认值 | | :----------------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | :----- | | cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true \| false | true | | lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 `fetchType` 属性来覆盖该项的开关状态。 | true \| false | false | | aggressiveLazyLoading | 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考 `lazyLoadTriggerMethods`)。 | true \| false | false | | multipleResultSetsEnabled | 是否允许单个语句返回多结果集(需要数据库驱动支持)。 | true \| false | true | | useColumnLabel | 使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。 | true \| false | true | | useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 | true \| false | false | | autoMappingBehavior | 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。 FULL 会自动映射任何复杂的结果集(无论是否嵌套)。 | NONE, PARTIAL, FULL | PARTIAL | | autoMappingUnknownColumnBehavior | 指定发现自动映射目标未知列(或未知属性类型)的行为。`NONE`: 不做任何反应`WARNING`: 输出警告日志(`'org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'` 的日志等级必须设置为 `WARN`)`FAILING`: 映射失败 (抛出 `SqlSessionException`) | NONE, WARNING, FAILING | NONE | | defaultExecutorType | 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement); BATCH 执行器不仅重用语句还会执行批量更新。 | SIMPLE REUSE BATCH | SIMPLE | | defaultStatementTimeout | 设置超时时间,它决定数据库驱动等待数据库响应的秒数。 | 任意正整数 | 未设置 | | defaultFetchSize | 为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。 | 任意正整数 | 未设置 | | defaultResultSetType | 指定语句默认的滚动策略。(新增于 3.5.5) | FORWARD_ONLY \| SCROLL_SENSITIVE \| SCROLL_INSENSITIVE \| DEFAULT(等同于未设置) | 未设置 | | safeRowBoundsEnabled | 是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 | true \| false | false | | safeResultHandlerEnabled | 是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 true。 | true \| false | true | | mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true \| false | false | | localCacheScope | MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 | SESSION \| STATEMENT | SESSION | | jdbcTypeForNull | 当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。 某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 | JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。 | OTHER | | lazyLoadTriggerMethods | 指定对象的哪些方法触发一次延迟加载。 | 用逗号分隔的方法列表。 | equals,clone,hashCode,toString | | defaultScriptingLanguage | 指定动态 SQL 生成使用的默认脚本语言。 | 一个类型别名或全限定类名。 | org.apache.ibatis.scripting.xmltags.XMLLanguageDriver | | defaultEnumTypeHandler | 指定 Enum 使用的默认 `TypeHandler` 。(新增于 3.4.5) | 一个类型别名或全限定类名。 | org.apache.ibatis.type.EnumTypeHandler | | callSettersOnNulls | 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值初始化的时候比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。 | true \| false | false | | returnInstanceForEmptyRow | 当返回行的所有列都是空时,MyBatis默认返回 `null`。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2) | true \| false | false | | logPrefix | 指定 MyBatis 增加到日志名称的前缀。 | 任何字符串 | 未设置 | | logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J \| LOG4J \| LOG4J2 \| JDK_LOGGING \| COMMONS_LOGGING \| STDOUT_LOGGING \| NO_LOGGING | 未设置 | | proxyFactory | 指定 Mybatis 创建可延迟加载对象所用到的代理工具。 | CGLIB \| JAVASSIST | JAVASSIST | | vfsImpl | 指定 VFS 的实现 | 自定义 VFS 的实现的类全限定名,以逗号分隔。 | 未设置 | | useActualParamName | 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 `-parameters` 选项。(新增于 3.4.1) | true \| false | true | | configurationFactory | 指定一个提供 `Configuration` 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为`static Configuration getConfiguration()` 的方法。(新增于 3.2.3) | 一个类型别名或完全限定类名。 | 未设置 | | shrinkWhitespacesInSql | 从SQL中删除多余的空格字符。请注意,这也会影响SQL中的文字字符串。 (新增于 3.5.5) | true \| false | false | | defaultSqlProviderType | Specifies an sql provider class that holds provider method (Since 3.5.6). This class apply to the `type`(or `value`) attribute on sql provider annotation(e.g. `@SelectProvider`), when these attribute was omitted. | A type alias or fully qualified class name | Not set | ## 4.6 其他配置 - typeHandlers(类型处理器) - objectFactory(对象工厂) - plugins插件 - mybatis-generator-core - mybatis-plus - 通用mapper ## 4.7 映射器(mappers) MapperRegistry:注册绑定我们的Mapper文件 方式一:【推荐使用】 ```xml ``` 方式二:使用class文件绑定注册 ```xml ``` 注意点: - 接口和他的Mapper配置文件必须同名 - 接口和他的Mapper配置文件必须在同一个包下 方式三:使用扫描包进行注入绑定 ```xml ``` 注意点: - 接口和他的Mapper配置文件必须同名 - 接口和他的Mapper配置文件必须在同一个包下 ## 4.8 生命周期和作用域 ![image-20211020154620089](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211020154620089.png) 生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的**并发问题** **SqlSessionFactoryBuilder:** - 一旦创建了SqlSessionFactory,就不再需要它了 - 局部变量 **SqlSessionFactory:** - 说白了就是可以想象为:数据库连接池 - SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,**没有任何理由丢弃它或重新创建另一个实例** - 因此SqlSessionFactory的最佳作用域是应用作用域 - 最简单的就是使用**单例模式**或者静态单例模式 **SqlSession:** - 连接到连接池的一个请求 - SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域 - 用完之后需要赶紧关闭,否则资源被占用 ![image-20211020155319555](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211020155319555.png) 这里的每一个Mapper,就代表一个具体的业务 # 5. 解决属性名和字段名不一致的问题 ## 5.1 问题 数据库中的字段 ![image-20211020160020090](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211020160020090.png) 新建一个项目,拷贝之前的,测试实体类字段不一致的情况 ```java public class User { private int id; private String name; private String password; } ``` 测试出现问题 ![image-20211020160219590](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211020160219590.png) ```sql // select * from user where id = #{id} // 类型处理器 // select id,name,pwd from user where id = #{id} ``` 解决方法: - 起别名 ```xml ``` ## 5.2 resultMap 结果集映射 ``` id name pwd id name password ``` ```xml ``` - `resultMap` 元素是 MyBatis 中最重要最强大的元素 - ResultMap的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 - `ResultMap` 的优秀之处——你完全可以不用显

Únete a miles de inversores de todo el mundo que utilizan TIKR para supercargar sus análisis de inversión.

Regístrate GRATISNo se necesita tarjeta de crédito