初入MyBatis,简介
Posted 木子李和三点水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初入MyBatis,简介相关的知识,希望对你有一定的参考价值。
一.MyBatic的作用
O:Object ,Java POJO 简单普通的java对象,由有一些private的参数作为对象的属性,然后针对每一个参数定义get和set方法
1 public class Category { 2 private int id; 3 private int catNum; 4 private String catName; 5 private String catStatus; 6 7 public int getId() { 8 return id; 9 } 10 11 12 public void setId(int id) { 13 this.id = id; 14 } 15 16 public int getCatNum() { 17 return catNum; 18 } 19 20 public void setCatNum(int catNum) { 21 this.catNum = catNum; 22 } 23 24 public String getCatname() { 25 return catName; 26 } 27 28 public void setCatname(String catname) { 29 this.catName = catname; 30 } 31 32 public String getCatStatus() { 33 return catStatus; 34 } 35 36 public void setCatStatus(String catStatus) { 37 this.catStatus = catStatus; 38 } 39 }
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等等。
以上是关于初入MyBatis,简介的主要内容,如果未能解决你的问题,请参考以下文章
markdown [mybatis参考]关于mybatis #mybatis的一些片段
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段