映射器以及注解

mapper层的sql的实现的两种方式----映射器

mapper层的sql的实现的常用的方式有两种,@Select注解和基于xml的配置,这次就来学习这两者的区别和使用场景

1.定义

映射器由Java接口和xml文件(或注解共同构成的),主要是定义参数类型,描述sql语句,处理查询出来的结果和数据模型之间的映射关系等,主要的实现方式是基于注解和基于xml方式进行.

2.实现原理

映射器的原理是基于Java的动态代理实现的,

3.使用过程的主要参数

select 查询语句,可以自定义参数,返回结果集;
insert 插入语句,返回一个整数,表示插入的条数;
update 更新语句,返回一个整数,表示更新的条数;
delete 删除语句,返回一个整数,表示删除的条数;
sql 允许定义一部分SQL,然后再各个地方引用;
resultMap 用来描述从数据库结果集中来加载对象,还可以配置关联关系;
cache 给定命名空间的缓存配置;

4.动态代理

动态代理在Java有广泛的应用,比如Spring AOP,Hibernate数据查询,测试框架的后端mock,RPC远程调用,Java注解对象获取,日志,用户鉴权,全局性异常处理,性能监控,甚至事务处理等.
我们会在MyBatis上下文中使用这个接口的时候,而MyBatis会为这个接口生成代理类对象,代理对象会根据“接口全路径+方法名”去匹配,找到对应的XML文件(或注解)去完成它所需要的任务,比如先执行是相关的sql查询,返回我们需要的结果。
 

5.使用方式
5.1 基于xml文件

 <mapper namespace="com.zyzpp.inter.IUserOperation">
    <select id="selectUserByID" parameterType="int"
resultType="cn.zyzpp.model.User">
        select * from user where id=#{id}
    </select>
 </mapper>
第一步 新建Java接口
第二步 新建映射文件xml,写入相关sql的语句
PS:动态sql标签
if:判断语句,但条件分支判断;
choose (when、otherwise):多条件分支判断;
trim (where、set):处理一些SQL拼装问题;
foreach:循环语句,在in语句等列举条件常用;
bind:通过OGNL表达式去自定义一个上下文变量,可以方便使用;

5.2 基于注解

public interface IUserOperation {
    @Select(value="select * from user where id=#{id}")
    public User selectUserByID(int id);
 }

@Select 查询SQL注解
@Update 修改SQL注解
@Insert 插入数据SQL注解
@Delete 删除SQL注解
@Results 结果集字段与属性映射
@Result 单个字段与属性映射
@ResultMap 根据ID关联XML里面

直接在接口上面使用相关注解进行sql的开发,如果下给你要使用动态sql,可以在sql语句中加上<script>标签,就同样可以使用sql的注解了.
 

6.注解和xml文件的比较

 

6.1 注解的优缺点–一种分散式的元数据,与源代码紧绑定。

优点:
开发简单移动,上手快
不需要第三方的解析工具,利用java反射技术就可以完成任务
编辑期可以验证正确性,差错变得容易
缺点
在使用spring注解时,会发现注解分散到很多类中,不好管理和维护(借助工具可以解决这个问题)
每次的修改都需要重新打包(注解的开启/关闭必须修改源代码,因为注解是源代码绑定的,如果要修改,需要改源码)
 

6.2 xml文件的优缺点–一种集中式的元数据,与源代码无绑定。

优点:
XML更加清晰的表明了各个对象之间的关系,各个业务类之间的调用。同时spring的相关配置也能一目了然。
XML配置方式进一步降低了耦合,使得应用更加容易扩展
缺点:
配置文件读取和解析需要花费一定的时间,运行效率低于注解
配置文件过多的时候难以管理(可以通过新建多个xml配置文件解决)
无法对配置的正确性进行校验,增加了测试难度。
 

6.3 适用场景

如果考虑开发效率:注解更快,运行更快,开发也更快
如果考虑后期维护:基于xml文件的配置在项目上更便于维护
总的来说,注解是写易改难,xml是写难改易,在小型项目上,或者比较容易的sql,单表查询的,可以使用注解,在大型项目,并且多表查询复杂的就需要使用基于xml文件了
 
 
 
 
spring boot常用注解
spring boot中最大的特点是约定大于配置,注解就更多了

1.项目的注解配置
1.1 @SpringBootApplication

=@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan
SpringBootApplication的意思是=标注当前类是配置类+做微服时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat+扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理

1.2 @ServletComponentScan

Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置

1.3 资源导入注解

@ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
@PropertySource导入property的配置文件 指定文件路径,这个相当于使用spring的<importresource/>标签来完成配置项的引入。
@import注解是一个可以将普通类导入到spring容器中做管理

2 Controller层
2.1 @RestController=@Controller +@ResponseBody

标识本类为controller层,返回的数据都是封装的对象

2.2 @GetMapping和@PostMapping

@RequestMapping(value=“”,method = RequestMethod.GET)     =   
@GetMapping
@RequestMapping(value=“”,method = RequestMethod.POST)   =  
@PostMapping

2.3 @CrossOrigin

本注解主要解决的是跨域问题,跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。所谓同源是指,域名,协议,端口均相同,任何一个不同都会产生跨域问题
三个条件必须相同才不是跨域:①协议类型,如http和https就是不同的协议;②主机名;③端口号。
PS:
localhost和127.0.0.1虽然都指向本机,但也属于跨域。localhost是电脑的配置文件设定的一个域名,电脑明白访问的是本机,所以不需要请求跨域就可以自行处理,但是也属于跨域问题
@CrossOrigin(origins = "", maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用。

2.4 @Autowired

自动装配,自动从工厂里取出对象,可以用在变量,方法,域,注解类型上

2.5 @EnablCaching

这个注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。其作用相当于spring配置文件中的cache manager标签。

2.6 @PathVariable

路径变量注解,@RequestMapping中用{}来定义url部分的变量名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5UuvrJIj-1583115943883)(file://C:\Users\huangzb\AppData\Local\Temp\yxrtfimage\hts_1.PNG)]

同样可以支持变量名加正则表达式的方式,变量名:[正则表达式]。
 
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2O4USig3-1583115943898)(en-resource://database/556:0)]

3 service层
3.1 @Service

这个注解用来标记业务层的组件

3.2 @Resource

@Resource和@Autowired一样都可以用来装配bean,两个之前的区别就是匹配方式上有点不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配

4 持久层

可以理解成数据保存在数据库或者 硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了,也就是把数据存在持久化设备上,mybatis就是持久层。

4.1 @Repository

注解类作为DAO对象,管理操作数据库的对象。

4.2 @Component

是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。

4.3 @Transactional

声明事务,可以加在类和方法上,事务的开启只能在public 方法上。并且主要事务切面的回滚条件。正常我们配置rollbackfor exception时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值