本文详细介绍了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的核心概念包括以下几个部分:
- SqlSessionFactory:通过SqlSessionFactory可以获取SqlSession,它是执行数据库操作的接口。
- SqlSession:SqlSession是Mybatis工作的核心接口,它提供了多种数据库操作方法,如增删改查等。
- Mapper:Mapper接口定义了数据库操作的接口方法,通过XML配置文件或注解实现。
- Configuration:Configuration对象是Mybatis的配置文件的映射,它包含了数据库连接、事务管理器、映射器等信息。
- Executor:Executor是Mybatis的执行器,它负责根据SqlSession的配置信息执行SQL语句。
- ParameterHandler:处理传入的参数,将参数封装成PreparedStatement需要的参数。
- 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的开发环境。步骤如下:
- 下载Mybatis:从官方网站下载最新版本的Mybatis,或者通过Maven或Gradle等构建工具自动下载依赖。
- 搭建开发环境:创建一个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应用程序,进行数据库的增删改查操作。步骤如下:
- 创建数据库表:创建一个简单的表,例如一个用户表,包含id、name和age字段。
- 编写Mapper接口:定义数据库操作的接口方法。
- 编写XML映射文件:配置SQL语句和结果映射。
- 编写Mybatis配置文件:配置数据库连接信息。
- 编写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配置文件的主要内容:
- databaseConnection:定义数据库连接信息。
- javaModelGenerator:定义Java模型文件的生成规则。
- javaClientGenerator:定义Mapper接口的生成规则。
- table:定义表的生成规则。
如何下载和配置Mybatis Generator
要使用Mybatis Generator,首先需要下载并配置Mybatis Generator的开发环境。步骤如下:
- 下载Mybatis Generator:从官方网站下载最新版本的Mybatis Generator,或者通过Maven或Gradle等构建工具自动下载依赖。
- 引入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支持多种配置参数,下面是一些常用的参数:
- targetPackage:生成代码的目标包。
- targetProject:生成代码的目标项目。
- enableCountByExample:是否生成countByExample方法。
- enableUpdateByExample:是否生成updateByExample方法。
- enableDeleteByExample:是否生成deleteByExample方法。
- enableSelectByExample:是否生成selectByExample方法。
- tableName:数据库表名。
- 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生成代码的步骤如下:
- 编写配置文件:编写Mybatis Generator的配置文件,定义生成代码的规则。
- 运行生成器:使用Java代码或命令行工具运行Mybatis Generator,生成相应的代码。
- 查看生成的代码:查看生成的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>
使用生成的代码进行数据库操作
使用生成的代码进行数据库操作的步骤如下:
- 初始化SqlSessionFactory:创建SqlSessionFactory对象。
- 获取SqlSession:通过SqlSessionFactory对象获取SqlSession对象。
- 获取Mapper接口:通过SqlSession对象获取Mapper接口对象。
- 执行数据库操作:使用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();
}
}
常见问题及解答
解决生成器使用中的常见问题
- 配置文件错误:确认配置文件中的数据库连接信息和生成代码的目标包是否正确。
- 生成代码失败:检查数据库表结构是否正确,生成器配置文件是否符合规范。
- 代码生成后无法编译:检查生成的代码是否符合项目编码规则,是否需要修改生成器配置文件。
示例:解决配置文件错误
<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支持多种高级配置,例如:
- 自定义模板:使用自定义模板生成代码,可以更灵活地控制生成的代码格式。
- 生成主键策略:自定义主键生成策略,例如使用UUID生成主键。
- 生成注释:为生成的代码添加注释,提高代码的可读性。
- 生成关联表的代码:为关联表生成相应的代码,简化数据库操作。
示例:自定义模板生成代码
<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>
``
共同学习,写下你的评论
评论加载中...
作者其他优质文章