初识MyBatis

1.什么是MyBatis

MyBatis 是一款优秀的持久层框架(Dao层),它支持自定义 SQL、存储过程以及高级映射。内部封装了JDBC,也有人把MyBatis称之为半自动化的ORM映射框架

半自动化:MyBatis天生支持对象结果集映射,MyBatis认为用户自己写的SQL效率最高,所以没有支持.

2.什么是ORM

对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,在面向对象中方便进行对象转化.

用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--"虚拟对象数据库"。

对象转化:

        操作数据库时,我们通过sql语句来获取查询到的结果集,但是用户在使用时需要将结果集自己封装为对象,这个过程可以使用ORM进行自动化的映射.

ORM思想:

     ----结果集可以自动封装为对象

     ----根据对象可以自动生成sql

  全自动ORM

    hibernate    纯面向对象,用户不用写sql,但是多表操作时,代码不够灵活,sql冗余,执行效率比MyBatis低.

MyBatis入门案例

没有蓝鸟红鸟图标就添加一个插件 MyBatisX

初识MyBatis_第1张图片

1.导入jar包

运行期无效      provided
 

  

    
    
      mysql
      mysql-connector-java
      8.0.16
    

    
    
      org.mybatis
      mybatis
      3.5.6
    

    
    
      junit
      junit
      4.12
      test
    


    
    
      ch.qos.logback
      logback-classic
      1.2.3
    

    
    
      org.projectlombok
      lombok
      1.18.24
      provided
    
  

2.编写pojo实体类

应该与数据库中的表字段一一对应

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

    private Integer id;
    private String name;
    private Integer age;
    private String sex;

}
3.编写mapper接口和映射文件

在配置文件里编写UserMapper.xml映射文件,与接口绑定

public interface UserMapper {

    List getAllUser();

}
实现Mapper具体操作的

mapper namespace  
resultType

id要和接口绑定




    
    

   

4.mybatis-config.xml   核心配置文件

管理数据源 

 管理事务, 

加载映射文件

POOLED 池化

    
    
        
            
            
            
            
                
                
                
                
            
        

    

    
    
        
    
5.测试类

MyBatis操作数据库

1.加载核心配置文件mybatis-config.xml

2. 获取MyBatis核心对象    SqlSessionFuctory 

3.基于工厂模式,获取SqlSession

4.获取Mapper接口

5.基于接口调用业务方法

SqlSessionFactroyBuilder   工厂的创建   

SqlSessionFuctory     工厂   获取MyBatis核心对象

SqlSession = conn + 自动映射     获取对象

        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);

我要创建个工厂  而且我要拿到你的核心配置文件里面的resource对应的接口,然后我才能干活

  //获取Mapper接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

这个接口的实现类对象是谁?

是一个代理对象   而且是JDK的代理

    /**
     * mybatis操作数据库:
     *      1.加载mybatis的核心配置文件mybatis-config.xml
     *      2.获取Mybatis核心对象
     *  SqlSession = conn + 自动映射
     * @throws IOException
     */
    @Test
    public void testGetAllUser() throws IOException {
        //读取mybatis-config.xml核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //创建mybatis中操作数据库的会话对象SqlSession
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //面向接口编程 controller-service-dao  接口调用
        //获取Mapper接口
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用接口方法
        List userList = userMapper.getAllUser();
        //如果方法体中只有一行代码 并且是输出语句则简化
        userList.forEach(System.out::println);
    }

常见错误

BindingException异常说明

报错说明1:

org.apache.ibatis.binding.BindingException: Type interface com.jt.mapper.UserMapper is not known to the MapperRegistry.

解决方案1:
检查namespace命名是否与接口一致

报错说明2:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jt.mapper.UserMapper.findAll

解决方案2:
检查xml映射文件中的ID是否与接口方法一致.

报错说明3:

The error may exist in mybatis/mappers/UserMapper2.xml

解决方案3:
检查mybatis核心文件加载mapper映射文件的路径是否正确.
 

简化

@Before   在执行@Test测试方法前  执行

    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException {
        InputStream resource = Resources.getResourceAsStream("mybatis-config.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);

    }
    @Test
    public void TestSelectById(){
//得到sqlSession   开始干活
        SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById();
        System.out.println(user);
    }
    

你可能感兴趣的:(mybatis,oracle,数据库)