注意这里主方法是一个接口,上面要加一个Mapper注解,这样就可以系统生成一个实例化对象,并放入IOC池中,成为bean
通过依赖注入的方式,实例化接口,激活接口,之后在测试类中调用接口方法,得到返回值,并通过stream流遍历
用于简化实体类的代码量
在mapper包下的接口中,定义一个方法,因为是在接口中,所以是抽象方法,没有方法体
之后在方法上面加一个注解,如果是删除,就加删除注解@Delect(“”)
引号里面写具体的sql语句
这里注意有一个变量定义方法:#{id},这里会把抽象方法的参数传入进来
更加安全
例子
sql注入,对于不是预编译的代码,会采用拼接的方式,这样就有bug,可以通过填入的数据更改代码逻辑,如下
经过数据拼接,数据逻辑被更改,所以不安全,而预编译就不会有这样的bug
在接口中,当参数有多个时,可以用一个实体类进行封装,之后在注解的语句中,直接#{类的属性值}
而在测试类中,需要定义该类的对象,之后对该对象赋值,并调用接口的对应方法,如下图
(注意上方还有一个依赖注入,用来创建接口对象)
用于添加完数据之后,返回一个主键
代码
这是接口中,在接口上方加入注解 true表示启用注解,id表示将主键封装到对象的id属性中
(注意上方还有一个依赖注入,用来创建接口对象)
之后在测试类中可以输出对象的id,也就是主键,
因为接口包是用来跟数据库联系的,所以接口中只能完成与数据库的联系操作,其他操作大部分放在册数类中进行
而,测试类中利用接口调用方法的操作,实际上可以理解为上传数据至数据库
(注意上方还有一个依赖注入,用来创建接口对象)
测试类中,也是创建类的对象,利用对象赋值,这样数据就被封装进了对象里,再利用接口调用方法
这是接口中的代码,直接创建一个方法,方法的返回值类型是一个实体类,参数是id值,意思为将查询到的数据封装到一个对象当中
这是测试类,创建测试方法之后,调用接口方法返回一个对象,直接输出该对象。(之所以可以直接输出该对象,是因为该对象的类在定义时有toString方法,所以直接输出对象,可以输出可读信息)
当数据库中的字段名与实体类的属性名不一致的时候,无法完成自动封装
适用于数据库的字段名与实体类的属性名,区别在于下划线
例如 数据库字段名:user_name 实体类属性名:userName
直接在resources下 application里配置打开自动转换开关,设置为true即可
接口方法
这里采用一个拼接函数,可以将字符串拼接起来,防止#{}出现在引号当中,引起错误
因为查询到不止一条记录,所以返回不止一个对象,所以要用一个list<类>集合来保存返回值,参数是查询的条件
测试类当中,直接传入参数即可
在resources文件下创建一个包,右键选择Directory 之后不要用点分隔,而是用/,如上图
之后右键创建文件,文件名与接口类的名字保持一致
进入该文件之后,要先去官网复制下来一段配置文本,直接搜“Mybatis中文网 找到配置文件即可”(入门 然后下滑,找到如下图标注的部分即可)
注意先写一个《mapper》
之后在namespace后面是接口的全路径(一般只需配置一次,因为mapper标签在一个xml文件里只有一个,他是最大的标签),在id后面是接口的方法名,在resultType后面是返回值类型,当返回值为一个实体类时,要写全路径
里面sql语句跟注解写sql一样
这里有一个小技巧
对于接口方法,选中方法名,直接alt+回车,就可以自动在xml文件里生成相关功能的标签(前提是方法名要有其功能相关的单词,例如本图中的update),并且写好了id,如下图
无返回值,就不用再去写其他标签
因为我们的sql语句,对于某些参数设置死了,用户必须去对这些参数赋值,否则会查询不到,或者更新空值等问题
所以需要动态的进行sql语句的控制
在xml文件中,先ctrl+alt+v 格式化一下sql代码,之后将where改成where标签,里面每一段sql都用if标签判断,test=“” 引号里面写判断条件
在update语句中,要用逗号拼接,所以这里用set标签,会自动去除标签,注意只能自动去除,不能自动添加,所以在编写时,要加上逗号(以及上面where标签内sql语句要加上and)
用于提取出重复性强的代码部分,效果相当于java编码中的方法