1、update/insert 方法使用技巧
update执行完毕后要判断是否执行成功,即update的条数是否符合预期,如果不符合则主动抛出异常,throws Exception
方法体
throws Exception
具体update或者insert
int num= demoDao.updateDemoVo(demoVo);
if(num!=1){
throw new Exception();
}
2、update修改金额等计数类属性
修改计数类属性要在sql语句中进行计算,而不是使用set计算后结果,即set a=a+#{b}
3、update状态要注意由状态一变为状态二
状态一应加到where条件中
4、对外提供接口,不能直接使用service层
对外提供接口不能直接使用service层,而是应该再包装一层,一个是低耦合,一个是service层出现异常依旧可以给接口调用方返回结果,不至于中断
5、对于增减操作以及增的限制
比如用户购买商品,而且用户被限购,应该是先减少商品数,然后增加用户购买数,在用户增加购买商品数的时候,需要在sql中增加购买总数没有超过限制的判断-代码判断了虽然,sql语句也要增加判断。
6、对于定时任务,要注意限制批量操作的条数
对于定时任务,要注意限制批量操作的条数
7、使用switch必须在满足条件后跟随break
switch的运行机制是,case 条件满足后运行本条,如果没有break则运行之后所有的,而不再判断
8、List<Map<String.Object>> 遍历并且赋值并不能改变该list的参数状态
@Test
public void test1(){
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
List<Map<String,Object>> list2=new ArrayList<Map<String,Object>>();
for(int i=0;i<3;i++){
Map<String,Object> map=new HashMap<String, Object>();
map.put("name", "name"+i);
System.out.println(map.get("name"));
list2.add(map);
}
for(Map<String,Object> map:list){
System.out.println("2"+map.get("name"));
}
for(Map<String,Object> map:list2){
System.out.println("3"+map.get("name"));
}
System.out.println("运行结束");
}
运行结果
name0
name1
name2
3name0
3name1
3name2
运行结束
9、mybatis搜索数据库从Map中取值的技巧
分为两种情况,参数类型为 String,Int,boolean和其他
map为空
这些是针对搜索数据的情况,如果搜索条件不满足,则返回的结果就是null
如果,是其他类型,在Map<Stirng,Object>的情况下,直接获取map.get("key");也是Ok的,但是千万注意,如果在map前加类型转化,要注意是否可以强转。
int可以使用.toString,其他可以根据数据库类型加(String),(Integer)等。
@Test
public void HashMapTest(){
Map<String,Object> map=new HashMap<String,Object>();
map.put("flag", true);
System.out.println(map.get("flag")+map.toString());
map.put("float", 1.02f);
System.out.println((float)map.get("float"));
map.put("string","1.01");
System.out.println((String)map.get("string"));
map.put("null",null);
System.out.println(map.get("null"));
/*Map<String,Object> map2=null;
System.out.println(map2.get("flag"));*///报错
Integer integer=1;
map.put("integer",integer);
System.out.println(map.get("integer").toString()+" +1");
/*System.out.println((String)map.get("integer")+" +2");*///报错
}
结果:
true{flag=true}
1.02
1.01
null
1 +1
10、接口访问使用@ResponseBody的访问效率不如全局配置
接口访问返回json串的实现有两种主要的方式,第一是使用@ResponseBody,将接口返回的实体转化为json串
第二种是增加配置
<!-- 实体 json 自动映射转化 -->
<bean id="jsonConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
类上增加标注
@RestController
public class RestfulController {
方法增加Mapping
@GetMapping(value="restfulGetNoResponseBody")
实验证明,使用第二种方式效率会很高。
第一种方法也需要再类和方法上增加相应注解@Controller或者@RestController,@GetMapping等,但是不会影响访问效率。