简介
1.什么是MyBatis
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
2,为什么需要MyBatis
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
3.如何使用MyBatis
需要导入两个包
1.创建mybatis-config.xml文件,在该文件中完成和数据库的连接设置操作
首先需要创建xml文件,再导入dtd文档类型定义。
写配置文件需要安装一定的顺序。
有四种引入映射文件的方法。
类路径、本地文件路径、接口类路径、包名引入。
新的方法 会将test.cwq.shop.model 包中的POJO类一首字母小写的非限定类名作为别名。 不过,Mybatis 的别名不区分大小写。
2.根据数据表创建相应的实体类
3.创建mapper文件完成对实体类的映射,该文件同样是xml文件
<SQL>元素
4.创建SQLSessionFactory 根据factory获取Session 直接根据Session 来执行相应的操作
5.insert,update,delete,select
insert标签表示添加相应的对象信息,paramterType表示添加的对象类型
update表示更新操作,delete表示删除操作 select表示查询操作,可以查询列表或者单个对象
相应的调用方式
6.xml中两种的引用
1、#{xxx}这种方式会自动将这个值替换为PreparedStatment中?来使用,如果是字符串会自动加上引号,对于排序而言就无法操作
2、${xx}这种方式叫做完全替换,直接将字符串完整的替换到这个位置,完全替换的方式可能会出现SQL注入的安全隐患。建议在参数中不要使用这种方式。但是如果使用在排序中没有任何影响
update表示更新操作,delete表示删除操作
7.也可以用annotation
就不需要类的xml文件 只要写一个类接口
8.SQL动态查询
只要test属性为true 就会执行元素中的条件
9.constructor
MyBatis使用参数类型来标记构造器,将结果注入构造器。Java无法通过发射获取参数名称,所以在创建constructor元素时,要确保参数按顺序传递、并且指定正确的参数类型。
注意事项(如果问题向mybatis官网找答案。)
1.注意不同的xml类型的文件 dtd 不同。
2.configuration配置文件的节点顺序是不能改变的。
3.${}和#{}的区别
${} 无法防止注入问题。
4.collection和association的区别
api解释
Mybatis处理“一对多”的关系时,需要用到associasion元素。处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过)。
association的用法。
主键关联。一对一关系,通过主键查询一个结果集,将结果集封装成addressMap。而只能用javaType=address 没有为什么 这是一种规定。如果是collection只能用ofType.
collection的用法
列表关联。一对多关系,将通过id查找一个或多个结果集。将结果集封装成userMap。而数据类型只能用 ofType表示。