JDBC的“硬编码”
万事开头难,搭建MyBatis时,各种配置文件,映射关系,虽然一时间不好理解,但是搭建好整个框架后,可以大幅度提高开发效率。和传统的JDBC相比,MyBatis一个比较大的优点是减少了“硬编码”。硬编码就是把一些外部数据或程序运行时生成的数据,用赋值语句写死在了源代码中,这样做的坏处是,如果我们想修改一些字段或数据,我们必须从源代码处修改,修改完后重新编译执行,这样的方式明显降低了程序的可扩展性。JDBC的一个缺点就是在于数据库驱动程序,连接地址等采用“硬编码”的方式,导致如更换数据库后,不利于维护的问题。例如我们看JDBC的连接数据库方式:
public Connection connectDataBase() {
//数据库连接对象
Connection con = null;
//驱动程序
String driver = "com.mysql.jdbc.Driver";
//databaseName指向要访问的数据库名
String url = "jdbc:mysql://localhost:3306/User?useSSL=false";
//数据库连接用户名
String user = "root";
//数据库连接密码
String password = "12345";
try {
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
//判断连接是否成功
if(!con.isClosed()) {
System.out.println("数据库连接成功!");
}
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
}
//最后返回数据库连接对象
return con;
}
JDBC的数据库连接,把驱动程序名、数据库连接地址,数据库用户和密码等数据都是通过赋值语句写死在程序代码中的,假如我们对程序维护时,遇到如数据库账户或密码等修改,就要对数据库连接源代码进行修改,然后重新编译,最后再运行,这种方式工作量大,不利于维护。还有一点是每一个需要连接数据库的类中,都要引入这个数据库连接类,实例化对象,调用连接方法,使用完后等对象被自动回收,容易造成资源的浪费。
JDBC还有一个缺点就是它的数据库操作语句
对于JDBC的“硬编码”问题,MyBatis的解决方式是把这些数据库配置信息,写入在XML文件中,同样地,SQL语句也是配置在XML文件里,而不是直接编写在Java类中。那么执行完的SQL语句,获得的结果集怎么取得?得益于MyBatis的输出映射,能够将SQL检索得到的结果集映射成一个Java对象,然后从这个对象中获取数据,详细的接下来说。
MyBatis框架各部分
一个MyBatis框架由6部分组成:分别是数据源配置文件、SQL映射配置文件、会话工厂、会话、执行器和底层对象。首先来看最重要的数据源配置部分:
数据源配置文件
为什么说这部分是最重要的?因为数据源配置文件存放了数据库连接的信息,例如数据库驱动程序、数据库连接地址、数据库账户和密码等,它是一个全局配置文件。看图:
第一行指定xml版本信息为“1.0”和编码方式“UTF-8”。第2-4行中,从第3行的“DTD(Document Type Definition)”可以知道,这是配置文档类型定义,也就是按照某种方式来检查配置文件中的标签和标签中的参数是否正确。这里引入的是MyBatis的DTD文档规范标准。
接着第6-9行settings配置标签对中可以设置logImpl,即选择哪种日志工具输出日志信息,因为我使用的是mybatis-3.4.1,所以配置Log4j。第10-25行,配置环境信息,即数据库连接信息部分,这部分很重要,一起来看,MyBatis的环境信息配置在environments标签对中,里面又有environment标签对,每一个environment标签对表示一个独立的数据库,所以我们可以在里面配置多个数据库信息。首先来看第14行,transactionManager标签配置事务控制类型为JDBC机制。第16行dataSource标签配置数据库的连接信息,type=“POOLED”意思数据源类型,dataSource的数据源类型有三种:UNPOOLED、POOLED和JNDI,分别对应的是“不适用连接池”、“使用连接池”和“Java命名与目录接口”。
第18-23行,配置要连接的数据库信息,熟悉的数据库驱动程序,连接地址等信息。最后第28行,配置Mapper映射文件的路径,Mapper.xml文件中配置的是SQL语句,如下面的UserMapper.xml中我们会看到。
看到这里,你可能会想,在这个数据源配置文件中,数据库驱动,连接地址,账户和密码不也是“硬编码”上去的吗?没错,在搭建一个最简单的MyBatis时