Fork me on GitHub

Mybatis 常见问题

本系列文章在 https://github.com/freestylefly/javaStudy 持(jing)续(chang)更(duan)新(geng)中,欢迎有兴趣的童鞋们关注。

一、什么是Mybatis

1、Mybatis是一个类似于Hibernate的ORM持久层开源框架,

2、Mybatis通过XML或者注解配置和映射,实现对数据库的访问

3、Mybatis的核心设计理念是基于原生sql进行的,正是由于这个设计理念使得Mybatis相对于Hibernate框架执行效率更高,但是代码的可移植性差,由于Mybatis是一个轻量级的框架,框架本身提供的功能较少,但是使用的灵活性更高。

二、结果集映射

1、结果集映射是在Mybatis的xml映射文件中进行配置的一个映射,表示查询语句结果集中每一条记录如何转换成对应的java对象,将我们的java对象和数据表中的字段一一对应。

2、他是通过resultMap这个标签进行配置,里面属性有type和id,id是这个结果集映射的唯一一个标识,用于查询标签的一个引用,type属性用于设置查询结果需要转换的java对象,就是相对应的实体类,可以写全类名,当我们在Mybatis配置文件中配置默认扫描包或者配置类的别名的时候可以使用类名或者别名

3、一共有2个字标签,分别是id和result,id于配置数据表主键对应关系,result用于设置其他字段和类属性的一个对应,这两个标签都有2个属性,propery和column,分别设置java对象的属性和数据表字段名

三、动态SQL

1、Mybatis的动态SQL是Mybatis灵活性的一种体现,可以通过外部传入的参数,使用一系列标签,灵活的拼接sql语句

2、里面主要有这几个标签,if、where、set、foreach、choose、when、otherwise,

3、if标签用来进行条件判断,有一个test属性,添加判断条件,多个if标签时,记得用。where标签取代sql中的where命令,若标签中无任意结果,则where不会出现在sql中,记得在前面加一个and用来连接;set标签用来取代sql中update set命令;foreach标签进行循环遍历,有collection、item、open、close、separator属性,分别指传入的参数类型,临时变量、语句开始和结束需要拼接的内容,分隔符;choose、when、otherwise相当于java中的多重if结构

四、#和$区别

1、两者都是用来进行参数传递

2、#的方式更常用,内部封装了prepareStatement接口,进行预编译处理,相当于JDBC中为?占位符赋值,这种相对安全,$的方式是字符串拼接,用$号取到的数据会那需要使用正确的格式,拼接到sql中

3、当比较而言#更加的安全,能有效的方式sql注入

五、多表间关联查询

1、开发中经常查询数据会用到多张表进行查询,比如查询一个用户可以有多个订单,但是用户表和商品表是两张不同的表,如果要查询用户以及其对应的商品信息就需要用到多表联查

2、主要有两种方式,第一种编写带有连接查询的sql,将需要的字段从多张表中取出,放入结果集,首先在实体类中添加属性对应数据表中字段,其次,在映射文件的结果集映射中添加result标签,为新增的属性设置对应字段,最后修改查询sql,添加连接查询,

3、这种方式很少用,方式二是,使用标签通过指定的格式进行配置,在查询时自动获取相关数据表的数据,主要用到两个标签,association处理多对一的关系,一般设置在多的一方的配置文件中,用于子表查询主表,collection标签处理一对多,设置在一的一方的配置文件中,用于主表查询子表,

4、如何使用呢?首先在实体类中添加属性,一的一方添加多的一方的集合对象,泛型是多的一方的对象,多的一方添加一的一方的对象,其次在配置文件的结果集中添加标签,多的一方用association,一的一方用collection,对标签进行配置,分别有property、column、select属性,property自动查询的结果保存到那个实体类,column设置携带到查询语句中的字段,select设置自动执行的sql语句的id,最后需要添加对应数据表的结果集映射进来。


本文章已同步至我的GitHub仓库:Javastudy,期待您的加入:blush:

本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush:

来我的微信公众号玩耍呗:blush:

扫码无套路关注我的CSDN博客:blush:

苍 何 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!