栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis-1-第一个程序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis-1-第一个程序

MyBatis -> 1. 第一个MyBatis程序 1.0 准备工作

知识点:

  1. 简介
  2. CRUD
  3. 配置文件
  4. 结果集映射
  5. 分页
  6. 使用注解开发
  7. 一对多 多对一处理
  8. 动态SQL——重点
  9. 缓存——查询效率!极其重要

环境:

  • JDK1.8
  • MySQL 5.7
  • Maven 3.8.1
  • IDEA

回顾知识点:

  • JDBC
  • MySQL基础
  • Java基础
  • Maven
  • Junit
1.1 什么是MyBatis

  • MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程以及高级映射;

  • 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程;

  • 可以使用简单的XML或注解来配置和映射原生信息,将接口和Java实体类 POJO(Plain Old Java Objects,普通老式Java对象)映射成数据库中的记录;

  • MyBatis本是apache的一个开源项目iBatis,2010年迁移到google code,改名为MyBatis;

  • 2013年11月迁移到Github;

  • 官方文档:https://mybatis.org/mybatis-3/zh/index.html

  • Github:https://github.com/mybatis/mybatis-3/releases

  • maven仓库:

    
        org.mybatis
        mybatis
        3.5.7
    
    
1.2 为什么需要MyBatis 12.1 持久化和持久层
  • 持久化是将程序数据在持久状态和瞬间状态间转换的机制。

    • 把数据(如内存中的对象)保存在可永久保存的存储设备中,如磁盘。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等;
    • 内存:断电即失;内存太贵了。有一些对象不能丢失,因此需要持久化;
    • JDBC就是一种持久化机制,文件IO也是一种持久化机制。
  • 持久层:完成持久化工作的代码块。

    • 完成持久化工作的代码块,即dao层(DAO,Data Access Object, 数据访问对象);
    • 大多数情况下,特别是企业级应用,数据持久化往往就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系型数据库来完成;
    • 对于应用系统而言,数据持久功能大多是必不可少的部分。也就是说,系统中,已经天然的具备了”持久层”概念,也许是,但也行实际情况并非如此。之所以要独立出一个“持久层”的概念,而不是持久模块、持久单元等待,就意味着,系统框架中,应该又一个相对独立的逻辑层面,专注于数据持久化逻辑的实现;
    • 与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界,即就是用来操作数据库而存在的。
12.2 为什么需要MyBatis
  • MyBatis就是帮助开发人员将数据存入数据库中、以及从数据库中取数据;
  • 传统的JDBC操作,有很多重复代码块,比如:数据取出时的封装、数据库的建立连接等等,通过MyBatis框架可以减少重复代码,提高开发效率;
  • MyBatis是一个半自动化的ORM框架,即Object Relationship Mapping,对象关系映射;
  • 所有的事情,不用MyBatis依旧可以实现,只是用了它,所有实现会更加简单;
  • MyBatis的优点:
    • 简单易学。没有任何第三方依赖,最简单安装只需两个jar+配置几个sql映射文件就可以了;
    • 灵活。MyBatis不会对应用程序或者数据库的现有设计强加任何影响,sql写在xml里,便于统一管理类和优化,通过sql语句可以满足操作数据库的所有需求;
    • 解除sql与程序代码的耦合。通过提供DAO层,将业务逻辑和数据访问逻辑分离,使得系统的设计更清晰,更易维护,更易单元测试,提高了可维护性;
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组件维护;
    • 提供xml标签,支持编写动态sql;
    • 使用的人多!
12.3 MyBatis第一个程序

思路:搭建环境 --> 导入Mybatis --> 编写代码 --> 测试!

12.3.1 搭建环境
  1. 创建一个数据库

    CREATE DATAbase `mybatis`;
    
    USE `mybatis`;
    
    DROp TABLE IF EXISTS `user`;
    
    CREATE TABLE `user` (
    `id` INT(20) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `pwd` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'ano','123456'),(2,'top','abcdef'),(3,'trouble','987654');
    
  2. 新建一个普通maven工程,删除src,这样就可以把此工程当做父工程了,并创建子工程;

  3. 导入maven依赖如下:

    
    
        org.mybatis
        mybatis
        3.5.7
    
    
    
    
        mysql
        mysql-connector-java
        5.1.47
    
    
    
        junit
        junit
        4.12
        test
    
    
12.3.2 创建一个Module
  1. 编写MyBatis核心配置文件

    resources/mybatis-config.xml

    
    
    
    
        
            
                
                
                    
                    
                    
                    
                
            
        
        
        
            
        
    
    
    
  2. 编写MyBatis工具类

    MybatisUtils.java

    public class MybatisUtils {
        private static SqlSessionFactory sqlSessionFactory;
        
        static {
            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        
        public static SqlSession getSqlSession() {
            return sqlSessionFactory.openSession();
        }   
    }
    
12.3.3 编写代码
  1. 实体类

    pojo/User.java

    public class User {
        private int id;
        private String name;
        private String pwd;
    
        public User() {
        }
    
        public User(int id, String name, String pwd) {
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }
    
  2. Dao接口–>Mapper

    UserMapper.java

    public interface UserMapper {
        
        List getUserList();
    }
    
    
  3. 接口实现类

    由原来的UserDaoImpl.java转换为一个Mapper配置文件,注意这里第一行中encoding = “UTF8”。

    UserMapper.xml

    
    
    
    
        
        
    
    
12.4 测试 12.4.1 测试代码
  • 使用junit测试

    public class UserMapperTest {
        @Test
        public void testGetUserList() {
            //第1步:获取SqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            //第2步:执行sql
            //method1:
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List userList = mapper.getUserList();
    
            //method2:
            //List userList = sqlSession.selectList("com.ano.dao.UserMapper.getUserList");
    
            for (User user : userList) {
                System.out.println(user);
            }
            //第3步:关闭sqlSession
            sqlSession.close();
        }
    }
    
  • 测试结果:

12.4.2可能遇到的问题
  • 报错1:

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

    原因:mybatis核心配置文件中没有配置此mapper.xml

    解决:每一个Mapper.xml都需要在mybatis核心配置文件mybatis-config.xml中注册!

    
        
    
    
  • 报错2:

    原因:maven资源导出的问题。

    解决:在pom.xml中的build下,配置resources节点,以防止资源导出失败的问题

    
        
            
                src/main/resources
                
                    ***.xml
                
            
            
                src/main/java
                
                    ***.xml
                
                true
            
        
    
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号