三层架构
1.controller->service->repository 相当于 controller->service->dao
2.repository为接口层,没有具体实现类
3.repository里面只能用find 和 query开头
4.repository需要继承JpaRepository<类,类主键(ID)类型>来获得更多方法
5.在controller层可以直接调用repository层继承的方法。
6.在controller层方法返回值为ResultBean(结果集),需要进行
ResultBean resultBean = new ResultBean();
resultBean.setResultCode(ResultBean.SUCCESS);
resultBean.setRows(Service.方法(参数));
注解
controller层
1.@RestController 相当于“@Controller,@Controller 和@ResponseBody”的作用,在类开头上注明,作用是返回类中所有@RequestMapping(“”) 方法 的结果。
2.@Autowired 和@Resource 都是注入bean,@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
3.@RequestMapping(params=”tohello”) ,此处”tohello”是参数,在浏览器中访问时要在”?”后面添加参数名。如:http://localhost:8080/project/hello?tohello
4.@GetMapping(“/{id}”) 的作用是获得Get请求,相当于@RequestMapping(method = RequestMethod.GET),可用于查询记录。若id有值查不到则报错
5.@PostMapping(“/add”) 的作用是获得POST请求,相当@RequestMapping(method = RequestMethod.POST)., 可用于往数据表中添加记录。若id有值查不到则不报错
service层
1.@service要说明@Service注解的使用,就得说一下我们经常在spring配置文件applicationContext.xml中看到如下图中的配置:
<context:component-scan base-package=“com.study.persistent” />
在applicationContext.xml配置文件中加上这一行以后,将自动扫描指定路径下的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml配置文件中定义bean了,类似的还包括@Component、@Repository、@Controller。
2.@Transactional事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。本文将着重介绍基于 @Transactional 注解的事务管理。
3.@Value
在项目中发现@value的用法有很多种
@value注入的作用:
通过@value将外部的值动态注入到Bean中。
1、可以注入普通字符串
2、注入操作系统属性
3、注入表达式结果
4、注入其他Bean属性
5、注入文件资源
6、注入URL资源
@value(“nomalChacter”)
private String char;//注入普通字符
@value("#{sytemProperties[‘os.name’]}")
private String systemPropertiesName;//注入操作系统
@value("#{T(java.lang.Math).random()*100.0}")
private double randomNumber;//注入表达式结果
@Value("#{bean.name}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性name
@Value(“classpath:com/1.txt”)
private Resource resourceFile; // 注入文件资源
@Value(“http://www.gogle.com”)
private Resource testUrl; // 注入URL资源
通过@Value("
a
p
p
.
n
a
m
e
"
)
语
法
将
属
性
文
件
的
值
注
入
b
e
a
n
属
性
值
。
@
V
a
l
u
e
(
"
{app.name}")语法将属性文件的值注入bean属性值。 @Value("
app.name")语法将属性文件的值注入bean属性值。@Value("{person.name}")
private String name;
@Value("${person.name.firstName}")
private String firstName;//注入name的firstName
上面的用法中有#{}和¥{},二者有什么区别呢
#{…}主要用于执行SpEl表达式,并将内容赋值给属性
KaTeX parse error: Expected 'EOF', got '#' at position 21: …要用于加载外部属性文件中的值 #̲{..}和{…}可以混合使用, 但是必须#{}外面,${}在里面
4.@Override @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记
url过滤器
在config目录下的WebSecurityConfig里面进行配置