①设计好数据库和java对应的实体类
②设置全局配置文件
③配置映射文件
④编写测试类
①创建一个对应接口
②修改映射文件的某些配置
③编写测试类
⑤.environments(运行环境:可以配置多种环境) ⑥.databaseIdProvider数据库厂商插件能拦截四大对象的方法
1.Executor
2.ParameterHandler
3.ResultSetHandler
4.StatementHandler
上面第三点,还必须映射文件名和接口名一致
有的公司使用以下方法:
mybatis还有另一种方式:没有映射文件,sql语句利用注解写在接口上
如果想要获取自增主键,可以采用以下方式(oracle不支持自增)
-------------------------------------------------------参数处理-------------------------------------------
①如果传过来的参数是单个参数,mybatis不做特殊处理,例如
②如果传过来的参数是多个参数,mybatis会将多个参数封装成map结构
所以以下书写结构是错误的:
解决方法1:(使用mybatis给定的map结构 param1、param2…)
解决方法2:(使用@param注解)
在参数很多有五六个的情况下:
1.如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
2.如果不是我们业务逻辑里的模型也不经常使用的话,我们可以使用map
3.如果不是我们业务逻辑里的模型但是经常使用的话,我们可以创建一个实体类
经典面试题:#{}和${}的区别特别注意:
如果穿过来的参数是Collection类型或者数组也会进行特殊处理
例如: public Employee getEmployeeByI的(List ids);
取第一个值: #{list[0]}
Collection------->colllection[0]
Array-------------->array[0]
#{}和${}的区别
#{}是以预编译的形式,将参数设置到sql语句当中,防止sql注入
${}:取出的值直接拼装在aql语句中,会有安全问题,原生jdbc不支持占位符的地方,就可以使用
①key为列名,value为列名对应的值(map里只有一个对象)
②key为指定列的值,value为employee对象
resultMap更强大的用法:
①(级联属性封装结果类)
一个类中有自定义的属性,可以使用如下方法:
②使用association
③使用分步查询
创建department对应的接口和xml文件
在全局配置文件中注册映射文件
在employee.xml文件中使用分步查询:
延迟加载:对于上面的分步查询中department对象用到的时候才加载
----------------collection嵌套结果集的方式,定义关联的集合类型元素的封装------------------
一个实体类里有一个集合属性就可以用collection
例如:查询部门时,将部门下的所有员工都查询出来
在分布查询当中,第二步查询需要的参数是通过column传递的,如果有多列的值要传递过去怎么办?
解决方法:封装成一个map
5.动态sql分步查询:association、collection里面的select属性
if、chose、trim、foreach
ifwhere当第一个if标签中的表达式不成立,会造成语法错误,例如
解决方法1:在where后加一个 1=1 这样就不会出现语法错误
解决方法2:使用wherer标签,只会去掉写在开头的and,如果and写在后面,则不起效果
解决以上问题
自定义截取规则
这样的话,如果where后面有一个多余的and,就会被去除
chooseset与if的区别:
if只要满足条件就会拼接,而choose只能选择一个
set与if配合使用
正确写法:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)