深入浅出mybatis(持续更新)

一、MyBatis相关概念回顾

1.对象/关系数据库映射(ORM)

ORM 全称Object Relation Mapping : 表示对象-关系映射的缩写
ORM 完成面向对象的编程语言到关系数据库的映射,它把关系数据库包装成面向对象的模型。采用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,ORM将把这些对象的操作转换成底层SQL操作。

2.MyBatis简介

  • MyBatis是一款优秀的基于ORM半自动轻量级的持久层框架,它支持定制化SQL以及高级映射。它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
  • MyBatis可以使用简单的XML或者注解来配置和映射原生类型、接口和Java的POJO成数据库中的记录。

3.MyBatis历史

  • 它原是apache的一个开源项目iBatis,于2010年6月由apache迁移到了google,iBatis3.x正式更名为MyBatis,代码于2013年11月迁移到GitHub。
  • iBatis一词来源于"internet"和"abatis"的组合,是一个基于JAVA的持久层框架。它包括SQL Maps和Data Access Objects(DAO)

4.MyBatis优势

  • MyBatis是一个半自动的持久层框架,对于开发人员来说,核心的sql还是需要自己进行优化。
  • sql和java的编码进行了分离,功能边界更清晰,一个专注业务,一个专注数据。
  • 全自动框架生成的sql不易进行优化。当bean字段很多时,无法做到只映射部分字段。

二、MyBatis环境搭建回顾

1.开发步骤

  1. 引入myBatis的maven坐标
  2. 创建数据库表
  3. 创建实体类
  4. 编写映射文件xxxMapper.xml
  5. 编写核心配置文件sqlMapConfig.xml

2.环境搭建

1.创建一个maven项目

并添加pom.xml文件


    
        UTF-8
        UTF-8
        1.8
        1.8
        1.8
    
    

        
            com.w
            mybatis_persistence
            1.0-SNAPSHOT
        
        
            junit
            junit
            4.12
        
    

2.创建数据库并添加数据

create table user
(
    id       int                    null,
    username varchar(20) default ''
);
insert into user (id,username) values (1,'zhangsan');
insert into user (id,username) values (2,'lisi');

3.创建实体类

package com.w.pojo;

public class User {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

4.编写UserMapper.xml


    
    

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

5.编写sqlMapConfig.xml


    
        
        
        
        
    
    
        
    

6.编写测试类

package com.w;

import com.w.dao.UserDao;
import com.w.pojo.User;
import com.w.session.SessionFactory;
import com.w.session.SessionFactoryBuilder;
import com.w.io.Resource;
import com.w.session.SqlSession;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class TestDemo {
    /**
     * getMapper方式查询delete
     */
    @Test
    public void testDelete() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(5);
        //inputUser.setName("tom5");
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.deleteUserById(inputUser);
    }
    /**
     * getMapper方式查询update
     */
    @Test
    public void testUpdate() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(5);
        inputUser.setName("tom5");
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.updateUser(inputUser);
    }
    /**
     * getMapper方式查询insert
     */
    @Test
    public void testInsertUserByMapper() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(5);
        inputUser.setName("tom");
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.insertUser(inputUser);
    }
    /**
     * getMapper方式查询select
     */
    @Test
    public void testSelectListBygetMapper() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(1);
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }

    }
    /**
     * getMapper方式查询selectOne
     */
    @Test
    public void testSelectOneBygetMapper() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(1);
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = userDao.findOne(inputUser);
        System.out.println(user);
    }

    /**
     * select方法
     */
    @Test
    public void testSelectById() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        User inputUser  = new User();
        inputUser.setId(1);
        User user = sqlSession.selectOne("com.w.dao.UserDao.findOne", inputUser);
        System.out.println(user);

    }
    /**
     * 测试获取SessionFactoryBuilder
     */
    @Test
    public void testSessionFactoryBuilder() throws Exception{
        SessionFactoryBuilder sessionFactoryBuilder = new SessionFactoryBuilder();
        SessionFactory build = sessionFactoryBuilder.build(Resource.getResourceAsStream("sqlMapConfig.xml"));
        SqlSession sqlSession = build.openSesssion();
        List users = sqlSession.selectList("com.w.dao.UserDao.findAll");
        for (User user : users) {
            System.out.println(user);
        }

    }

    /**
     * 测试获取输入流对象是否成功
     */
    @Test
    public void testGetResource(){
        InputStream resource = Resource.getResourceAsStream("sqlMapConfig.xml");
        System.out.println(resource);
    }

    /**
     * 第一个测试类。。。
     */
    @Test
    public void test1(){
        System.out.println("测试一下。。。");
    }

}

执行查询所有,即完成mybatis基本查询了。

你可能感兴趣的