标签: mybatis

如何在同一个应用程序中使用Hibernate和MyBatis

我想使用 Hibernate 和 MyBatis 与 Spring 集成来构建一个应用程序。在原型中,我必须运行它们,但不能一起运行。我的Spring应用上下文是:

\n\n
    <?xml version="1.0" encoding="UTF-8"?>\n<!--\n    Document   : applicationContext-spring.xml\n    Created on : 26 de diciembre de 2012, 15:49\n    Author     : Pedro Fdez\n    Description:\n        Fichero de configuraci\xc3\xb3n de Spring\n-->\n<beans xmlns="http://www.springframework.org/schema/beans"\n           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n           xmlns:aop="http://www.springframework.org/schema/aop"\n           xmlns:context="http://www.springframework.org/schema/context"\n           xmlns:tx="http://www.springframework.org/schema/tx"\n           xsi:schemaLocation="http://www.springframework.org/schema/beans \n            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd\n            http://www.springframework.org/schema/aop \n            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd\n            http://www.springframework.org/schema/context \n            http://www.springframework.org/schema/context/spring-context-3.0.xsd\n            http://www.springframework.org/schema/tx \n            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-autowire="byName">\n\n    <context:annotation-config />\n    <context:component-scan base-package="com.administracion.model.dao.implementations" />\n    <tx:annotation-driven transaction-manager="txManagerHibernate"/>\n    <aop:aspectj-autoproxy />   \n\n    <!-- ............................ -->\n    <!-- Configuraci\xc3\xb3n de datasource -->\n    <!-- ............................ -->\n    <bean id="dataSource"\n        class="org.apache.commons.dbcp.BasicDataSource"\n        destroy-method="close">\n        <property name="driverClassName" value="${jdbc.driverClassName}"/>\n        <property …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate mybatis jakarta-ee

2
推荐指数
1
解决办法
4755
查看次数

MyBatis注解,从bean更新参数

是否可以进行 MyBatis 更新,您可以提供一个包含要更新的值的 bean,而不是提供单独的参数?

澄清:

而不是这个:

@Update("update widget set name=#{name}, manufacturer=#{manufacturer} where id=#{id}")
public void updateWidget(
         @Param("id") int id, 
         @Param("name") String name, 
         @Param("manufacturer") String manufacturer);
Run Code Online (Sandbox Code Playgroud)

你能做这样的事情吗:

@Update("update widget set name=#{name}, manufacturer=#{manufacturer} where id=#{id}")
public void updateWidget(@Param("id") int id, Widget newValues);
Run Code Online (Sandbox Code Playgroud)

其中 newValues 已包含要更新的新值?

我已经尝试过了,但我得到了例外:

Exception in thread "main" org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'forename' not found. Available parameters are [id, 1, param1, param2]
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:368)
at com.sun.proxy.$Proxy8.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:254)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:49)
Run Code Online (Sandbox Code Playgroud)

java annotations mybatis

2
推荐指数
1
解决办法
4484
查看次数

MyBatis 抛出异常“流已关闭”

我有一个作为 cron 运行的 java 应用程序。它使用MyBatis。在我的 mybatis-config.xml 中,我有

<environments default="staging">
        <environment id="prod_read">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.10.2:3306/myDB"/>
                <property name="username" value="dbuser"/>
                <property name="password" value="dbpass"/>
            </dataSource>
        </environment>
        <environment id="prod_write">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.10.1:3306/myDB"/>
                <property name="username" value="dbuser"/>
                <property name="password" value="dbpass"/>
            </dataSource>
        </environment>
        <environment id="staging">.....
</environments>
Run Code Online (Sandbox Code Playgroud)

因此,我在生产中使用 2 个 DB - 一个用于读从属,一个用于写主。

代码中,SqlSessionFactory的初始化是这样的

InputStream rd = this.getClass().getClassLoader()
            .getResourceAsStream(mybatisConfigXml);

try {
    sessionFactory_read = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_read");
    sessionFactory_write = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_write"); …
Run Code Online (Sandbox Code Playgroud)

java mybatis

2
推荐指数
1
解决办法
1506
查看次数

如何通过mybatis基于注释将对象(超过10个属性)插入mysql而不列出所有属性

我想通过mybatis基于注解将一个具有10多个属性的Object插入到mysql中。但我必须列出所有属性,这太不方便了。我想知道是否有一些方法可以轻松插入对象,而无需通过 mybatis 列出所有属性。这是我的片段。多谢。

@Insert("insert into poi_shop(name,brand,tags,status,phone,mobile,business_time,address,city,lng,lat,business_type,attribute_json) values(#{name},#{brand},#{tags},#{status},#{phone},#{mobile},#{business_time},#{address},#{city},#{lng},#{lat},#{business_type},#{attribute_json})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
public Long insertPoiInfo(PoiBo poiBo);
Run Code Online (Sandbox Code Playgroud)

java mysql annotations mybatis spring-mybatis

2
推荐指数
1
解决办法
2094
查看次数

SQL Server 2005 到 2012 com.microsoft.sqlserver.jdbc.SQLServerException:不允许从数据类型 varbinary 到 datetime2 的隐式转换

我们正在从 SQL Server 2005 迁移到 2012。其中一项功能因此错误而失败

com.microsoft.sqlserver.jdbc.SQLServerException:不允许从数据类型 varbinary 到 datetime2 的隐式转换。使用 CONVERT 函数运行此查询。

我们用来SQLJDBC driver 3.0与 SQL Server 2012 进行通信。当我们尝试将 NULL 值插入列DATETIME(可为空)时,我发现会发生此问题。但在 2005 年也同样有效。对于此问题的任何帮助,我们将不胜感激。

这是一个INSERT使用 MyBatis ORM 从 Java 到 SQL Server 2012 失败的简单语句:

Insert into temp_test (date1, name, date2) values ('2010-10-10 00:00:00.0','test',null) 
Run Code Online (Sandbox Code Playgroud)

当我们尝试从我们的应用程序(使用 SQL JDBC 驱动程序)时,此插入失败...但是相同的代码库在 SQL 2005 中可以正常工作,没有任何问题。

sql-server-2005 sqljdbc mybatis sql-server-2012

2
推荐指数
1
解决办法
4102
查看次数

如何在 Spring 中配置 Log4j 进行 MyBatis SQL 查询?

我有一个带有 mybatis 3.3.0 和 mybatis-spring 1.2.3 的 Spring MVC 项目,我想在我的项目中配置 log4j 。我不用于mybatis-config.xml设置 mybatis sql 会话工厂。所以我不能使用以下设置,

<configuration>
  <settings>
    ...
    <setting name="logImpl" value="LOG4J"/>
    ...
  </settings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

所以,我的配置中有以下配置

spring-context.xml ,

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="typeAliasesPackage" value="com.sample.model"/>
  <property name="mapperLocations" value="classpath*:com/sample/mappers/*.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.sample.mappers" />
</bean>
Run Code Online (Sandbox Code Playgroud)

并配置了这个log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" …
Run Code Online (Sandbox Code Playgroud)

logging log4j spring-mvc mybatis spring-mybatis

2
推荐指数
1
解决办法
9241
查看次数

MyBatis自定义一个typeHandler没有执行

在3.2.8官方文档\xef\xbc\x8cin\'typeHandlers\'部分\xef\xbc\x8ci有一个测试,\xef\xbc\x8can然后发现它不能覆盖默认的org.apache.ibatis。类型.StringTypeHandler。我调试它,它停在 StringTypeHandler 中,而不是 ExampleTypeHandler 中。\n这是 mybatis-config.xml 文件:

\n\n
<?xml version="1.0" encoding="UTF-8" ?>\n<!DOCTYPE configuration\n        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"\n        "http://mybatis.org/dtd/mybatis-3-config.dtd">\n<configuration>\n    <properties resource="db.properties"/>\n\n    <settings>\n        <setting name="mapUnderscoreToCamelCase" value="true"/>\n    </settings>\n\n    <typeAliases>\n        <package name="com.solverpeng.mybatis.beans"/>\n    </typeAliases>\n\n    <typeHandlers>\n        <typeHandler handler="com.solverpeng.mybatis.typeHandlers.ExampleTypeHandler"/>\n    </typeHandlers>\n\n    <environments default="development">\n        <environment id="development">\n            <transactionManager type="JDBC"/>\n            <dataSource type="POOLED">\n                <property name="driver" value="${jdbc.driver}"/>\n                <property name="url" value="${jdbc.url}"/>\n                <property name="username" value="${jdbc.username}"/>\n                <property name="password" value="${jdbc.password}"/>\n            </dataSource>\n        </environment>\n    </environments>\n    <mappers>\n        <mapper resource="com/solverpeng/mybatis/beans/mapper/CustomerMapper.xml"/>\n    </mappers>\n</configuration>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是ExampleTypeHandler.java

\n\n
@MappedJdbcTypes(JdbcType.VARCHAR)\npublic class ExampleTypeHandler extends BaseTypeHandler<String> {\n\n    @Override\n    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) …
Run Code Online (Sandbox Code Playgroud)

java mybatis

2
推荐指数
1
解决办法
6820
查看次数

防止SQL注入——mybatis和spring

是否存在防止 SQL 注入的好方法mybatis
我将它与spring-boot. 实际上,我在查询中使用用户提供的字符串参数。
有任何想法吗?

java spring mybatis

2
推荐指数
1
解决办法
3322
查看次数

如何使用 mybatis 获取更新行?

如果我使用mybatis,我可以很容易地获得更新的行数,就像

update table set desc = 'xxx' where name = ?
Run Code Online (Sandbox Code Playgroud)

但是,如果我想获取更新的行数,而不是计数,mybatis 如何实现呢?

mybatis

2
推荐指数
1
解决办法
1777
查看次数

Ibatis 绑定异常错误提示

我正在尝试实现以下 ibatis 插入注释,但不断收到以下错误消息:

org.apache.ibatis.binding.BindingException:未找到参数“person”。可用参数有 [arg1, arg0, param1, param2]

到目前为止,这是我的代码。我如何解决它?

@(Insert("INSERT INTO profile (person, school) VALUES (#{person}, #{school})";)
void insertOne(TestTextMessage person, String school)
Run Code Online (Sandbox Code Playgroud)

一些背景:

试过这个...@(Insert("INSERT INTO profile (person, school) VALUES (#{arg0}, #{arg1})";)但现在得到一个 java.lang.Assertion 错误。TestTextMessage 是一个包含以下值的类:

@Data
@NoArgs
@EqualsAndHashCode
public class TestTextMessage {
   private long id;
   private String name;
   private int age;
}
Run Code Online (Sandbox Code Playgroud)

目前我这样称呼它:

messageMapper.insertOne(new TestTextMessage(person1), SchoolType.EDENGLEN);
Run Code Online (Sandbox Code Playgroud)

如果我将学校类型移到班级,那么它应该可以工作,但是我如何为学校类型赋值?

java ibatis mybatis

2
推荐指数
1
解决办法
2050
查看次数