01-MyBatis的配置文件详解 创建的接口和xml文件的名字最好写一样的要不然会出问题,然后和接口名相同的xml文件在resources下创建个和接口相同文件夹把xml文件放进去,而且resources下的创建的文件夹需要一级一级的创键,比如:cn创建完,创建tulingxue,然后再创建mapper文件夹才行 在接口里声明方法时返回类型需要和红色圈1一样,,方法名需要和红色圈2一样,参数需要和红色圈3一样 在创建 根据全局配置文件的xml构建成SqlSessionFactory,里的将xml构建成输入流里的inputStream=Resource里时需要导入包必须是下图蓝色框鼠标指的 第一句代码引用全局配置文件的.xml文件, 第二句因为要创建SqlSessionFactory所以需要用InputStream输入流,因为SqlSessionFactory需要根据输入流才能构建 第三句的作用构建SqlSessionFactory :将全局配置文件和所有的mapper全部加载到Configuration openSession()用法如下注解所示 EmpMapper是我们创建的接口,为什么接口可以调用方法呢,都是对象才能调用方法,因为Mybatis在底层把接口用jdk动态代理给实现了和接口名相同的代理类就可以实现调用方法了 用jdbc查询数据库如下面语句 创建日志框架,门面用SLF4J,实现用Logback,使用日志是为了记录后台的错误信息 首先导入依赖包如下图两个 然后在测试类中设置全局变量logger,导入的包选红色框的 然后LoggerFactory也要导入上面同款的包 日志级别说明系统默认是debug级别意思是比debug级别大的错误信息都能输入出来,如下图测试类可以解释,只有当配置logback.xml配置文件的时候才会优先遵循配置文件 logback.xml日志配置文件如下图 mybatis.xml配置文件介绍 mybatis_config.xml文件里的environments default作用是可以通过改变值来自由切换数据库,值就是每个environment id里面的值,例如外部属性资源文件用的mybatis数据库,environment id=development,直接在mybatis_config.xml文件写的用的mybatis_test数据库,id=test,environments default可以通过改写值,来切换两个数据库的使用 mybatis_config.xml文件里的mapper标签详细解释 在引用外部属性资源文件配置mybatis时,对于mysql8.0的来说url在外部配置文件的写法和直接在mybatis.xml里面的写法有些区别,如下图花圈的部分要注意,还有直接用jdbc写的url和用外部属性资源文件的写法是一样的如下方第四章图 在Navicat创建数据库名为mybatis_test 怎么在mybatis.xml里面用外部属性资源文件 首先先创建资源文件(注意如果你的外部属性资源文件在resources下用的时候直接写文件名.properties就行了,如果它在resources的包下就得在前面先引用包名在写文件名.properties因为properties resource是在classpath下引用的也就是下下图的classes路径下) 你可以在mybatis.xml里面再声明一些内部属性和在db..properties里面引用的属性用法是一样的 settings标签的介绍和使用(注意settings标签必须要在properties标签下,挨着properties标签,如果没有properties标签,就默认放到第一位) userColumnLabel属性是为sql语句中的属性设置别名默认是可以设置的,只有当写的sql语句中的属性和sql语句中的属性不一样的使用才设置别名,怎么设置如下下图 settings标签里的userColumLabel的解释如下图 settings标签里的defaultExecutorType,默认是SIMPLE就是每次执行都会重新执行sql语句,REUSE就是就检查一次sql语句,在执行就不会了 settings标签里的defaultStatementTimeout,设置超时时间,它决定数据库驱动等待数据库响应的秒数 settings标签里的mapUnderscoreToCamelCase(作用如下图) settings标签里的jdbcTypeForNull作用是当往数据库插入数据某个数据值为null时映射到数据库的类型 settings标签里的logImpl这个属性的作用是当没有用SLF4J门面的时候并且有多个日志框架的时候我们就加入这个标签,当我们用了SL4J门面的时候就可以不用配置这个标签了 typeAliases标签,会将类的名字作为别名(忽略大小写)意思是package name包下的类在写入mapper的时候就写类名就行了不区分大小写,在类上写@Alias()注解就是给这个类起个别名,mybatis还有一些自带的别名如下下图resultType里面的string,long这些事自带的别名 mapper.xml里面的resultType是写入要返回的类型 plugins标签的作用:插件:可以把它理解成mybatis的拦截器,可以拦截4大对象,可以拦截SQL 给SQL去加一些公共的功能 databaseIdProvider标签是用于根据不同的数据库调用不同SQL,property中的name里面必须写数据库厂商的名字value名字可以随便起,怎么查看数据库厂商的名字,如下图在设置完sqlSessionFactory 后吸入下面两句代码就能在控制台上看见了,然后在mapper.xml里面用如下下下个图此时id可以相同因为一个是MySQL数据库一个是Oracle数据库,databaseId写入mybatis.xmldatabaseIdProvider标签下对应的value值 mapper.xml文件介绍和使用 mapper namespace的作用命名空间,一般 情况下一个mapper映射文件对应一个不同的命名空间,利于管理和维护 书写:默认情况下可以随意输入,但是如果使用接口绑定的方式就必须要输入对应的接口的完整限定名 下图主要介绍增加的方法(删除和修改同理是大致上是一模一样的就sql语句不一样),id只能是唯一的除非有不同的databaseId(例如mysql和oracle),parameterType设置参数类型,statementType设置参数是否自动解析,useGeneratedKeys和keyProperty一起用用于获取自动增长的数据怎么用如下下图,databaseId 用于配合databaseIdProvider 数据库厂商id 指定不同数据库下调用不同SQL上面详细介绍过,下下图VALUES里面的#号后的内容必须和java类中的属性名保持一致,`mybatis_test`.`emp`()括号里面的属性必须和数据库一致 打印emp类里的数据会有id的值如果不设置useGeneratedKeys和keyProperty,自动增长的数据将获取不到(注意keyProperty写的值必须和java中类的属性名保持一致如果数据库里的属性与有id但是java类中的id1后有个1,里面的值必须写id1) 如果有些数据库软件没有自动增长这个选项(如oracle),就需要用到selectKey标签,他里面的属性order为在执行增加sql语句前先执行,keyProerty为要接受的id属性值,resultType为下方sql语句运行出来的结果为int类型,(由于keyProerty取的属性名必须为和java类中的属性一致,而sql语句中的VALUE中的id属性也必须保持和java类中的属性一致,所以查询到的最大数id的值,会自动的传入到下方VAKUES中) 接口的返回值还可以返回bool(增删改) 面试题: 1. Mybatis都有哪些Executor执行器?它们之间的区 别是什么? 2. ORM是什么? 3. 为什么说Mybatis是半自动ORM映射工具?它与 全自动的区别在哪里? 4. Mybatis之Mapper接口的实现原理