Mybatis学习记录(一)——为什么要使用Mybatis与基础理论

2018.4.3

仅为个人理解 不足之处欢迎指正~

什么是MyBatis?

MyBatis在JavaWeb中可以当作对JDBC的封装,完成与数据库的交互功能,相当于在以前不用框架的JavaWeb中的Dao层

为什么要使用MyBatis?

比如说在之前写的论坛后端中,在一个JDBC.java中,包含了非常多的结构比较相似的代码

public static Connection getConnection(){//获得连接
		String driver ="com.mysql.jdbc.Driver";
		String url ="jdbc:mysql://localhost:3306/mybbs";
		//	
		String user ="root";
		String password ="12345";
		Connection connection =null;
		try {
			Class.forName(driver);
			connection =DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

在这一段作用为 获得链接 的代码中 包含了几个不便之处

1.获取链接需要产生一个connection 而其他的增删改查或者其他操作也需要从获取链接开始 也就是说每一个操作都需要一个connection 而connection的创建和销毁都会消耗较多资源

2.

//获取用户信息
			public UserBean getMessage(Integer id){
				String stuid=null;
				String name=null;
				String birthday=null;
				String school=null;
				String major=null;
				String note=null;
				String email=null;
				String res = null;
				String sql = "select * from db_user where stuid = ?";
				Connection con =getConnection();
				PreparedStatement pstmt =null;
				ResultSet rs = null;
				try { //String stuid,String name,String birthday,String school,String major,String note,String email
					pstmt = con.prepareStatement(sql);
					pstmt.setInt(1, id);
					rs = pstmt.executeQuery();
					while(rs.next()){
						//System.out.println(rs.getString(1)+"    "+rs.getString(2)+"    "+rs.getString(3)+"    ");
						stuid=rs.getString(2);
						 name=rs.getString(3);
						birthday=rs.getString(6);
						 school=rs.getString(7);
					         major=rs.getString(8);
						note=rs.getString(10);
						 email=rs.getString(11);
					}

				} catch (SQLException e) {
					e.printStackTrace();
				}finally {
					try {
						if(pstmt!=null)pstmt.close();
						if(con!=null)con.close();
					} catch (SQLException e) {		
						e.printStackTrace();
					}
				}
				UserBean ub=new UserBean(stuid,name,birthday,school,major,note,email);
			 return  ub;
			}

在这样一个 获取用户信息 的方法中 :

String sql = "select * from db_user where stuid = ?";


sql语句是已经写好在源代码中的 那么这样导致的后果是如果在后期想要修改调整sql语句 必须深入到代码中 找到相应的方法 非常的不方便

3.

pstmt.setInt(1, id);
					rs = pstmt.executeQuery();
					while(rs.next()){
						//System.out.println(rs.getString(1)+"    "+rs.getString(2)+"    "+rs.getString(3)+"    ");
						stuid=rs.getString(2);
						 name=rs.getString(3);
						birthday=rs.getString(6);
						 school=rs.getString(7);
					         major=rs.getString(8);
						note=rs.getString(10);
						 email=rs.getString(11);
				

在这段代码中 对数据库的set操作和get操作 都已经有了明确的对象 这是在最初构建数据库和数据关系时已经确定的  而无论是想要修改sql语句 还是要修改数据库结构 都需要修改这些代码 需要改动的地方太多了

Mybatis是如何解决上面三个问题的?

1.Mybatis在其config.xml中配置连接池


        
            
            
                
                
                
                
            
        
    

而这个连接池可以管理所有connection

2.sql语句独立在某个类(Bean)的xml映射文件中

  
        			insert into category_(name)values(#{name})
        
        
        
        			delete from category_ where id=#{id}
        
        
        
        		update category_ set name=#{name} where id=#{id}
        
        
        
        

在这样一个对 Category 类的增删改查中 包含了所需的sql语句 需要修改时只需要改动配置文件

而在参数传递行为中 传参的语句和sql语句一样 也移动到 映射文件

3.修改sql语句导致映射语句也需要修改:将结果映射直接配置到映射文件中 Mybatis将自动映射


总结:

平时我们使用JDBC访问数据库 除了需要自己写SQL之外 还必须操作Connection, Statment, ResultSet 这些其实只是手段的辅助类 不仅如此 访问不同的表 还会写很多雷同的代码 虽然熟练之后可以很快完成 但是依然很繁琐且不方便改动

而在使用Mybatis之后 我们的工作只需要自己提供SQL语句 而其他的比如建立连接、异常处理、statement等操作交给框架去做 那些繁琐的重复的工作也不用再去写了 这样我们就可以专注与sql语句的操作层面


后记:

Mybatis的原理后续慢慢补充~

Mybatis的操作将在另一篇文章中一步一步记录~项目驱动学习~


你可能感兴趣的:(JavaWeb,Mybatis)