MyBatis(也称为iBatis)是一个Java持久性框架,用于简化数据库访问操作,特别是与关系数据库的交互。它提供了一种将SQL语句与Java代码分离的方式,允许你在XML文件中编写SQL语句,并使用Java对象来映射数据库表。
MyBatis的主要特点:
- SQL和Java代码分离:MyBatis允许你将SQL语句与Java代码分开,这使得维护和调试SQL变得更加容易。
- 强大的参数映射:MyBatis支持各种参数映射,包括基本数据类型、复杂对象、集合等。
- 自动映射:MyBatis可以将查询结果自动映射到Java对象,减少了手动的数据转换。
- 动态SQL:MyBatis支持动态SQL,你可以在XML文件中构建有条件的SQL查询,根据不同的条件动态生成SQL语句。
- 可插拔的映射器接口:MyBatis的映射器(Mapper)接口是可插拔的,这意味着你可以为每个数据库表创建一个映射器接口,然后将它们与SQL语句相关联。
- 批处理支持:MyBatis支持批处理操作,允许你一次执行多个SQL语句,提高了性能。
使用MyBatis的基本步骤:
- 引入MyBatis依赖:首先,在你的项目中引入MyBatis的相关依赖,通常是在项目构建工具(如Maven或Gradle)中配置。
- 配置MyBatis:创建一个MyBatis配置文件(通常是XML格式),配置数据源信息、事务管理器、以及映射器(Mapper)文件的路径。
示例MyBatis配置文件(mybatis-config.xml):
<?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://localhost:3306/mydatabase"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mappers/MyMapper.xml"/> </mappers> </configuration>
- 创建一个普通的Java类,通常用于表示数据库表中的数据:这个类应该包含与数据库表字段对应的属性,以便在MyBatis中进行数据映射。
public class MyEntity { private int id; private String name; private int age; public MyEntity() { // 无参构造函数 } public MyEntity(String name, int age) { this.name = name; this.age = age; } // Getter和Setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "MyEntity{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
- 创建映射器接口:创建一个Java接口,用于定义数据库操作的方法。这些方法将在映射器XML文件中定义的SQL语句中使用。
示例映射器接口:
public interface MyMapper { MyEntity selectById(int id); List<MyEntity> selectAll(); void insert(MyEntity entity); void update(MyEntity entity); void delete(int id); }
- 创建映射器XML文件:在XML文件中定义SQL语句,并将它们与映射器接口中的方法关联。这些SQL语句包括查询、插入、更新和删除操作。
示例映射器XML文件(MyMapper.xml):
<?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="com.example.mappers.MyMapper"> <select id="selectById" resultType="com.example.MyEntity"> SELECT * FROM my_table WHERE id = #{id} </select> <select id="selectAll" resultType="com.example.MyEntity"> SELECT * FROM my_table </select> <insert id="insert" parameterType="com.example.MyEntity"> INSERT INTO my_table (name, age) VALUES (#{name}, #{age}) </insert> <update id="update" parameterType="com.example.MyEntity"> UPDATE my_table SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="delete" parameterType="int"> DELETE FROM my_table WHERE id = #{id} </delete> </mapper>
- 编写Java代码:在你的Java代码中使用MyBatis的SqlSessionFactory来获取SqlSession,然后调用映射器接口中的方法执行数据库操作。
示例Java代码:
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); try (SqlSession session = sqlSessionFactory.openSession()) { MyMapper myMapper = session.getMapper(MyMapper.class); // 查询 MyEntity entity = myMapper.selectById(1); // 插入 MyEntity newEntity = new MyEntity("John Doe", 30); myMapper.insert(newEntity); session.commit(); }
- 关闭资源:在使用完SqlSession后,记得关闭它以释放数据库连接等资源。
小结
这些是使用MyBatis的基本步骤。MyBatis还提供了许多高级功能,如动态SQL、缓存管理、批处理等,以满足各种数据库访问需求。使用MyBatis可以使数据库访问操作更加简单和可维护。