springboot学习笔记

来源:互联网 发布:淘宝上买笔记本可靠吗 编辑:程序博客网 时间:2024/05/29 08:33
控制层注解
控制层主要有三个常用注解,

@RestController
用来标注控制层的控制类,实现控制类的注入操作;是下面的组合注解;
@Controller
@ResponseBody
实现一样的效果;
这两种方式均可以在控制层的类上标注也可以在类中的方法上进行标注,类标注的话,会将类中所有的方法路径添加一层路径。

@GetMapping(value="接口访问地址")
实现get方式访问接口,与如下的方式效果相同,
@RequestMapping(value="接口访问地址",method=RequestMethod.GET)

@PostMapping(value="接口访问地址")
实现Post方式访问接口,与如下的方式效果相同,
@RequestMapping(value="接口访问地址",method=RequestMethod.Post)

控制类的方法入参中需要写@RequsetParam(value="",required=true,defaultValue=""),其中value用来标注方法获取前台的参数字段,requried用来标注是否必须写此参数,如果为true,不写参数的话,会报错,如果为false,在不输入参数的情况下,入参的值会等于defaultValue的值。

url里面的参数有两种方式,一种是restful风格,一种是键值对的风格,
restful风格写法:GetMapping(value="/controller/{id}/{name}")
public String test(@PathVariable("id") String id,@PathVariable("name") String name){
}
路径可以在参数之后,也可以在参数之前。请求地址为:IP地址:8080/controller/id值/name值
键值对的风格写法:GetMapping(value="/controller")
public String test(@RequestParam(value = "id"), String id,@RequestParam(value = "name") String name){
}
请求地址为:IP地址:8080/controller?id=id值&name=name值

业务层注解

service层只需要再类前面进行@service标注即可,然后如果调用其他的数据操作类需要进行注入操作,包含@Autowired与@Resource两种注释,@Autowired是spring自己的注解,@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。以下是两种注释的区别:

1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 
2、@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: 
Java代码  
  1. @Autowired() @Qualifier("baseDao")     
  2. private BaseDao baseDao;    
 3、@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
Java代码  
  1. @Resource(name="baseDao")     
  2. private BaseDao baseDao;   
数据层注解

mybatis中标签不能对数据格式与空字符串判空,否则报异常,
异常原因
mybatis 3.3.0中对于时间参数进行比较有的一个bug. 如果拿传入的时间类型参数与空字符串”进行对比判断则会引发异常. 所以在上面的代码中去该该判断, 只保留非空判断就正常了
修改前
<if test="startTime!=null and startTime!='' "> and time >='${startTime}'</if>1
修改后
<if test="startTime!=null "> and time >='${startTime}'</if>



application.yml文件


配置文件可以随意定义自己的配置信息,用户可以按照自己的需要进行修改,如果是系统的默认属性,就会自动完成,配置示例如下:

这里面server是系统的配置,配置系统的访问端口,也可以配置访问地址,示例如下:
server:
port: 8088
context-path: /relation

如果用户配置自己的字段属性,那么就可以像配置girl那个一样,设置一个索引,然后设置自己的字段,然后创建一个实体类,需要注解@Component与@ConfigurationProperties(prefix="索引名"),然后就可以直接调用实体类进行获取配置文件的信息了。具体的类示例如下:

如果想要获取某个字段的属性值,可以直接在类中使用注解@Value("${参数}")即可,
获取cupsize的值示例如下:
@Value("${cpusize}")
private String cpusize; 参数的类型可以在这里面进行定义,可以选择字符也可以选择interger等类型。
调用实体配置信息时,则可以直接进行注解操作

获取实体信息即可

【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(mapUnderscoreToCamelCase),IDEA中xxDao报错could not autowire的解决方法
最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法。
1、在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换?
使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式。mybatis中也可以完全使用注解,避免使用xml方式配置mapper。(参考  springboot(六):如何优雅的使用mybatis  http://www.ityouknow.com/springboot/2016/11/06/springboot(%E5%85%AD)-%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8mybatis.html
设置自动驼峰命名转换,在xml中可以直接配置mapUnderscoreToCamelCase属性。
 
但是使用注解方式时,经过一番查找资料才找到比较好的设置方法。如下:
在spring boot的配置文件application.properties中,加入配置项:
1 mybatis.configuration.mapUnderscoreToCamelCase=true23 mybatis.configuration.map-underscore-to-camel-case=true
设为true表示开启驼峰转换。经过试验,两种配置方法都可以。但如果同时配置,前者mybatis.configuration.mapUnderscoreToCamelCase的优先级更高。
参考:
官方的配置说明 mybatis-spring-boot-autoconfigure – MyBatis Sring-BootStarter | Reference Documentation  http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration
SpringBoot之Mybatis - 王念博客  https://my.oschina.net/wangnian/blog/667764
另外查到有通过javaConfig方式,配置org.apache.ibatis.session.SqlSessionFactory的Bean,放入spring的对象池。mapUnderscoreToCamelCase是org.apache.ibatis.session.Configuration的一个属性,实例化Configuration对象并将其mapUnderscoreToCamelCase属性设为true,再使用这个Configuration对象作为SqlSessionFactory的配置即可使mapUnderscoreToCamelCase=true生效。
但是仅仅为了改变一个属性的值,就自己编码生成一个SqlSessionFactory未免太繁琐了些。使用在application.properties中配置的方法更方便。
 
2.mybatis管理的@Mapper的Dao,在使用@Autowire自动注入时,IDEA有红色报错“could not autowire”,但实际运行时正常,如何去除报错?
按照本人的理解,这个报错是由于Dao接口只添加了mybatis自定义的@Mapper注解,没有添加spring定义的@Component、@Repository等,所以IDEA不认为这是纳入Spring管理的Bean,导致在IDEA找不到autowire的Dao的来源。
查找解决方法,找到了这里的问答:
java - Idea inspects batis mapper bean wrong - Stack Overflow  https://stackoverflow.com/questions/25379348/idea-inspects-batis-mapper-bean-wrong
里面提到安装【MyBatis plugin】插件可以解决,但是我尝试安装这个插件并启用后,仍然有红色报错(插件已经激活,不是license导致的问题),所以猜测这个插件可能是只针对XXmapper.xml配置的方式有效,而对@Mapper注解Dao interface的方式无效(针对后一种情况是否有效,大家尝试了可以反馈下结果)。
所以只好采用一种折中的不算完美的办法,在Dao interface中添加@Mapper的同时,再添加@Repository(或者@Component也可以),如下方代码的第1行:

1 @Repository2 @Mapper3publicinterface UserDao {45 @Select("SELECT phone FROM user WHERE name = #{name}")//动态传入表名,可以使用 ...FROM ${tableName}... ,但需要解决sql注入风险6 String getPhoneByUserName(@Param("name") String name);7 }

这个方法使用中看来也没有什么副作用。
 
PS:第一次试安装【MyBatis plugin】插件之后,启动后在IDEA的Event窗口中有以下输出:
1 Mybatis Plugin: Mybatis Plugin is not activated yet. Click here to enter your license key to activate the plugin. You can also click here to purchase a license key to sponsor us making the plugin better. More features are on their way. Wish you happy coding with the plugin
这是一个收费的插件,需要购买license,官网显示价格是¥39.99。
我还尝试安装了【Free MyBatis plugin】和【iBATIS/MyBatis mini-plugin】插件,都没有去除红色报错。