学习笔记:mybatis——配置文件以及代码参考

目录

什么是mybatis

本文开始:

理解要点:

其他资料:

正文开始

一、mybatis框架配置文件(xml)概述

1.mybatis基础配置文件结构(xml)

2.mapper映射文件(xml)

二、参考代码(非完全代码)

1.部分xml配置

1.1.mybatis基本配置文件 

1.2. mapper.xml部分配置文件

2.部分java代码

2.1 用户数据库操作接口

 2.2.实体类

2.3.测试代码


什么是mybatis

[百度百科]。

我个人的理解就是:这个框架的出现减少了我们在传统持久层的注册驱动、获得数据库连接、设置SQL语句、获得SQL对象、执行SQL语句到数据库、获得结果集、处理结果集、关闭数据库连接相关对象的繁杂步骤。让我们只需要在实际开发中专注于SQL语句,从而起到了提升开发效率的作用

本文开始:

  1. 本文系统环境:windows10 NT(1809)
  2. jdk环境:jdk8(默认) 、jdk11
  3. mybatis 描述版本:3.5.1
  4. 测试文末代码的基本jar包包括:mysql-connector-java-8.0.16.jar、mybatis-3.5.1.jar、junit-4.10.jar

理解要点:

编程中有个概念——不要重复写一样的代码。因为编程的工作应该更加专注于对业务的实现,而那些重复性的工作应尽量减少,重复性的写代码不仅浪费时间,而且没有意义(这也就是通常程序员自黑说的搬砖,搬砖并不能提升技能,只能固化思维)。所以这些具有重复开发部分的都应该被封装成一个方法、一个类或一个框架。

所以这里mybatis框架,就是为了解决开发过程中,一些对数据操作的持久层重复性工作做了一个封装。所以,从入门角度出发,mybatis执行过程:

  1. 编写配置文件(xml)
  2. mybatis读取配置文件(InputSteam)——整个项目只加载一次
  3. 实现配置构造器(SqlSessionFactory)——整个项目只加载一次
  4. 实现配置环境(SqlSessionFactory.bulid(inputSteam))——整个项目只需要加载一次,可重复使用
  5. 给出SQL会话(SqlSessionFactory.openSqlSession())——数据库操作基础
  6. SQL会话给出数据库操作代理类(SqlSession.getMapper(Dao.class))
  7. dao层方法执行方法([dao.insert,dao.select,dao.updata,dao.delete])
  8. SQL会话执行代理类做的操作(SqlSession.commit)
  9. SQL会话关闭(SqlSession.close())

其他资料:

  • 书籍:java面向对象编程思想(第四版)
  • 连接:博客:为什么要使用框架

正文开始

一、mybatis框架配置文件(xml)概述

1.mybatis基础配置文件结构(xml)

注:配置文件结构copy自官网

configuration(顶级标签,代表设置)

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    • environment(环境变量)
      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

在xml中配置文件骨架(xml)






    
        
        
        ......
    
    
        
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#settings]
    
    
        
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases]
    
    
        
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers]
    


    
    
        
        
            
            
            
            
                
                
                
                
                ......
            
        

        
        
               ......
        
    
    
        ......
        ......
        ......


    
    
        
    

以上只是mybatis的基本配置环境,接下来才是涉及到开发者最应该熟悉文件——mapper.xml

2.mapper映射文件(xml)

配置mapper映射文件,基于基础配置文件的mappers标签中地址。因为在mybatis执行过程中涉及到读取配置文件的操作,所以,构建器会根据基础配置文件的mapper resource属性,根据其值中的文件路径查找到mapper映射文件,然后读取mapper映射文件构造dao代理类。所以配置mapper文件就等于在构建代理类的功能或模样啦。因此,在mapper文件中如何配置决定了代理类如何执行,有哪些功能,返回什么等等具有重复性质的操作。根据官网描述能节省95%代码,所以,对于一个大系统来说,这是非常具有意义的框架,有效提高了开发效率。至此,简单介绍一下mapper文件的结构

注:以下mapper.xml文件结构copy自官网

  • cache – 对给定命名空间的缓存配置。
  • cache-ref – 对其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。文档中不会介绍此元素。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句

那么mapper.xml骨架就是大体结构就是:






    


    


    
        
            insert into tabelname values(value1,value2........);
    


    
        
        update tabelnaem set key1=value1 , key2=value2.............
    


    
        
        delete tablename where key=value and .... and ....
    





除此之外,还有不少能减少代码的标签,这里不再一一介绍,mybatis提供的功能还是很强大的!

这里值得注意的是,在mapper.xml中如果有的方法涉及到参数,例如select 标签的属性parameterType,如果提供的参数是一个对象,那么mybatis将直接提取对象中的属性,我们在使用的时候就可以用 [#{}] 的形式直接提取对象中的属性到SQL语句中。而不需要 [对象.属性] 的形式去提取数据到SQL语句中,这样子还是升了不少代码,当然,如果对象中还嵌套A着另外的对象B,此时如果还需要使用对象A中的对象B的部分属性,就需要[B.属性],看起来很复杂,但是mybatis仍然让我们省了至少[对象.]吧。

二、参考代码(非完全代码)

1.部分xml配置

1.1.mybatis基本配置文件 






    
    
        
        
            
            
            
                
                
                
                
                
            
        
    


    
    
        
    

1.2. mapper.xml部分配置文件






    
    
        insert into user(`username`,`birthday`,`sex`,`address`)
        values
        (#{username},#{birthday},#{sex},#{address})
    
    
    
        delete from user where id =#{userid}

    
    
    

    
    

 

2.部分java代码

2.1 用户数据库操作接口


import com.itheima.domain.User;

import java.util.List;

/**
 * 用户信息操作接口
 * @Auther
 */

public interface UserDao {
    /**
     * 添加用户
     *
     * @param user
     * @return
     */
    int insertUser(User user);

    /**
     * 通过id删除用户
     *
     * @param userid
     * @return
     */
    int deleteById(int  userid);

    /**
     *
     * 查询所有方法
     * @return
     */
    List findAll();

    /**
     *
     * 通过id查找用户
     * @param id
     * @return
     */
    User findById(int id);

}

 2.2.实体类

import java.io.Serializable;
import java.util.Date;

/**
 * 实体类
 */

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2.3.测试代码

/**
 * 这里只是一部分测试代码,不包含配置文件
 */
    SqlSessionFactory factory;
    SqlSession session;
    UserDao userDao;

    @Before
    public void createFactroy() throws IOException {
//2.加载配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//3~4.构建配置构建器,并给出会话工厂
        factory = new SqlSessionFactoryBuilder().build(in);
//5.会话工厂给出SQL会话
        session = factory.openSession();
//6.SQL会话给出代理数据库操作代理类
        userDao = session.getMapper(UserDao.class);
    }

    @After
    public void closeSession() {
//9.SQLsession会话关闭
        session.close();
    }

    @Test
    public void findUserById() {
//7.dao层执行方法
        User user = userDao.findById(41);
//8.session.commit(),这里只是涉及查询,所以没有事务,略
        System.out.println(user);
    }

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)