MyBatis执行SQL语句的时候,默认不显示任何内容,对于执行的是哪一条SQL,SQL的实际参数是什么,不能明确!所以先倒依赖吧!
新建一个properties文件用于保存所有的核心配置内容
日志如何记录,记录的格式是什么样子,需要编写日志输出的配置文件log4j.properties....
------------ 日志导入截止到此,开始MyBatis抽取核心配置信息------------
新建一个properties文件用于保存所有的核心配置内容,起啥名都行,我用db.properties
将核心配置内容按照KEY=VALUE的方式声明在文件中,然后在mybatis.config.xml里面配置
-----------------------------mybatis的数据库起别名!----------------------------
卧槽!SQL映射文件中类型名称过长,你能写的过来,不写错?来开始起别名~~~
单独起别名,批量起别名,先说起别名需要注意的事项~
不推荐单独给某一个类起了别名之后,又用批量的方式覆盖掉!
批量起别名的时候,<package>中的name写的是包的名字,不是类的名字!
好家伙,别懵,上面是单独起别名,
下面是用~接下来是批量起别名。
**批量起别名之后,起别名的方式:类名变小驼峰,在SQL映射文件中,用别名代替。
路径不到类,到包即可,万万不可突破。
接下来就可以引用别名了,注意是小驼峰类名引用~~
-----------------------MyBatis接口代理XML开发模式----------------------------
通过MyBatis去完成数据操作(ORM),准备好你的数据库,和对应的实体类。
controller控制层,控制层Service,持久层dao,他们三个互相调用,好基友。
open 你的 eyes 每个的各自作用在图片上有。。
底层的原理:先编写接口,再编写SQL映射文件(SQL映射文件与接口之间的内容绑定起来),让MyBatis通过接口与SQL映射文件内容生成代理对象!
下面这图官方标头,进行了上面的起别名,数据库连接操作。
编写接口(一个接口:针对于某一张表的增删改查方法的集合)--建包mapper-里面写接口,接口里写抽象方法....
编写SQL映射文件与接口进行绑定
(1)SQL映射文件的mapper根标签的namespace要指定接口的名称(包名+类名)
(2)SQL映射文件中(增删改查)标签的Id要指定为接口中的方法的名称
(3)SQL映射文件中(查)标签的resultType要指定为接口中方法的返回值类型
正常编译之后classes(输出目录)结构 DishMapper.xml不在任何包中不方便管理。
让SQL映射文件编译之后与接口处于同一个包,
在resources目录下按照接口在包中的层级,逐级建包。
---------------------------------------------------------------------------------------------------------------------------------
★生成一个DishMapper接口的代理对象(MyBatis会自动根据接口中的方法,绑定了接口的SQL映射文件里面的SQL语句进行解析)生成代理对象。---编译后自动生成..
mybatis小鸟插件。。自己去安装...
----------------------------------------------------------一些问题---------------------------------------------------------
MyBatis是根据查询出来的伪表的列名与要映射的类的变量名进行匹配,可能出现MyBatis中SQL映射文件解决字段名称不统一的情况。
**MyBatis推荐方法(手动指定映射关系),解决问题三部曲。
1.在SQL映射文件中编写一个<resultMap>标签,并且指定Id和目标类型
2.在<resultMap>标签中依次指定伪表结果列与实体类成员变量的映射关系
3.在<select>标签中如果想要将查询到的结果按照手动指定的映射关系进行封装,通过resultMap属性进行指定
———————————————————————————————————————————
MyBatis接口代理的参数传递方式(单个简单参数)(多个简单参数)(单个复杂参数)(Map)
(1)在接口的方法中如何声明参数
@Param注解用于形式修饰的形式参数在SQL映射文件中如何取值,指定的名字是什么,在SQL映射文件中就用什么来取!
(2)在SQL映射文件如何获取参数
简单参数类型获取:通过在SQL中使用#{@Param注解指定的名称}来进行简单参数的获取;
如果是单个复杂数据,在SQL映射文件的标签上,先通过parameterType来指定参数的类型(参数的类名)[别名],在SQL中使用#{@Param指定的名称.属性名称}来获取参数对象的属性值;
上图更清晰。第一个简单,第二个复杂,第三个map
-后面是map存取
-------------------------MyBatis接口代理注解开发模式--------------------------
对于简单的增删改查需求,可以注解开发,但还是推荐使用XML!
通过注解的方式在接口的方法上进行SQL语句的声明,可以通过代理对象进行执行!so easy。
这回就释放双手,不编写SQL映射文件,但是还要写接口。接口上写注解。
@Select("SQL语句")|@Insert("SQL语句")|@Delete("SQL语句")|@Update("SQL语句")
就酱紫写sql语句。
------------------------------------动态sql-----------------------------------------------
SQL语句的动态拼接<sql> <if> <where> <set>
1.<sql>将重复内容抽取到<sql>标签中,并且通过id给起个名字,在需要使用到公共内容的时候,通过<include>标签引入到SQL语句。
2.<if>指定条件进行判断,并且根据条件返回的结果,明确标签中的SQL语句是否参与整体的拼接,
标签的使用方式:<if test="">判断的内容 如果判断的内容结果为TRUE,完成<if>标签的内容在SQL语句中的拼接;进行if的时候,一定要保证判断的内容与符号之间有空格;在if的test获取参数值不用写#{},直接通过属性名.属性值/属性名获取值判断即可!
3.<where>去包含if标签,如果最终拼接的条件带有前AND,自动清楚掉,如果最终没有满足拼接的条件,WHERE也自动清除掉!
标签的使用方式:包含所有的条件
4.<set>去包含if标签的做更新判断的时候前,标签的使用方式:包含所有的更新字段
1的配图
<sql>抽取当前XML文档中所有SQL语句中的重复部分抽取出来提高复用性!
2的配图
<if>指定条件进行判断,并且根据条件返回的结果,明确标签中的SQL语句是否参与整体的拼接
3的配图
<where>去包含if标签,如果最终拼接的条件带有前AND,自动清楚掉,如果最终没有满足拼接的条件,WHERE也自动清除掉!
4的配图
<set>去包含if标签的做更新判断的时候前,标签的使用方式:包含所有的更新字段
暂时先end,拜拜,后续有补的我再回来。