5分钟学会-最简单的MyBatis使用方法

本文介绍了如何使用MyBatis框架进行数据库操作,包括环境搭建、配置文件编写、SQL映射及注解方式的使用。
MyBatis 本是 apache的一个开源项目 iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的 持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
使用之前先下好jar包
--mybatis-3.3.0.jar
导入到eclipse的项目中

新建一个xml文件用于配置 MyBatis:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1/double?useServerPrepStmts=false&rewriteBatchedStatements=true" />
                <property name="username" value="root" />
                <property name="password" value="123" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 注册NumberMapper.xml文件, NumberMapper.xml位于mapper这个包下,所以resource写成mapper/NumberMapper.xml-->
        <mapper resource="mapper/NumberMapper.xml"/>
    </mappers>
    
</configuration>

建立对于的mapping文档
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 
	例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀) -->
<mapper namespace="inter.INumberOperation">
	


	<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 
		resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 -->
	<!-- sql语句可以写到xml里也可以用注解的形式写到相应的接口里 -->
	<insert id="addToReal" parameterType="obj.Number"> insert into
		coculatenumber_real(id, r1,r2,r3,r4,r5,r6,b1) values(#{id}, #{r1},
		#{r2},
		#{r3}, #{r4}, #{r5}, #{r6}, #{b1})
	</insert>
</mapper> 


然后再建立一个接口:
sql语句全写接口里
package inter;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import obj.Number;

public interface INumberOperation {


	void addToReal(Number num);
	
	@Select("select * from coculatenumber_real")
	ArrayList<Number> getAllFormHis();
	
	@Select("select * from coculatenumber_2000w_index where id = #{id}")
	Number getNumber(int id);

	@Select("select * from coculatenumber_2000w_index where  r1 = #{r1} and r2=#{r2} and r3=#{r3} and r4=#{r4} and r5=#{r5} and r6=#{r6} and b1=#{b1}")
	ArrayList<Number> countTimes(Number number);
	
	@Insert("insert into coculatenumber_count(id, r1,r2,r3,r4,r5,r6,b1,info) values(#{id}, #{r1}, #{r2}, #{r3}, #{r4}, #{r5}, #{r6}, #{b1},#{info})")
	void addcount(Number number);
	
	@Insert("insert into coculatenumber_all(id, r1,r2,r3,r4,r5,r6,b1) values(#{id}, #{r1}, #{r2}, #{r3}, #{r4}, #{r5}, #{r6}, #{b1})")
	void addToAll(Number number);
	
	@Select("select * from coculatenumber_all where id >= #{min} and id <= #{max}")
        getDataByID(@Param("min")int min, @Param("max")int max);//普通参数需要加@Param("xxx")来标示,否则会找不到参数


}

最后就直接调用接口的方法,最后记得提交就行了:
      
                ArrayList<Number> his=new ArrayList<Number>();
		String resource = "mybatis_config.xml";
		Reader reader = Resources.getResourceAsReader(resource);
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		
		INumberOperation numberOperation = session.getMapper(INumberOperation.class);
		his=numberOperation.getAllFormHis();
                session.commit();//更新语句需要提交
        



<think> 首先,用户的问题是:“我想获取MyBatis-Flex的使用教程 请问MyBatis-Flex使用教程”。这表明用户想要一个关于如何使用MyBatis-Flex的教程。 根据系统级指令: - 我必须使用中文回答。 - 回答结构要清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 在引用的段落末尾自然地添加引用标识,例如[^1]。 - 生成相关问题。 - 所有行内数学表达式用$...$,独立公式用$$...$$(但在这个上下文中,可能不需要数学表达式)。 - LaTeX语法正确(但这里可能不涉及复杂数学)。 - 生成相关问题在最后。 用户提供了多个引用: - 引用[1]: 介绍MyBatis-Flex,环境准备。 - 引用[2]: 快速开始Mybatis-flex,环境准备。 - 引用[3]: Mybatis-Flex快速入门教程,提到QueryWrapper。 - 引用[4]: MyBatis-Flex(一):快速开始,配置APT细节。 - 引用[5]: 性能对比,显示MyBatis-Flex性能更好。 用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我不应该直接复制这些引用,而是基于它们提供有用的信息。用户真正需求是使用教程。 我的回答应该结构化: 1. **介绍**:简要介绍MyBatis-Flex。 2. **环境准备**:如何设置环境。 3. **核心功能**:展示基本使用,如配置、查询等。 4. **示例**:提供一个简单的代码示例。 5. **结论**:总结好处。 6. **相关问题**:生成相关问题。 确保引用自然:在引用具体信息时添加引用标识,例如[^1]。 步骤: - 从引用中提取关键点: - 环境准备:需要Java项目,可能添加依赖(如Maven或Gradle)。 - 快速开始:配置、使用QueryWrapper等。 - 性能优势:引用[5]提到性能对比。 - 提供一个简单的教程步骤。 结构化回答: 1. **引言**:介绍MyBatis-Flex。 2. **环境准备**: - 创建Java项目。 - 添加依赖(参考引用[4],提到APT配置)。 3. **配置**:如何配置MyBatis-Flex。 4. **基本使用**:创建实体、Mapper、Service,使用QueryWrapper查询。 5. **代码示例**:展示一个完整的简单示例。 6. **性能提示**:简要提到性能优势。 7. **结论**:鼓励使用。 8. **相关问题**:生成相关问题。 生成相关问题:基于教程内容,如优化、高级特性等。 回答语言:中文。 最终输出: - 回答部分。 - §§相关问题§§部分。 </think> ### MyBatis-Flex 使用教程 MyBatis-Flex 是一个强大的 MyBatis 增强框架,专为简化数据库操作而设计。它轻量级、高性能,并提供了灵活的查询功能(如 QueryWrapper),能显著减少 SQL 编写工作并降低错误率[^3]。以下是一个结构化的快速入门教程,基于实际开发实践。教程假设您已具备 Java 和 Maven/Gradle 基础。 --- #### 1. **环境准备** 首先,确保您的开发环境满足要求: - JDK 8 或更高版本。 - Maven 或 Gradle 构建工具(推荐 Maven)。 - 数据库(如 MySQL、PostgreSQL),并确保已创建测试数据库。 在 Maven 项目中,添加 MyBatis-Flex 依赖到 `pom.xml`: ```xml <dependencies> <!-- MyBatis-Flex 核心依赖 --> <dependency> <groupId>com.mybatis-flex</groupId> <artifactId>mybatis-flex-core</artifactId> <version>1.7.0</version> <!--使用最新版本 --> </dependency> <!-- 数据库驱动,以 MySQL 为例 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies> ``` 同时,配置 APT(Annotation Processing Tool)以自动生成 Mapper 和实体类。在项目根目录创建 `mybatis-flex.config` 文件,内容如下: ``` # 开启 Mapper 自动生成 processor.mapper.generateEnable = true # 开启 @Mapper 注解支持 processor.mapper.annotation = true ``` 这能减少手动编码工作量[^4]。 --- #### 2. **基本配置** 配置 MyBatis-Flex 的数据源和核心设置。创建 `application.yml`(或 `application.properties`)文件: ```yaml mybatis-flex: datasource: url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC username: root password: your_password configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启 SQL 日志 ``` 在 Spring Boot 项目中,添加 `@MapperScan` 注解到主类: ```java @SpringBootApplication @MapperScan("com.example.mapper") // 替换为您的 Mapper 包路径 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- #### 3. **核心功能使用** MyBatis-Flex 的核心是 QueryWrapper,它支持链式调用,无需编写 SQL。以下是步骤: - **步骤 1: 定义实体类** 创建与数据库表对应的实体类,使用 `@Table` 注解: ```java @Table("user") // 表名 public class User { @Id(keyType = KeyType.Auto) // 主键自增 private Long id; private String name; private Integer age; // Getter/Setter 省略(可用 Lombok) } ``` - **步骤 2: 创建 Mapper 接口** 继承 `BaseMapper`,无需实现方法: ```java public interface UserMapper extends BaseMapper<User> {} ``` - **步骤 3: 使用 QueryWrapper 查询** 在 Service 层执行操作。示例:查询年龄大于 18 的用户: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findAdultUsers() { QueryWrapper query = QueryWrapper.create() .select() // 选择所有字段 .from(User.class) .where(User::getAge).ge(18); // 条件:age >= 18 return userMapper.selectListByQuery(query); } } ``` 这比原生 SQL 更简洁,且能避免 SQL 注入[^3]。 --- #### 4. **完整示例:增删改查** 以下是一个简单的 CRUD 示例: ```java // 在 Controller 或 Service 中 public void demo() { // 插入数据 User newUser = new User(); newUser.setName("Alice"); newUser.setAge(25); userMapper.insert(newUser); // 查询单条数据 User user = userMapper.selectOneById(1L); // 更新数据 user.setAge(30); userMapper.update(user); // 删除数据 userMapper.deleteById(1L); } ``` 性能提示:MyBatis-Flex 在单条查询、分页查询和数据更新上比 MyBatis-Plus 快 5~10 倍,适合高并发场景[^5]。 --- #### 5. **总结** 通过本教程,您已学会如何快速部署 MyBatis-Flex、配置 APT、使用 QueryWrapper 执行数据库操作。关键优点包括: - **灵活性**:无需手写 SQL,支持动态查询。 - **高性能**:优化后的执行效率极高。 - **易用性**:APT 自动生成代码,减少开发时间。 建议参考[官方文档](https://mybatis-flex.com/)深入学习高级特性,如分页插件和事务管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值