MyBatis(一)
发布日期:2021-04-30 21:02:11 浏览次数:128 分类:精选文章

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

MyBatis ORM框架简介

MyBatis 是一个基于 ORM(对象关系映射)技术的数据访问层框架,旨在简化数据库操作,提高开发效率。它通过将数据库操作抽象为简洁的API,帮助开发者减少手动写作SQL语句的工作量,从而提升项目性能和可维护性。

框架的定义

框架是一种对现有的技术进行封装和抽象,目的是为了提升开发效率和项目性能。框架通常提供了一套完整的解决方案,涵盖了从数据接收到业务逻辑处理的全流程。在 Java 开发中,框架的应用可以帮助开发者快速构建复杂的应用系统。

在 Web 开发中,一个典型的项目可以分为三大层次:

  • 控制层(Web 层):负责接收用户请求并做数据的导航,常用的框架有 Servlet、Struts2 和 SpringMVC。
  • 业务层(Service 层):负责处理具体的业务逻辑和功能实现,常用的框架有 Spring。
  • 数据访问层(Data Access Layer,DAL):负责与数据库进行交互,常用的框架有 JDBC、Hibernate 和 MyBatis。
  • 在当前的 Java Web 开发中,SSM(SpringMVC + Spring + MyBatis)是最流行的三大框架之一。

    ORM(对象关系映射)的作用

    ORM 的全称是 Object-Relational Mapping,意为“对象与关系映射”。在 Java 开发中,我们通常使用关系型数据库来存储数据,而 Java 程序只能操作 Java 对象。因此,我们需要将 Java 对象映射到关系型数据库中的行和列。

    具体来说:

    • Java 类可以对应关系型数据库中的一个数据表。
    • Java 类中的成员变量(字段)对应数据库表中的列。
    • Java 对象可以对应数据库表中的一行记录。

    通过 ORM 技术,我们可以将复杂的数据库操作(如插入、更新、删除、查询等)封装到 MyBatis 的 API 中,从而简化数据库交互。

    MyBatis 的优点

  • 简化数据库操作:MyBatis 提供了简洁的 API,减少了手动编写 SQL 语句的工作量。
  • 提高开发效率:通过 ORM 的抽象,开发者可以专注于业务逻辑的实现,而不必深入处理数据库细节。
  • 提升项目性能:MyBatis 对数据库操作进行了优化,使得 SQL 执行效率更高。
  • 增强可维护性:通过抽象层,项目代码更加模块化,便于维护和扩展。
  • MyBatis 的核心思想是“将数据访问逻辑完全封装在 Java 类中”,通过配置文件和 XML 映射文件,开发者可以轻松实现数据库操作。

    MyBatis 的使用步骤

    1. 准备数据库表

    首先,需要创建一个关系型数据库表。以下是一个示例:

    create table t_person(    per_id int primary key auto_increment,    per_name varchar(20),    per_age int,    per_address varchar(30));

    2. 创建 Maven 工程

    打开你的开发环境,创建一个新的 Maven 项目。建议命名为 mybatis-test,选择 Java 作为语言,选择 Maven 来管理依赖。

    3. 添加 jar 依赖

    在项目的 pom.xml 文件中添加必要的依赖。以下是 MyBatis 和 MySQL 连接器的依赖配置:

    mysql
    mysql-connector-java
    5.1.38
    org.mybatis
    mybatis
    3.4.6

    4. 创建 JavaBean 类

    创建一个 JavaBean 类,用于与数据库表对应。以下是一个示例:

    package com.wangxing.mybatistest.bean;public class Person {    private int perId;    private String perName;    private int perAge;    private String perAddress;    // getter 和 setter 方法    public int getPerId() { return perId; }    public void setPerId(int perId) { this.perId = perId; }    public String getPerName() { return perName; }    public void setPerName(String perName) { this.perName = perName; }    public int getPerAge() { return perAge; }    public void setPerAge(int perAge) { this.perAge = perAge; }    public String getPerAddress() { return perAddress; }    public void setPerAddress(String perAddress) { this.perAddress = perAddress; }}

    5. 配置数据库连接

    在项目的 mydata.properties 文件中配置数据库连接信息:

    mydrivername=com.mysql.jdbc.Drivermyurl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8myusername=rootmypassword=123456

    6. 创建数据库访问接口

    PersonMapper 接口中定义数据库操作的方法。以下是一个示例:

    package com.wangxing.mybatistest.mapper;public interface PersonMapper {    boolean insertPerson(Person person);    boolean updatePerson(Person person);    boolean deletePersonById(int perId);    Person selectPersonById(int perId);    List
    selectPerson();}

    7. 创建 SQL 映射文件

    PersonMapper.xml 文件中定义 SQL 语句的映射关系。以下是一个示例:

    insert into t_person values(null, #{perName}, #{perAge}, #{perAddress});
    update t_person set per_name=#{perName}, per_age=#{perAge}, per_address=#{perAddress} where per_id=#{perId};
    delete from t_person where per_id=#{perId};

    8. 配置 MyBatis

    mybatis-config.xml 文件中配置 MyBatis 的环境和数据源信息。以下是一个示例:

    9. 编写测试类

    TestMain 类中实现数据库的 CRUD 操作。以下是一个示例:

    package com.wangxing.mybatistest.test;import java.io.IOException;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.wangxing.mybatistest.bean.Person;import com.wangxing.mybatistest.mapper.PersonMapper;public class TestMain {    public static void testInsert() {        SqlSession sqlSession = null;        try {            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));            sqlSession = sqlSessionFactory.openSession();            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);            Person person = new Person();            person.setPerName("zhangsan2");            person.setPerAge(23);            person.setPerAddress("西安");            boolean flag = personMapper.insertPerson(person);            if (flag) {                System.out.println("添加成功");            } else {                System.out.println("添加失败");            }            sqlSession.commit();        } catch (IOException e) {            e.printStackTrace();        } finally {            sqlSession.close();        }    }    public static void testUpdate() {        SqlSession sqlSession = null;        try {            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));            sqlSession = sqlSessionFactory.openSession();            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);            Person person = new Person();            person.setPerId(1);            person.setPerName("zhangsanfeng");            person.setPerAge(123);            person.setPerAddress("武当");            boolean flag = personMapper.updatePerson(person);            if (flag) {                System.out.println("修改成功");            } else {                System.out.println("修改失败");            }            sqlSession.commit();        } catch (IOException e) {            e.printStackTrace();        } finally {            sqlSession.close();        }    }    public static void testSelectById(int stuid) {        SqlSession sqlSession = null;        try {            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));            sqlSession = sqlSessionFactory.openSession();            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);            Person person = personMapper.selectPersonById(stuid);            if (person != null) {                System.out.println(person.getPerId() + "," + person.getPerName());            }            sqlSession.commit();        } catch (IOException e) {            e.printStackTrace();        } finally {            sqlSession.close();        }    }    public static void testSelect() {        SqlSession sqlSession = null;        try {            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));            sqlSession = sqlSessionFactory.openSession();            PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);            List
    personList = personMapper.selectPerson(); if (!personList.isEmpty()) { for (Person person : personList) { System.out.println(person.getPerId() + "," + person.getPerName()); } } sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } finally { sqlSession.close(); } } public static void testDelete(int id) { SqlSession sqlSession = null; try { SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); sqlSession = sqlSessionFactory.openSession(); PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class); boolean flag = personMapper.deletePersonById(id); if (flag) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } finally { sqlSession.close(); } } public static void main(String[] args) { testInsert(); testUpdate(); testSelectById(2); testSelect(); testDelete(1); }}

    通过以上步骤,你已经成功创建了一个使用 MyBatis ORM 框架进行数据库操作的 Java 程序。MyBatis 提供了简洁的 API,帮助开发者高效地与数据库交互,从而提升了开发效率和项目性能。

    上一篇:Java中的输入输出流3
    下一篇:SpringMVC(二)--注解开发

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2026年06月17日 18时21分55秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章