所遇问题:vue+java(springmvc+mybatis)+oracle系统开发之后端springmvc+oracle+mybatis

开启新的路程,持续更新中…
1、创建序列

create sequence KPI_MENUID_seq start with 1 increment by 1 nomaxvalue nominvalue nocycle nocache;

2、oracle语句insert规则描述:
2.1小写变量名需要双引,值需要单引。

INSERT INTO "KPI_Sys_Module" ("moduleId","moduleCode","moduleDesc","moduleSort") VALUES (KPI_MODULEID_SEQ.nextVal,'sysset','系统设置',(SELECT COUNT(*)+1 FROM "KPI_Sys_Module"))

3、数据排序,两者数据对换

UPDATE "KPI_Sys_Module" T1 SET T1."moduleSort"=DECODE("moduleSort",#{sort}+#{direction},#{sort},#{sort},#{sort}+#{direction}, "moduleSort") WHERE T1."moduleSort" IN(#{sort}+#{direction},#{sort})

4、mybatis插入、更新数据后台为number,如果java是int,值为空时会保存成0.如果java是Integer会保存成null;(需要将0转成null则用Integer,如外键、主键。如果需要0则用int或者用if,如数量等。)
5、JSONObject.fromObject,Integer类型null转为0解决方式:

jsonConfig.registerJsonValueProcessor(Integer.class,new IntegerJson());

public class IntegerJson implements JsonValueProcessor {

	@Override
	public Object processArrayValue(Object value, JsonConfig config) {
		String[] obj = {};
		if (value instanceof Integer[]) {
			Integer[] integer = (Integer[]) value;
			obj = new String[integer.length];
			for (int i = 0; i < integer.length; i++) {
				if(integer[i]==null) {
					obj[i] ="";
				}
				
			}
		}
		return obj;
	}

	@Override
	public Object processObjectValue(String key, Object value, JsonConfig config) {
		// TODO Auto-generated method stub
		System.out.println(value+":"+(value==null));
		if (value==null){
			return "";
		}
		return value;
	}

}

6、使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,会报异常。
使用COALESCE(MAX(“menuSort”),0)

SELECT COALESCE(MAX("menuSort"),0) AS "NEXTSORT" FROM "KPI_Sys_Menu" WHERE "menuModule"=#{mId} 

7、springmvc+mybatis使用junit测试
官网使用如下。这种方法将mybatis配置放到单独xml,但是我们实际使用中是将mybatis配置和springmvc配置放在一起的。所以使用如下方法会报错。出错的具体原理不甚明白,但是应该是因为不匹配导致,后期再继续研究。
如果项目中mybaits的配置文件和Spring配置文件整合过了,则下面的代码运行估计会出错,因为一般spring和mybatis整合过之后,mybatis的配置文件基本没有存在的必要了,之前在mybatis中配置的数据源和事务这两个方面,一般的做法都会spring的配置文件,则下面的代码加载mybatis-config.xml的时候,得不到必要的信息,创建的过程中会有问题.所以在这里先给一份mybatis-config.xml单独的配置文件.转自:https://blog.csdn.net/u013412772/article/details/73648537

junit代码:

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

mybatis配置




  
    
      
      
        
        
        
        
      
    
  
  
    
  

springmvc调试:
junit代码:

public class MyTest {
	SyssetServiceImpl SyssetService=null;
	@Before
	public void getBefore(){
		String xmlPath = "config/applicationContext.xml";
		ApplicationContext ac = new FileSystemXmlApplicationContext(xmlPath);
		SyssetService = ac.getBean(SyssetServiceImpl.class);
	}
	@Test
	public void findRouterList(){
		System.out.println(11);
	}
}

配置文件参照springmvc+mybatis配置方式。
8、resultMap包含的元素:




  
  
  
    
    
  
  
  
    
      
  

如果collection标签是使用嵌套查询,格式如下:

  
 

注意:标签中的column:要传递给select查询语句的参数,如果传递多个参数,格式为column= ” {参数名1=表字段1,参数名2=表字段2} ;
9、mybatis+oracle批量insert注意事项:
1、不需要VALUES
2、separator=“UNION ALL”


		INSERT INTO a(code,name)
		
		SELECT 
			#{item.code,jdbcType=INTEGER},#{item.name,jdbcType=INTEGER}
		FROM dual
		
	

10.choose 报错

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "s"
### Cause: java.lang.NumberFormatException: For input string: "s

修改前


	            
	            
	            
	            
	            
	            
	        

修改后

	 
            
            
            
            
            
            
        

报错原因说明:个人认为mybatis里面if test中使用时应该等同于java比较两个不同变量是否相同时的逻辑,如果传入的参数为基本类型,则不会出问题。但是如果传入参数是引用类型时,则会存在因类型不一致而在比较时报错。

你可能感兴趣的:(mybatis,oracle,springmvc)