32-MyBatis-1

说明,Mysql的太长了,在了解了一些关于连表查询之类的以后,我学完了maven以及大部分的mybatis,现在先把mybatis写完

1.概念

首先,hibernate是一个完全映射的,旨在消除程序员手写sql语句的一个重量级框架,但是几乎所有项目都会涉及到sql语句优化,所以,sql是肯定需要手写的,如果还在用hibernate的话,完全满映射(有点类似高数)肯定是不行的,如果是写自定义的sql,那么要学习hql...所以这里就暂时先不学习hibernate,先学完mybatis,然后完整的熟练写ssm框架的spring后台以后,抽时间再来搞hibernate

2.config的xml配置文件

mybatis有2类xml文件,一个是只有唯一一个的config的xml配置文件,还有就是可以有多个的mapper的xml映射配置文件,如果是在spring,那么需要再spring的config配置文件里面配置sqlSessionFactoryBean,在这里,我们直接在mybatis的config配置文件里面写一个sqlSessionFactory对象,之后所有的对于数据库的crud,全部都是从这个sqlSessionFactory里面拿到单个session来操作.这里注意,最后要把session关闭.

3.mapper的xml配置文件

所有的mapper配置文件需要被配置在mybatis的config配置文件里面,这里注意,namespace很重要,之后涉及到一些api的运用,比如设置原生的二级缓存的时候有用到,还有就是调用某个mappe.xml的语句的时候,要写全namespace + id,否则不知道是哪个mapper下面对应的sql语句,注意,在这个mapper.xml里面,其主要功能,就是写各种crud的语句,这里用很多比如<select>的标签,来写curd,在标签里面,扩展crud的代码,还要注意一点,这个也算是个很基础但是是最重要的知识,这里的mappe.xml是跟DAO层的mapper.java的接口一一对应的,到时候在servcie层里,由那些处理具体事务的serivce类来直接调用dao的mapper接口来实现crud,这里mybatis直接使用了动态代理技术,所以,不需要mapper.java的实现类,mybatis用了动态代理为你做crud,你只需要各种@Autowired装配,然后调用就可以了

注意:这里讲到了两种方法,这里只需要使用第二种就可以了,第一种就不用纠结了

这里注意

①nameSpace直接写接口的全类名

②把mapper文件里面的select后面的id=""这里写成接口下面的方法名

4.mapper.xml配置文件里面的常见的属性

比如<select>标签里面有一个resultType属性,里面就是写返回值类型,比如写一个POJO,这个POJO就是你从数据库里面查到了信息,然后把这些查询的结果,封装成一个POJO或者这个POJO的一个list,来返回给调用了这个mapper.xml对应的mapper接口的service类.

这里最麻烦,或者说最需要注意的,就是在查的数据库字段,要跟POJO的成员变量名对应,如果不对应的话,完全可以通过给数据库字段起别名的方式

5.两种方法比较

这里2种方法,进行了比较,推荐第二种...但是第一种我已经忘了...

sqlsession是非线程安全的 ,所以自然不能写成全局变量

6.细说mybatis里面的各种标签

①.properties标签,跟之前的db.properties一样,引入外部配置文件

        -->属性:

                    ①resource-->引入类路径下的资源

                    ②url-->引入网络路径/磁盘路径下的资源

②.settings标签,这里有很多重要的设置,太多了,之后再讲,看文档是一件非常重要的事,之后肯定是必须要会查看官方文档的

        -->属性    

③.typeAliases标签:别名处理器,在mybatis的映射文件里面,经常要写bean的全类名,比较麻烦,这里可以用这个标签来写别名,别名不区分大小写

        -->属性

                    ①type-->在这里,type="全类名",这里会有一个默认别名就是类名小写

                    ②alias-->指定一个新别名

                    ③package-->这里还有批量起别名的...直接name="包全类名",那么在写映射的mapper的时候,也是要写小写的类的名称

注意,这里的用package的方式起别名,是有可能引起别名冲突的,这时候,可以用注解的方式

        -->@Alias("")用这个注解来另起别名(前提:包批量起别名)

这里,老师是建议,还是写全类名,而不要起别名,因为之后在mapper的xml文件里面查询对应的bean的时候,可以右键迅速锁定到那个bean

④.typeHandlers标签:类型处理器,这里就是把java里面的类型(不管是基本类型还是一些常见的引用类型)跟数据的类型做一个转换适配.

这里,这个typeHandlers标签,就是注册那些当前版本没有的处理器,让他们可以把最新的java类型转换成数据库可识别的

⑤.plugins,这里涉及到4个很重要的东西,是对这4大对象进行处理

        1)Executor

        2)ParameterHandler

        3)ResultSetHandler

        4)StatementHandler

这里涉及到mybatis的几个拦截器,我们后续再看

⑥.environments标签,配置多种环境

    一个environment标签,就是配置一种具体的环境信息,一个environment里面必须要包含:transactionManager + datasource-->事务+数据源

所以这里就是配置2种环境,product/dev,测试和成品-->通过environments的default来置顶选哪种环境

这里居然有事务管理器,我记得是在spring里面配置的啊...

这里transactionManager了解一下就行了,这里还可以自定义事务...但是算了吧,还是用spring搞事务,不然AOP哪来干嘛???

在这里,数据源里面有一个属性type="pooled",其实一共有3种:

                  ①POOLED-->使用连接池技术②UNPOOLED不使用连接池技术③JNDI(这里涉及到远古JavaEE的东西...暂时了解)

在这里可以自定义数据源,也就是说,到时候肯定是要用第三方的连接池的,所以在这里肯定要导入自定义的数据源,不过....到时候还是用spring来导入数据源.这里单讲mybatis的时候dataSource还是配置在mybatis里面,最后肯定是要配置在spring里面,因为spring的xml配置文件,是配置整个后台系统的核心配置文件,到时候sqlSessionFactoryBean和dataSource是肯定要配置在spring的xml配置文件里面的

⑦.dataBaseProvided标签:多数据库厂商

支持多厂商数据库,声明是哪个厂商的,然后mybatis会自动转

我感觉,这个用处不是很大阿...相同业务逻辑的数据库,应该搞一种类型的,不应该混,混数据库的话,不同的数据库那应该分开处理阿

这里,在mapper的配置文件里面,写一个别名:databaseId="mysql",这个时候就等于告诉了mybatis,我这下面写的sql语句,是mysql的,如果到时候要是oracle的...下面还要写oracle的...

如果有2个,一个带了数据库厂商标识,一个没带,没带的就会被舍弃

(这个学了意义不大)

⑧.mappers标签,之前讲过了,就是给mapper文件注册用的

        -->属性:class

            这里还有一个class属性:前面的两个,resource和url都是注册文件,这里还可以注册接口

            这里注册接口的意思就是,之前,不是通过代理模式,直接把接口跟那个写了sql了绑定了bean的联系在一起(这个就是第一种方法)了么,但是,那样做的话,要把这个mapper配置文件,注册在mybatis的config的xml配置文件里面

            现在,居然可以用class属性处,直接写之前那个interface,然后注意的是,mapper的xml文件,必须跟这个接口文件,放在一起,并且要同名

            等于说,现在以上讲了这2种mybatis的映射:

mapper.xml注册的,②直接用class="接口"然后接口文件和xml文件放在同一目录下,并且name一致,③注解,所有的sql都是通过注解,写在接口上的:这里的用法,也是需要用class="全类名",在interface下面的方法上面写@select("sql语句"),但是,明显写在mybatis的mapper映射表里面比较方便维护,这里还是尽量不要写成注解形式

这里给的最终建议,不重要的sql写注解,重要的写在xml里面

总结:这里当然选动态代理的那种映射最好拉

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值