JDBC操作数据库的标准实现步骤:
1,加载驱动(com.mysql.cj.jdbc.Driver)
2,获取连接DriverManagner.getConncation()(jdbc:mysql://localhost:3306/student?)
3创建Sql语句,预处理sql语句
4,获取结果集or 结果
5,关闭资源
Mybatis的存在是为了解决JDBC标准实现的缺点
JDBC缺点:
1,硬编码,SQL语句与java代码耦合度很高,不便于维护;
2,代码重复度很高,在处理结果集时重复代码就很多也很麻烦,每次都需要去自己处理
3,SQL语句的参数被写死,用户只能按照写死的条件去查询
4,不适用分布式环境,没有缓存机制,适应不了好多场景,是一种底层技术
MyBatis 和 Hibernate 是 ORM 模型;
ORM :ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。
两者区边:MyBatis 半自动化模型 Hibernate 全自动模型
Mybatis优势:
可以进行更细致的SQL优化;容易掌握
Hibernate优势;
dao层开发比mybatis简单,mybatis需要维护SQL和结果映射hibernate数据库移植性好
Mybatis环境搭建:
1,导入所需架jar
2,创建配置文件,并配置好相关信息,由于配置数据库相关信息时明文的话不安全,直接从外部引入数据库相关属性,从物理上解决问题;
3,创建相关SQLmapper文件,在主配置文件中的Mappers标签中引入;
配置文件中的一些标签使用:
-
< typeAliases > 元素的功能:Mybatis内部支持的别名大多就是首字母不区分大小写,直接写类名就行;
MyBatis内部支持的别名:
-
元素的功能:用来在MyBatis初始化的时候引入映射器。可以单个映射器,也可以映入一个包中的所有映射器
-
使用MyBatis中的xml文件写sql语句并操作数据库
MyBatis刚开始去加载主配置文件,以及所有的Mappers中的所有XML文件,这个阶段他就已经知道哪个SQL的Id对应的那个Sql语句
自己创建接口,自己实现,自己执行sql语句
(1):读取主配置文件
InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”)
(2):创建 SqlSessionFactory
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
(3)创建SqlSession
SqlSession sqlSession = build.openSession();
(4):执行SQL
sqlSession.selectList(“aaa”);//xml文件当中的sql id属性值
sqlSession.insert(“ccc”, s);
sqlSession.delete(“eee”, sid);
sqlSession.update(“ddd”, s); -
通过动态代理(接口实现Mybatis接管,执行sql语句也被接管,现在只需创建SQL语句,实现动态代理就行)
在上面不通过动态代理,在创建接口时,接口返回值类型确定了XML文件中的ResultType
入参类型确定了parameterType,唯一找不到的就是执行什么SQL语句,于是可以通过方法名与SQL的ID映射上,全都解决后就可以通过动态代理去实现接口执行sql;
注意事项:
XML文件中Sql语句中注意事项:当有小于号时,用<代替
其中的传参类型:#{} 占位符 ${ } 字符串拼接
1,javaBean对象
2,Map集合(创建一个Map集合,通过key去找到对应的value)
3,传入多个参数,通过#{arg0},#{arg1}#{arg2}或者#{param1},#{param2}#{param3}
ResultType: 处理简单映射 ResultMap:处理复杂映射
一对一映射:
一对多映射: