mybatis ORM框架
和hibernate相比
1.hibernate功能完善 , mybatis稍欠缺,例如在缓存方面
2.hibernate hql方言的支持,可以在任意数据库上生成对应的sql语句,移植性更强
mybatis因为是编写sql语句,所以移植性较差
3.hibernate全自动化面向对象的编程,mybatis半自动化,面向sql编程
4.mybatis开发效率较高
在mybatis中 ${}和#{}的区别在于,$用来直接拼接内容,而#号会使用预编译的方式
更加安全,防止sql的注入
在mapper.xml文件中编写sql语句,同时让mapper的namespace映射接口的路径
1.DAO层接口中定义方法,但是不写具体注解来实现
2.定义Maaper文件,文件中的语句的数量对应着接口的方法的个数,并且语句的id和
方法名相同
3.Mapper文件的namespace指向接口的路径
4.在核心配置中注册Mapper文件路径就可以
5.使用的时候还是getMapper(接口.class) 还是使用接口,符合开发的思想
mybatis调用时传递多个参数怎么办?
dao层的方法带有参数在语句标签中可以不用指定parameterType
1.可以直接使用下标访问或者#{arg0} #{param1}
arg开头从第0个元素访问,param从第一个开始
2.Map方式 在sql语句的#{map的key}来得到mapper的值
解决属性和表字段不同名的办法有
1.查询的时候使用as给别名
2.使用ResultMap来解决,通过配置result property=属性名 column=列名来让查询
的结果列和java对象的属性映射调用set方法来注入值
resultMap还能解决对象关系映射的问题
多对一:在多的一端放1的一端的对象
一对多:在1的一端放多的一端的集合
mybatis的缓存策略
1.一级缓存是sqlSession级的缓存,指在session未关闭之前查询相同的对象会命中缓冲
2.二级缓存是Mapper级别的缓存,指同一个sqlSessionFactory中多个sqlSession访问
同一个对象时,如果在mapper文件中添加了<cache/> 就会默认打开这个mapper的二级缓存
所有一级缓存的数据都会存一份到二级缓存,所以如果一级缓存没有命中会去二级缓存
中寻找(要等sqlSession关闭时才会把一级缓存中的数据存入到二级缓存中)
动态sql语句
创建