经典三层框架初识--一.Mybatis(上)

  • 软件开发三层架构

    • java提出分层开发(经典三层)

      • 表示层:与用户进程交互的组件和容器构成 servlet        SpringMVC/Struts2
      • 业务逻辑层:由业务处理组件构成                    Spring Framework
      • 数据持久层:实现与数据库直接交互        jdbc        Mybatis/Hibernate/JdbcTemplate
      • 思考:为什么要把业务逻辑层和数据持久层分开?
        • 分层开发主要的目的就是松耦合
        • 例如:数据持久层我们只做数据的增删改查,其他的并不知晓.我们应该把事务的处理和这些增删改查的调用放在业务逻辑层,具体底层如何实现数据的操作,这个层是不关心的.表示层接受到用户的信息(如账号密码后),一般需要业务逻辑层验证(名称,规范),这一系列的验证都通过了才会往下.
        • 一般情况下,我们会给三层分个包,表示层经常写的包名一般是action/web;业务逻辑层一般写的包名servlet/biz;数据持久层包名经常起做dao;  
        •  Mybatis一般处理数据持久层
    • 什么是框架

      • 咱们以前做dao的时候分为以下几步:注册驱动,获取连接,预编译发送sql,接受响应处理,释放资源
      • 不管我们做insert 还是 update ..都会执行者几步操作,其实除了第三第四步不同,其他都是一样的.这样就很麻烦.所以就引出了我们要说的框架
      • 定义:框架是将重复性的,繁琐的内容封装起来的一套程序,使开发人员能够将更多的精力放在业务分析和理解上

      • 好处:

        • 简化开发(配置的方式)
        • 屏蔽细节
        • 提高开发效率
    • 传统jdbc的不足

      • 1.驱动注册 ,连接获取的地方出现硬编码问题--开始我们使用了外部配置文件    来解决这个问题,框架中遇见这种问题,大部分都是配置配置文件解决
      • 2.赋值(比如preparedStatement ..给占位符中的内容赋值)和结果封装繁琐  ---以后我们可以用反射 orm框架来实现
      • 3.连接的频繁打开和关闭,会消耗资源 ---连接池来解决
  • 什么是Mybatis

    • 上面说的不足,Mybatis都可以解决.
    • Mybatis支持动态sql操作,存储过程,高级映射;避免了几乎所有的JDBC代码,说明底层它就用的是JDBC代码实现.
    • -------------------------
    • Mybatis是一款优秀的持久层框架

    • Mybatis需要关注sql,输入参数和输出结果映射

    • Mybatis是一个orm框架

    • 思考补充:

      • 那我们的对象和数据库表中的记录是怎么映射的呢?下面说一下orm

        • orm:对象关系映射.解决面向对象编程模型和关系型数据库模型之间的映射问题

        • 表里面的每一个字段刚好对应到对象的属性里面
        • 输入参数:以为这对象的每一个属性值对应到表中的每一个字段中去
        • 输出结果映射:表中的每一个字段映射到我们对象的每一个属性当中去
  • 入门案例

    • 需要的jar包: 1.mysql驱动包  2.mybatis相关jar
    • 为了帮助我们能更快的找到所需要的mybatis的相关jar包,需要了解一下mybatis的历史背景
      • 最开始是Apache项目:ibatis
      • 移植到Google code:mybatis        --常规方式到不了
      • GitHub:开源软件的托管平台
    • 编写java项目
      • 对于Mybatis来说有两种配置文件--咱们这里用xml.都写在新建的Source Folderd中(和src同级别),起名文件夹名为config
        • 全局配置:至少四个参数 (驱动 url username password)-->来配置连接池....我这里定义的全局配置文件叫:mybatis.xml
        • 
          
          
           
           
          
          
            
            
            	
              
                
                
                
                
                    
                   
                  
                  
                
              
            
            
            
              
            
          

           

        • 映射配置:定制化sql,输入参数和输出结果映射 --这个对我们来说更为重要,是真正处理我们的业务. 我这里配置文件名为:UserMapper.xml
        • 
          
          
          
          
          
            
          
          
          
            
            
            
            
            
            
            
            
            
            
            
          
          
          
          
          

           

        • 这里我们还需要一个类,来作为保存我们记录的封装对象

        • package pojo;
          
          public class UserInfo {
          	private int uid;
          	private String username;
          	private String password;
          	public int getUid() {
          		return uid;
          	}
          	public void setUid(int uid) {
          		this.uid = uid;
          	}
          	public String getUsername() {
          		return username;
          	}
          	public void setUsername(String username) {
          		this.username = username;
          	}
          	public String getPassword() {
          		return password;
          	}
          	public void setPassword(String password) {
          		this.password = password;
          	}
          	@Override
          	public String toString() {
          		return "UserInfo [uid=" + uid + ", username=" + username + ", password=" + password + "]";
          	}
          	
          	
          }
          

           

      • 读取配置运行测试

        • Sqlsession:面向开发者接口--在这个接口里面,提供了很多发送SQL的命令,拿到这个接口的实现类对象就能直接发送SQL了

        • Sqlsession的创建是通过工厂模式创建管理的  SqlSessionFactory:session工厂,创建和管理session对象需要读取配置文件才能创建出来

        • package test;
          
          import java.io.IOException;
          import java.io.Reader;
          
          import org.apache.ibatis.io.Resources;
          import org.apache.ibatis.session.SqlSession;
          import org.apache.ibatis.session.SqlSessionFactory;
          import org.apache.ibatis.session.SqlSessionFactoryBuilder;
          
          import pojo.UserInfo;
          
          public class Test {
          
          	public static void main(String[] args) throws IOException {
          		//读取配置文件
          		//mybatis提供了一个读取配置文件转换为输入流的方法
          		Reader reader = Resources.getResourceAsReader("mybatis.xml");
          		//得到工厂的方法
          		SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
          		//发送定制好的SQL
          		
          		//通过工厂拿到对象
          		SqlSession session = ssf.openSession();
          		//封装到对象里面去
          //		session.selectOne(String statement, Object parameter)  uid的值
          		UserInfo info = session.selectOne("adhs.selectUser", 1);
          		System.out.println(info);
          		//归还连接
          		session.close();
          		
          	}
          
          }
          

           

           

 

 

你可能感兴趣的:(javaEE)