MyBatis是一个将对象映射到关系数据库的框架,强调高性能和简单性。 XML描述符或注释将对象耦合到SQL语句或存储过程。
已经是第三天了,我一直在尝试使用 Mybatis XML 配置实现一个简单的 CRUD 应用程序,而且我对整个 Spring 生态系统还是个新手。问题有点长,但我只分享了...
从 MyBatis 调用过程在 Java 中返回错误的数字结果
我尝试使用带有注释的MyBatis,但无法得到正确的结果。 最初我尝试了这条路 @Select("{ #{结果, javaType=BigDecimal, jdbcType=NUMERIC, mode=OUT} = 调用...
我尝试制作返回类型 ImmutableList 并从表中选择一堆 ID,但当然 mybatis 不知道该怎么做并抛出异常: org.apache.ibatis.反射.
在 LinkedHashmap 中返回 clob 数据时出错
我在 micronaut 中使用 mybatis .. 我有一个返回 LinkedHashMap 的动态 sql,我不知道表中有哪些列或它们的数据类型.. 当列的数据类型是 CLOB 时,麦克风 .. .
OracleConnection 的 CreateOracleArray 始终在内部创建一个数组 null
我在使用 MyBatis 的 TypeHandler 中遇到问题。在调用我的过程之前调用的 setParamter 方法中,我创建了必须在 PreparedStatement 中设置的 java.sql.Array。去...
列类型为postgresql bit(n),DO字段类型为java byte[n],mybatis如何插入记录?
我想解决将记录插入数据库时出现的以下 Postgresql 错误。 org.postgresql.util.PSQLException:错误:列“角色”类型是位,但表达式类型是 bytea。
我面临一个问题,我在 MyBatis 选择查询中的变量应该从外部获取它的值。像下面的代码 选择 我面临一个问题,我在 MyBatis select 查询中的变量应该从外部获取它的值。喜欢下面的代码 SELECT <bind name="checkRolePrice" value="true"/> // this line is current form. I want to set value from outside in here <bind name="checkRolePrice" value="checkRolePrice"/> // something like that, or #{checkRolePrice} <include refid="digitalAppPlanBaseColumns"> <property name="prefix" value=""/> </include>, da.ICON_URL, da.CATEGORY_ID, da.TYPE, ... List<DigitalAppPlanWrapper> getAllDigitalApps(@Param("role") String roleName, @Param("deviceType") String source, @Param("planIds") List<Long> planIds, @Param("trial") Integer trial, @Param("checkRolePrice") boolean checkRolePrice); 简而言之,我想从方法的参数中定义 checkRolePrice 绑定变量的值。 详情: MyBatis 入门版本:3.0.1 春季启动:3.0.4 爪哇:17 我尝试用两个if标签来得到结果。实际上,它奏效了。但我正在寻找更具可读性和简单的方法来做到这一点。 感谢您的帮助。 编辑V1: 我使用这个 <bind> 来定义我将在 <include> 块中选择的列。我不能在 <include> 块中使用方法参数。这就是为什么我必须使用 <bind> 变量。 <sql id="digitalAppPlanBaseColumns"> dap.ID ${prefix}ID, dap.APP_ID ${prefix}APP_ID, <if test="checkRolePrice"> CASE WHEN dapr.role_price is not null THEN dapr.role_price ELSE dap.price end ${prefix}PRICE, </if> <if test="!checkRolePrice"> dap.PRICE ${prefix}PRICE, </if> ... 我已经使用的解决方案。但这似乎有点奇怪。 顺便说一下,我使用了角色参数而不是新的。但情况还是一样。 SELECT <if test="role != null"> <bind name="checkRolePrice" value="true"/> </if> <if test="role == null"> <bind name="checkRolePrice" value="false"/> </if>
属性“sqlSessionFactory”或“sqlSessionTemplate”是必需的。我无法解决的问题
我的问题: 当我没有在 Application Boot 类中使用 @MapperScan 时,它有这样的问题: 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有资格...
@Transactional Spring MyBatis 不工作
我有一个 spring webapp,一切正常,但现在我需要一种方法来进行事务处理, 这是我的 applicationContext.xml 我有一个 spring webapp,一切正常,但现在我需要一种方法来进行事务处理, 这是我的 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> <!-- Enables the Spring MVC @Controller programming model --> <annotation-driven /> <!-- Bean para Nombre de Cliente --> <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> <resources mapping="/resources/**" location="/resources/" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <beans:property name="basename" value="classpath:mensajes" /> <beans:property name="defaultEncoding" value="UTF-8" /> </beans:bean> <beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <beans:property name="defaultLocale" value="es" /> <beans:property name="cookieName" value="myAppLocaleCookie"></beans:property> <beans:property name="cookieMaxAge" value="3600"></beans:property> </beans:bean> <interceptors> <beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <beans:property name="paramName" value="locale" /> </beans:bean> </interceptors> <context:component-scan base-package="com.web.*" /> <context:component-scan base-package="com.*" /> </beans:beans> 这是我的 database.xml <?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:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="monitor-properties/monitor.properties" /> <bean class="org.mybatis.spring.transaction.SpringManagedTransactionFactory" id="springManagedTransactionFactory"> </bean> <!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath:com/*/database/*.xml" /> <property name="dataSource" ref="dataSource" /> <property name="transactionFactory" ref="springManagedTransactionFactory" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="adminSaveSettings" class="com.SaveSettings"> <property name="sqlSession" ref="sqlSession" /> </bean> <!-- ORACLE --> <bean id="dataSource" class="com.CustomBasicDataSource" p:driverClassName="${oracle.driverClassName}" p:url="${oracle.url}" p:username="${oracle.username}" p:password="${oracle.password}" /> 在一个服务类中,我有一个自动装配的属性,这个属性有一个像这样的事务方法:我进行更新以将一行更改为“2”值,在我抛出 RuntimeException 之后,如果一切正常,更新必须回滚。 public class SaveSettings { protected final Logger logger = LoggerFactory.getLogger(getClass()); private SqlSession sqlSession; public SqlSession getSqlSession() { return sqlSession; } public void setSqlSession(SqlSession sqlSession) { this.sqlSession = sqlSession; } @Transactional(readOnly=false,rollbackFor=Exception.class) public int saveNewSettings(WebServer settings) { AdminPanelMapper qmap = sqlSession.getMapper(AdminPanelMapper.class); int inserted = 0; qmap.updateTo2(); throw new NullPointerException(); } } 我从 2 天前开始尝试在 google 和 stackoverflow 中找到的许多可能的解决方案,但它从来没有运行良好。在 database.xml 中,transactionManager 是注释,因为我正在尝试我发现的其他示例。 如果您想了解有关我的问题的更多信息,我会给您更多详细信息,请问我。对不起,如果我没有解释好。 谢谢大家! 编辑: 如果我为 transactionManager bean 编写和退出注释,这是错误。 ERROR: org.springframework.web.context.ContextLoader `- Context initialization failed org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from ServletContext resource [/WEB-INF/spring/database.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 65; cvc-complex-type.2.4.c: El comodín coincidente es estricto, pero no se ha encontrado ninguna declaración para el elemento 'tx:annotation-driven'.` 我在你的 xml 交易配置中看不到。 你有没有忘记放在那里: <tx:annotation-driven transaction-manager="transactionManager"/> 请注意,这与 spring-mvc 不同。 我遇到了同样的问题。我通过在类定义中添加 @Transactional 注释来解决它。 @Transactional public class SaveSettings { ... @Transactional(readOnly=false,rollbackFor=Exception.class) public int saveNewSettings(WebServer settings) { ... } }
如何在 mybatis 生成器中通过配置通过 updateByPrimaryKeySelective 设置 null
这是我的 batis 生成器文件: 这是我的 batis 生成器文件: <table tableName="jxc_stock_journal" enableCountByExample="true" enableSelectByPrimaryKey="true" enableSelectByExample="true" enableUpdateByPrimaryKey="true" enableDeleteByPrimaryKey="true" enableInsert="true" domainObjectName="JxcStockJournal"> <generatedKey column="id" sqlStatement="MySql" identity="true" /> </table> 因此它将生成映射器 xml 文件。在 updateByPrimaryKeySelective 方法中进行空检查: 我需要用updateByPrimaryKeySelective将一些字段设置为空,怎么办? 您需要使用“updateByPrimaryKey”方法设置一个空值。如您所见,您可以使用“updateByPrimaryKeySelective”来做到这一点。 使用 int updateByExampleSelective(@Param("record") PriceActivityApplyDO record, @Param("example") PriceActivityApplyExample example, @Param("selective") PriceActivityApplyDO.Column ... selective);
我正在尝试在 MyBatis 中使用游标和连接表来执行一对多查询。但是,我发现当应该返回多个结果时,游标只返回一个结果。通过
我正在开发基于 Mybatis 3.0.5、Mybatis-spring 1.0.1 和 Spring 3.0.5.RELEASE 的 Java EE 应用程序,我发现在 mybatis-config.xml 中使用别名存在问题。痕迹是: org.springfra...
我正在尝试将我的 spring 版本从 4 升级到 5.3.23 还将 Jackson 数据绑定更新为 2.13.5 这样做时我需要将 mybatis 从 3.0 升级到 3.5.11 还有 mybatis-spring 从 1.0 到 2.1.0
mybatis EnumOrdinalTypeHandler 使用@Param 返回错误
mybatis 3.5.11版本 @插入({ “插入 ENUMORDINALTEST(ID,名称)”, “值(#{row.id,jdbcType=INTEGER},#{row.name,jdbcType=INTEGER,typeHandler=org.apache.i...
Mybatis MateObject.setValue("list[0]", 1), list 不会自动创建
使用MateObject:setValue("list[0]", 1)修改空列表,不会自动创建列表对象。 @测试 公共无效测试1(){ 演示 demo = new Demo();
我有一个带有字段 bar、baz 和 buz 的类 Foo 以及一个 XML 映射文件: 我将如何编写一个通用的更新映射器来更新记录...
iBatis 到 MyBatis 迁移: 需要 MyBatis foreach 逻辑的帮助,因为 Map 包含 Value 作为 ArrayList。 下面的java代码是逻辑: employeeRequest.put("ID", employeeId); 地图 iBatis 到 MyBatis 迁移: 需要 MyBatis foreach 逻辑的帮助,因为 Map 包含 Value 作为 ArrayList。 下面的java代码是逻辑: employeeRequest.put("ID", employeeId); Map <String,ArrayList<String> employeeRequest = new HashMap<String, ArrayList<String>>(); Set<String> employeeSet = new HashSet<String>(); for(Employee employee: employeeList) { String name = employee.getName(); String value = employee.getValue(); if("EMPLOYEE".equalsIgnoreCase(name) { employeeSet.add(value) } } if(!employeeSet.isEmpty()) { employeeRequest.put("EMPLOYEE", new ArrayList<String>(employeeSet)) } iBatis SQL: 我以前的代码我正在使用具有以下查询的 iBatis <select id="getEmployeeName" resultclass="java.util.HashMap" parameterClass="java.util.Map"> SELECT EMP.EMPNAM NAME FROM EMPLOYEE EMP WHERE EMP.ID = #ID# <isNotEmpty property="EMPLOYEE" prepend="AND"> <iterate property="EMPLOYEE" conjunction="AND"> EMP.EMPNAM != #EMPLOYEE[]# <iterate> </isNotEmpty> </select> MyBatis SQL: 现在我正在迁移到 MyBatis,所以格式化查询如下 <select id="getEmployeeName" resultclass="java.util.HashMap" parameterClass="java.util.Map"> SELECT EMP.EMPNAM NAME FROM EMPLOYEE EMP WHERE EMP.ID = #{ID}# <if test="EMPLOYEE !=null and EMPLOYEE>0"> <foreach collection="EMPLOYEE" index="index" item="item" separator="AND"> EMP.EMP_ID != ${item} </foreach> </if> </select> 你们中的任何一个都可以帮助我正确查询上述 java 代码逻辑吗? separator值周围缺少空格:AND而不仅仅是AND. 对于参数,使用 #{param} 来绑定参数,而不是 ${param} 只是将值连接到 SQL 字符串。这并不能阻止工作,但这非常糟糕。 != 不是标准 SQL,不适用于每个数据库供应商(尽管它可能适用于您正在使用的供应商),不像 NOT column = value, <foreach collection="EMPLOYEE" index="index" item="item" separator=" AND "> NOT EMP.EMP_ID = #{item} </foreach> 进一步更好地使用IN: EMP.EMP_ID NOT IN (<foreach collection="EMPLOYEE" index="index" item="item" separator=", "> #{item} </foreach>)
我想为 MyBatis 语句创建一种服务质量,一种全局性能监听器,它将分析所有已执行的 MyBatis 语句并记录那些返回太多的语句
我如何仅使用 Mybatis 将两个不同的游标映射到具有配置 xml 的存储过程
作者(光标1数据) ID 姓名 发布编号 1个 约翰 123 2个 简 345 书籍(光标 2 数据) 发布编号 图书编号 书名 123 B101 C# 123 B102 Python 345 J001 数据库 345 J002 JAVA 班级作者{ 圣...
两个java springboot项目(一个jar项目被另一个项目引用)如何在项目中使用一个mybatyis接口类
我有两个项目(一个项目以jar包的形式引用.jar项目可以被多个项目引用)。 mybatis接口代码写在jar工程(普通工程)中。