博客
关于我
Mybatis学习(1)
阅读量:795 次
发布时间:2023-02-09

本文共 5660 字,大约阅读时间需要 18 分钟。

MyBatis入门程序详解

一、原生态JDBC程序存在的问题

传统的JDBC程序在处理数据库事务时,需要手动管理连接和事务,这种方式容易出现以下问题:

  • 资源管理不便:需要手动获取和释放数据库连接,容易出现资源泄漏
  • 事务控制复杂:事务管理需要手动开始和 rollback,逻辑较为复杂
  • 代码冗余:需要重复编写连接和事务管理代码,增加开发难度
  • 二、MyBatis框架概述

    MyBatis是一种基于SQL映射的持久化框架,它的核心思想是通过XML或注解文件定义数据库操作,简化了 JDBC程序的开发流程。其主要优势包括:

  • 简化数据库操作:通过配置文件定义SQL语句,减少代码冗余
  • 支持事务管理:通过配置文件定义事务管理策略,简化事务处理
  • 缓存机制:提供多种缓存策略,提升数据库性能
  • 支持多种数据库:兼容多种数据库类型,如MySQL、Oracle等
  • 三、入门程序开发

    本节将通过一个简单的用户信息管理系统,完成以下功能:

  • 根据用户ID查询用户信息
  • 根据用户名模糊查询用户信息
  • 添加用户
  • 根据ID删除用户
  • 根据ID更新用户

  • 1. 环境搭建

    1.1 MyBatis下载与导入

    MyBatis框架可以通过以下方式获取:

    下载完成后,将MyBatis相关JAR包添加到项目中。常用的依赖包包括:

    • mybatis-spring:用于整合MyBatis和Spring
    • mybatis-annotation:用于注解风格开发
    • mybatis-dynamic-sql:用于动态SQL语句

    1.2 工程结构

    项目目录结构应如下:

    项目根目录
    ├── src
    │ ├── main
    │ │ ├── java
    │ │ │ └── com
    │ │ │ └── cy
    │ │ │ └── po
    │ │ │ └── User.java
    │ │ └── resources
    │ │ ├── config
    │ │ │ ├── log4j.properties
    │ │ │ ├── db.properties
    │ │ │ └── SqlMapConfig.xml
    │ │ └── sqlmap
    │ │ └── User.xml
    ├── test
    │ └── java
    │ └── com
    │ └── cy
    │ └── first
    │ └── MybatisFirst.java

    2. 配置文件说明

    2.1 db.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=root

    2.2 SqlMapConfig.xml


    3. POJO类开发

    package com.cy.po;
    public class User {
    private int id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;
    // setter和getter方法省略...
    }

    4. SQL映射文件

    SELECT LAST_INSERT_ID()
    INSERT INTO user(username, birthday, sex, address) VALUES(#{username}, #{birthday}, #{sex}, #{address})
    DELETE FROM user WHERE id=#{id}
    UPDATE user SET username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address} WHERE id=#{id}

    5. 测试代码

    package com.cy.first;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.junit.Test;
    import com.cy.po.User;
    public class MybatisFirst {
    @Test
    public void findUserByIdTest() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    User user = sqlSession.selectOne("test.findUserById", 1);
    System.out.println(user);
    sqlSession.close();
    }
    @Test
    public void findUserByNameTest() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    List
    userList = sqlSession.selectList("test.findUserByName", "小明");
    System.out.println(userList);
    sqlSession.close();
    }
    @Test
    public void insertUserTest() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    User user = new User();
    user.setUsername("王小军");
    user.setBirthday(new Date());
    user.setSex("1");
    user.setAddress("河南郑州");
    sqlSession.insert("test.insertUser", user);
    sqlSession.commit();
    System.out.println("用户ID: " + user.getId());
    sqlSession.close();
    }
    @Test
    public void deleteUserTest() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    sqlSession.delete("test.deleteUser", 29);
    sqlSession.commit();
    sqlSession.close();
    }
    @Test
    public void updateUserTest() throws IOException {
    String resource = "SqlMapConfig.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    User user = new User();
    user.setId(28);
    user.setUsername("王大军");
    user.setBirthday(new Date());
    user.setSex("2");
    user.setAddress("河南郑州");
    sqlSession.update("test.updateUser", user);
    sqlSession.commit();
    sqlSession.close();
    }
    }

    6. 注意事项

  • SQL语句格式:在MyBatis的映射文件中,INSERTSELECT等语句不需要分号结尾
  • 事务管理:默认使用 JDBC 事务管理,开发者无需手动管理事务
  • 缓存机制:可以通过配置文件设置缓存策略,提升数据库性能
  • 通过以上步骤,可以完成一个基本的MyBatis入门程序开发,熟悉其框架特点和使用方法后,可以进一步探索更复杂的功能,如缓存、动态SQL、事务管理等。

    转载地址:http://ruffk.baihongyu.com/

    你可能感兴趣的文章
    Markdown —— 背景色
    查看>>
    markdown写chm说明书
    查看>>
    markdown的语法-ChatGPT4o作答
    查看>>
    Markdown的语法,Typora 快捷键
    查看>>
    markdown简介-ChatGPT4o作答
    查看>>
    Markdown编辑快捷键
    查看>>
    MarkDown,写出个性、漂亮的文档
    查看>>
    MarkovKeyboard 项目教程
    查看>>
    Marshal类的使用
    查看>>
    Mask R-CNN
    查看>>
    MaskFormer
    查看>>
    MASM中可以定义的变量类型
    查看>>
    MasterPage(母板页)的不一般用法
    查看>>
    MatchingFrontier包简介及R实现
    查看>>
    MateBook16重装攻略
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    materialTabControl1_SelectedIndexChanged的使用
    查看>>
    Math.Atan2的基本讲解(C#版本)
    查看>>
    Math.round(),Math.ceil(),Math.floor()的区别
    查看>>
    mathlab中deepDreamImage的参数PyramidLevels的作用
    查看>>