开启新的路程,持续更新中…
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比较两个不同变量是否相同时的逻辑,如果传入的参数为基本类型,则不会出问题。但是如果传入参数是引用类型时,则会存在因类型不一致而在比较时报错。