一.原生态的JDBC的问题
先看一个jdbc的一个实例
@Test
public void ConnectionToMysql4() {
//定义引用
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
/**
* 1.连接数据库
*/
String driverClassName=”com.mysql.jdbc.Driver”;
String url=”jdbc:mysql://localhost:3306/UserLogin”;
String username=”root”;
String password=”123456”;Class.forName(driverClassName); con=DriverManager.getConnection(url, username, password); /** * 2.得到PrepareStatement * >给出sql模板,所有参数用?代替 * >调用Connection方法,得到PrepareStatement * */
String sql=”select * from userinformation where username=? and password=?”;
pstmt=con.prepareStatement(sql);
/**
* >为参数赋值
*/
pstmt.setString(1,”yyy”);//给第一个问号赋值
pstmt.setString(2,”123”);//给第二个问号赋值rs=pstmt.executeQuery();//调用查询方法,向数据库发送查询语句
// System.out.println(sql);
System.out.println(rs.next());
// while(rs.next()){
// System.out.println(rs.getString(0)+” “+rs.getString(1));
// }} catch (Exception e) { throw new RuntimeException(e); }finally{ //关闭 try { if(rs!=null)rs.close(); if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } }
}
2.总结jdbc的问题如下:
a.数据库连接使用时创建,不使用时就释放,对数据库频繁的开启和关闭,造成数据库资源的浪费,影响数据库的性能。
改善:那么能不能用数据库连接池来管理呢?
b.将sql语句硬编码到java中,如果sql语句修改了,需要重新java代码,不利于系统维护。
改善:能不能将sql语句添加到xml配置文件中呢,即使sql语句改变了,也不需要重新编译。
c.向preparedStatement中设置参数,用占位符设置参数值,硬编码到java代码中,不利于系统的维护。
改善:能不能将sql语句及占位符号和全部参数配置到xml文件中?
d.从ResultSet中遍历结果数据时,存在硬编码的问题,将获取表的字段硬编码,不利于系统维护。
改善:能不能将结果集自动映射成java对象。
二.mybatis的简介
mabatis是什么
a.mybatis是apache下的顶级项目,后托管到google、github.
b.mabatis将程序主要sql上,通过mabatis提供的映射方式,自由灵活的生成(半自动化,大部分需要程序员编写sql)满足需要的sql语句。
c.mybatis可以将preparestatement中输入的参数自动进行输入映射,将查询结果自动映射成java对象(输出映射)。mybatis框架图解
至此,mybatis基本结构已介绍完。