初入MyBatis,简介
一.MyBatic的作用
O:Object ,Java POJO 简单普通的java对象,由有一些private的参数作为对象的属性,然后针对每一个参数定义get和set方法
public class Category { private int id; private int catNum; private String catName; private String catStatus; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getCatNum() { return catNum; } public void setCatNum(int catNum) { this.catNum = catNum; } public String getCatname() { return catName; } public void setCatname(String catname) { this.catName = catname; } public String getCatStatus() { return catStatus; } public void setCatStatus(String catStatus) { this.catStatus = catStatus; } }
Java POJO与Java Bean比较:
1.POJO其实是比javabean更纯净的简单类或接口。POJO严格地遵守简单对象的概念,而一些JavaBean中往往会封装一些简单逻辑。
2.POJO主要用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。
3.Javabean虽然数据的获取与POJO一样,但是javabean当中可以有其它的方法。
R:Relationship,在关系数据库中,一条数据由多个列组成
抛出问题:关系数据库中,无法直接存储一个完整的POJO,造成O/R不匹配的问题,此时需要将POJO中的属性映射到关系数据库中
解决方案:
MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无须关注底层的JDBC操作,就可以以面向对象的方式来进行持久化层操作.底层数据库 连接的获取,数据访问的实现,事务控制等都无须用户关心,从而将应用层从底层的JDBC/JTA API抽取出来.通过配置文件管理JDBC连接,让MyBatis解决持久化的实现.
MyBatic优点:
MyBatis是对JDBC的封装
1. 优化获取和释放
一般在访问数据库时都是通过数据库连接池来操作数据库,数据库连接池有好几种,比如C3P0、DBCP,也可能采用容器本身的JNDI数据库连接池。可以通过DataSource进行隔离解耦,统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以将DataSource的具体实现通过让用户配置来应对变化。
2.SQL统一管理,对数据库进行存取操作
使用JDBC对数据库进行操作时,SQL查询语句分布在各个Java类中,这样可读性差,不利于维护,当修改Java类中的SQL语句时要重新进行编译。Mybatis可以把SQL语句放在配置文件中统一进行管理,以后修改配置文件,也不需要重新就行编译部署。
3.生成动态SQL语句
在查询中可能需要根据一些属性进行组合查询,比如我们进行商品查询,我们可以根据商品名称进行查询,也可以根据发货地进行查询,或者两者组合查询。如果使用JDBC进行查询,这样就需要写多条SQL语句。
4.能够对结果集进行映射
在使用JDBC进行查询时,返回一个结果集ResultSet,我们要从结果集中取出结果封装为需要的类型在Mybatis中可以设置将结果直接映射为需要的类型,比如:JavaBean对象、一个Map、一个List等等。