为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis官方生成器教程:新手入门指南

标签:
Java SSM 数据库
概述

本文详细介绍了Mybatis官方生成器教程,帮助新手快速入门。通过Mybatis Generator,可以自动生成Mybatis所需的POJO类、Mapper接口和XML映射文件,简化开发过程。文章涵盖了下载和配置环境、配置生成器的XML文件、生成代码实例以及常见问题解答。Mybatis官方生成器教程将引导你高效地使用Mybatis Generator进行数据库操作。

Mybatis官方生成器教程:新手入门指南
Mybatis概述

Mybatis简介

Mybatis是一个优秀的持久层框架,它支持定制化SQL查询,存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

Mybatis的核心概念

Mybatis的核心概念包括以下几个部分:

  1. SqlSessionFactory:通过SqlSessionFactory可以获取SqlSession,它是执行数据库操作的接口。
  2. SqlSession:SqlSession是Mybatis工作的核心接口,它提供了多种数据库操作方法,如增删改查等。
  3. Mapper:Mapper接口定义了数据库操作的接口方法,通过XML配置文件或注解实现。
  4. Configuration:Configuration对象是Mybatis的配置文件的映射,它包含了数据库连接、事务管理器、映射器等信息。
  5. Executor:Executor是Mybatis的执行器,它负责根据SqlSession的配置信息执行SQL语句。
  6. ParameterHandler:处理传入的参数,将参数封装成PreparedStatement需要的参数。
  7. ResultSetHandler:处理数据库查询的结果,将返回的数据封装成Java对象。

Mybatis的持久化模型

Mybatis的核心对象是SqlSessionFactory,它负责创建SqlSession,SqlSession用于执行数据库操作。SqlSession可以通过Configuration对象配置,Configuration对象包含了数据库连接、事务管理器、映射器等信息。Mapper接口定义了数据库操作的接口方法,通过XML配置文件或注解实现。

代码示例

创建SqlSessionFactory对象

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));

获取SqlSession对象

SqlSession sqlSession = factory.openSession();

获取Mapper接口对象

UserMapper mapper = sqlSession.getMapper(UserMapper.class);
安装配置Mybatis环境

下载Mybatis并配置开发环境

首先,需要下载并配置Mybatis的开发环境。步骤如下:

  1. 下载Mybatis:从官方网站下载最新版本的Mybatis,或者通过Maven或Gradle等构建工具自动下载依赖。
  2. 搭建开发环境:创建一个Java项目,并在项目中引入Mybatis相关的依赖。

示例:在Maven项目的pom.xml文件中添加Mybatis依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
</dependencies>

创建第一个Mybatis应用程序

接下来,创建一个简单的Mybatis应用程序,进行数据库的增删改查操作。步骤如下:

  1. 创建数据库表:创建一个简单的表,例如一个用户表,包含id、name和age字段。
  2. 编写Mapper接口:定义数据库操作的接口方法。
  3. 编写XML映射文件:配置SQL语句和结果映射。
  4. 编写Mybatis配置文件:配置数据库连接信息。
  5. 编写Java代码操作数据库:使用SqlSession执行数据库操作。

示例:创建数据库表和Mapper接口

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`)
);

Mapper接口定义:

public interface UserMapper {
    void insertUser(User user);
    User getUserById(int id);
    List<User> getAllUsers();
    void updateUser(User user);
    void deleteUser(int id);
}

XML映射文件配置:

<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insertUser">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>
    <select id="getUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id=#{id}
    </select>
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM user
    </select>
    <update id="updateUser">
        UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
    </update>
    <delete id="deleteUser">
        DELETE FROM user WHERE id=#{id}
    </delete>
</mapper>

Mybatis配置文件:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Java代码操作数据库:

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setName("John");
        user.setAge(30);
        userMapper.insertUser(user);
        sqlSession.commit();
        sqlSession.close();
    }
}

数据库操作示例

插入用户

public class InsertUserExample {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setName("Alice");
        user.setAge(25);
        userMapper.insertUser(user);
        sqlSession.commit();
        sqlSession.close();
    }
}

查询用户

public class SelectUserExample {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUserById(1);
        System.out.println(user.getName());
        sqlSession.close();
    }
}

更新用户

public class UpdateUserExample {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setId(1);
        user.setName("Bob");
        user.setAge(35);
        userMapper.updateUser(user);
        sqlSession.commit();
        sqlSession.close();
    }
}

删除用户

public class DeleteUserExample {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteUser(1);
        sqlSession.commit();
        sqlSession.close();
    }
}
Mybatis生成器的介绍

Mybatis生成器的作用

Mybatis Generator(MBG)是一个代码生成器,它可以自动生成Mybatis所需的POJO类、Mapper接口和XML映射文件。这使得开发者可以快速地为数据库表生成相应的代码,简化开发过程,提高开发效率。

Mybatis生成器的基本概念

Mybatis Generator通过配置文件来定义生成代码的规则。配置文件包括数据库连接信息、生成代码的模板、生成的代码存放位置等。下面是Mybatis Generator配置文件的主要内容:

  1. databaseConnection:定义数据库连接信息。
  2. javaModelGenerator:定义Java模型文件的生成规则。
  3. javaClientGenerator:定义Mapper接口的生成规则。
  4. table:定义表的生成规则。
使用Mybatis官方生成器

如何下载和配置Mybatis Generator

要使用Mybatis Generator,首先需要下载并配置Mybatis Generator的开发环境。步骤如下:

  1. 下载Mybatis Generator:从官方网站下载最新版本的Mybatis Generator,或者通过Maven或Gradle等构建工具自动下载依赖。
  2. 引入Mybatis Generator依赖:在项目的pom.xml文件中添加Mybatis Generator的依赖。

示例:添加Mybatis Generator依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

配置生成器的XML文件

Mybatis Generator的配置文件用于定义生成代码的规则。配置文件是一个XML文件,包含数据库连接信息、生成代码的模板、生成的代码存放位置等。下面是配置文件的基本结构:

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverType="MYSQL">
            <connectionConfiguration driverClass="com.mysql.jdbc.Driver"
                                    connectionURL="jdbc:mysql://localhost:3306/test"
                                    userId="root"
                                    password="password"/>
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

生成器的常用参数和配置

Mybatis Generator支持多种配置参数,下面是一些常用的参数:

  1. targetPackage:生成代码的目标包。
  2. targetProject:生成代码的目标项目。
  3. enableCountByExample:是否生成countByExample方法。
  4. enableUpdateByExample:是否生成updateByExample方法。
  5. enableDeleteByExample:是否生成deleteByExample方法。
  6. enableSelectByExample:是否生成selectByExample方法。
  7. tableName:数据库表名。
  8. domainObjectName:生成的Java类名。

示例:自定义生成器配置文件

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverType="MYSQL">
            <connectionConfiguration driverClass="com.mysql.jdbc.Driver"
                                    connectionURL="jdbc:mysql://localhost:3306/test"
                                    userId="root"
                                    password="password"/>
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>
Mybatis生成器生成代码实例

生成POJO类、Mapper接口和XML映射文件

使用Mybatis Generator生成代码的步骤如下:

  1. 编写配置文件:编写Mybatis Generator的配置文件,定义生成代码的规则。
  2. 运行生成器:使用Java代码或命令行工具运行Mybatis Generator,生成相应的代码。
  3. 查看生成的代码:查看生成的POJO类、Mapper接口和XML映射文件。

示例:编写Mybatis Generator配置文件

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverType="MYSQL">
            <connectionConfiguration driverClass="com.mysql.jdbc.Driver"
                                    connectionURL="jdbc:mysql://localhost:3306/test"
                                    userId="root"
                                    password="password"/>
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

运行生成器:

public class MybatisGeneratorDemo {
    public static void main(String[] args) throws Exception {
        MyBatisGenerator generator = new MyBatisGenerator(ConfigParser.parse(new File("generatorConfig.xml")));
        generator.execute();
    }
}

生成的代码:

POJO类

public class User {
    private int id;
    private String name;
    private int age;
    // getters and setters
}

Mapper接口

public interface UserMapper {
    void insertUser(User user);
    User getUserById(int id);
    List<User> getAllUsers();
    void updateUser(User user);
    void deleteUser(int id);
}

XML映射文件

<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insertUser">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>
    <select id="getUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id=#{id}
    </select>
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM user
    </select>
    <update id="updateUser">
        UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
    </update>
    <delete id="deleteUser">
        DELETE FROM user WHERE id=#{id}
    </delete>
</mapper>

使用生成的代码进行数据库操作

使用生成的代码进行数据库操作的步骤如下:

  1. 初始化SqlSessionFactory:创建SqlSessionFactory对象。
  2. 获取SqlSession:通过SqlSessionFactory对象获取SqlSession对象。
  3. 获取Mapper接口:通过SqlSession对象获取Mapper接口对象。
  4. 执行数据库操作:使用Mapper接口对象执行数据库操作。

示例:使用生成的代码进行数据库操作

public class MybatisGeneratorUsage {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setName("John");
        user.setAge(30);
        userMapper.insertUser(user);
        sqlSession.commit();
        sqlSession.close();
    }
}
常见问题及解答

解决生成器使用中的常见问题

  1. 配置文件错误:确认配置文件中的数据库连接信息和生成代码的目标包是否正确。
  2. 生成代码失败:检查数据库表结构是否正确,生成器配置文件是否符合规范。
  3. 代码生成后无法编译:检查生成的代码是否符合项目编码规则,是否需要修改生成器配置文件。

示例:解决配置文件错误

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverType="MYSQL">
            <connectionConfiguration driverClass="com.mysql.jdbc.Driver"
                                    connectionURL="jdbc:mysql://localhost:3306/test"
                                    userId="root"
                                    password="password"/>
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

Mybatis Generator的高级配置与技巧

Mybatis Generator支持多种高级配置,例如:

  1. 自定义模板:使用自定义模板生成代码,可以更灵活地控制生成的代码格式。
  2. 生成主键策略:自定义主键生成策略,例如使用UUID生成主键。
  3. 生成注释:为生成的代码添加注释,提高代码的可读性。
  4. 生成关联表的代码:为关联表生成相应的代码,简化数据库操作。

示例:自定义模板生成代码


<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <jdbcConnection driverType="MYSQL">
            <connectionConfiguration driverClass="com.mysql.jdbc.Driver"
                                    connectionURL="jdbc:mysql://localhost:3306/test"
                                    userId="root"
                                    password="password"/>
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>
``
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消