Tag: mybatis

MyBatis 3.0.5和映射器加载问题

我正在使用MyBatis 3.0.5,我遇到了将映射器加载为资源的问题。 我使用的是Windows 7 64,我使用Eclipse Indigo 64bit和jdk7 64. MyBatis在Grizzly Web容器(在其中实现了具有jersey框架的rest服务)独立实例中初始化。 我有相同的映射器只用于测试,第一个是加载,第二个不起作用。 错误: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in src/main/java/com/izs/mybatis/FormMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource src/main/java/com/izs/mybatis/FormMapper.xml at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:32) at com.izs.Main.initMyBatis(Main.java:114) at com.izs.Main.main(Main.java:80) Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. […]

MyBatis Spring MVC错误:绑定语句无效(未找到)

当我尝试使用MyBatis执行简单查询时,这是堆栈跟踪: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.my.package.persistence.BrandMapper.getBrand org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:189) org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:43) org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58) org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51) com.sun.proxy.$Proxy25.getBrand(Unknown Source) com.my.package.service.BrandService.getBrand(BrandService.java:18) com.my.package.service.BrandService$$FastClassBySpringCGLIB$$1140c60a.invoke() org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649) com.my.package.service.BrandService$$EnhancerBySpringCGLIB$$ea6f89cd.getBrand() com.my.package.controller.HomeController.getBrands(HomeController.java:28) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 我正在使用Javaconfig语法而不是XML配置。 这是我的PersistenceConfig: @Configuration @EnableTransactionManagement @MapperScan(“com.my.package.persistence”) public class PersistenceConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource […]

如何模拟MyBatis映射器接口?

我正在为我的Jersey rest API编写unit testing,该API在后台使用MyBatis。 这是我的课程结构: rest服务: @Path(“/api”) public class HelloRestService { @Inject HelloBean helloBean; @GET @Path(“/echo/{name}”) public Response echo(@PathParam(“name”) String name) { return Response.status(200).entity(helloBean.sayHello(name)).build(); } } 无状态EJB: @Stateless public class HelloStatelessBean implements HelloBean { // Injected MyBatis mapper (dao) @Inject private EmployeeMapper employeeMapper; @Override public Employee getEmployeeById(final Long id) { return employeeMapper.getEmployeeById(id); } @Override public […]

MyBatis 3 – 从mapper获取SQL字符串

我想仅使用MyBatis3来生成SQL字符串(使用xml映射),但我获得的SQL无效。 例如,我获取了sql字符串: SELECT * FROM USER WHERE NAME = john 在这个sql中不存在‘ char sorrounding string value john 在mybatis.xml中 : … … sql1.xml SELECT * FROM USERS WHERE name LIKE ${name} AND num = ${number} 在MyBatisSql.java中 : SqlSessionFactory sessionFactory = ConnectionFactory.getSqlSessionFactory(); Configuration configuration = sessionFactory.getConfiguration(); Map pars = new HashMap(); pars.put(“name”, “john”); pars.put(“number”, 1345); MappedStatement ms = […]

Mybatis log4j如何配置log4j来打印sql日志到文件

我使用Spring 4和MyBatis 3,想要确认log4j打印sql日志,如连接,选择,插入,更新,删除,语句,preparedStatement,resultSet到日志文件。 我的log4j.properties如下: ### set log levels ### log4j.rootLogger=debug, stdout, log, index, D, I, W, E #log4j.rootLogger = debug,error, log, index, D, I, W, E log4j.FilePath=${catalina.home}/app_log ### print log to console ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d %p [%c] – %n ### print log to console ### […]

如何在mybatis-spring中使用@Transactional注释?

我尝试在spring使用@Transactional注释,使用mybatis-spring依赖使用mybatis-spring 。 这是服务层。 @Service public class OracleService { @Autowired private TestMapper mapper; @Autowired private PlatformTransactionManager transactionManager; @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, value = “transactionManager”) void insert1() { TestModel testModel = new TestModel(1, “title1”, “content1”); mapper.insert(testModel); throw new RuntimeException(); } } 如您所见,在insert1()抛出了RuntimeException ,因此插入操作应该失败。 但事实上,它没有。 记录已成功插入。 为什么? 这是我的主要方法。 public class Launcher { public static void main(String[] […]

MyBatis与Guava multimap

我想使用Guava multimap作为带MyBatis的resultMap ,返回一个包含多个一对多条目的集合的结果集,但我无法弄清楚相同的语法。 以下是我的表格示例: +—-+———+———-+————-+ | ID | PART_ID | NAME | PART_FAMILY | +—-+———+———-+————-+ | 1 | 1 | bush | 300 | | 2 | 1 | a-bush | 300 | | 3 | 1 | 300-bush | 300 | | 4 | 2 | nut | 301 | +—-+———+———-+————-+ 我想要一个结果集,以便我有一个以PART_ID为键的Guava多图,以及NAME和PART_FAMILY作为结果。 例如: Index […]

MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner

我正在使用MyBatis-guice 3.3使用java Properties对象和ScriptRunner连接到第一个数据库来运行几个脚本: Environment environment = injector.getInstance(SqlSessionFactory.class).getConfiguration().getEnvironment(); DataSource source = environment.getDataSource(); ScriptRunner runner = new ScriptRunner(source.getConnection()); runner.setLogWriter(null); runner.setStopOnError(true); runner.runScript(Resources.getResourceAsReader(properties.getProperty(“script.dbA.create.schema”))); 现在我想使用相同的方法添加第二个数据源(dbB)。 按照MyBatis-guice参考指南,我必须使用2个PrivateModule。 这部分工作正常。 但是,我应该如何调用我的ScriptRunner为dbA运行一些脚本,为dbB运行一些其他脚本?

使用MyBatis调用Oracle存储过程

我正在从SQL Server 2008将数据库移动到Oracle,但无法使MyBatis工作。 给出以下示例: UserMapper.xml (示例) {CALL GetUsers()} UserDAO.java public interface UserDAO { public List getUsers(); } SQL Server过程 CREATE PROCEDURE [dbo].[GetUsers] AS BEGIN SET NOCOUNT ON; SELECT userId, firstName, lastName FROM Users END …适用于SQL Server 2008.有人可以向我解释如何从UserMapper.xml调用Oracle过程(与上面的SQL Server过程具有相同的名称和列)并使用Oracle游标填充我的User类? 这是我试过的: {CALL GetUsers(#{resultSet,mode=OUT,jdbcType=CURSOR,resultMap=UserResult})} 我收到此错误: Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘resultSet’ of ‘class java.lang.Class’ with value […]

带有OUT参数的Java MyBatis存储过程调用

第一个问题:我试图返回一个OUT参数而不是带注释的结果集。 首先,它甚至可能吗? 如果是的话,怎么会这样呢? MyBatis:3.0.6 数据库:SQL Server 2008 以下是UserDAO中我的方法调用语法的示例: @Select(value= “{ CALL saveUser( ” + “#{userId, mode=IN, jdbcType=INTEGER},” + “#{firstname, mode=IN, jdbcType=VARCHAR},” + “#{lastname, mode=IN, jdbcType=VARCHAR},” + “#{message, mode=OUT, jdbcType=VARCHAR}” + “)}”) @Options(statementType=StatementType.CALLABLE) public String saveUser( @Param(“userId”) int userId, @Param(“firstname”) String firstname, @Param(“lastname”) String lastname); 我从所有“保存”程序返回一条消息,因此我可以向用户返回响应:“用户保存成功”,“保存用户时出错”,“您无权保存此用户”等。我知道返回结果集将解决问题,只是我不想改变我的所有程序! 第二个问题:是否可以返回从多个OUT参数填充的“SaveProcedureResponse”? 例如: @Select(value= “{ CALL saveUser( ” + “#{userId, mode=IN, […]