Mybatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,极大地简化了数据库操作。Mybatis通过配置文件来指定SQL语句,可以完全控制SQL语句和数据库的交互,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis持久层框架提供了强大的数据库操作功能,提高了开发效率,减少了复杂度。
Mybatis简介与安装Mybatis是什么
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。
Mybatis与JDBC的区别
JDBC 是 Java Database Connectivity 的缩写,是 Java 语言访问数据库的标准 API。它提供了一组接口,通过这些接口,Java 应用程序可以执行 SQL 语句,处理结果集,管理和操作数据库连接等。JDBC 本身提供了足够的灵活性来处理各种数据库,但随着数据量的增大,使用原始 JDBC 的代码变得越来越复杂和难以维护。
MyBatis 是一个 SQL 映射工具,它通过 XML 文件或注解来配置 SQL 语句与 Java 方法的映射关系,极大地简化了数据库操作。MyBatis 的代码更加简洁,提高了开发效率。Mybatis 通过配置文件来指定 SQL 语句,可以完全控制 SQL 语句和数据库的交互。
Mybatis的安装与配置
-
下载 MyBatis
MyBatis 的最新版本可以在其官方网站或 Maven 仓库中找到。目前最新版本为 3.5.6。
-
配置环境变量
如果需要在命令行中使用 MyBatis,可以将 MyBatis 的 jar 包路径添加到环境变量
CLASSPATH
中。将 MyBatis 的 jar 以及依赖的 jar 包路径添加到环境变量中,例如:export CLASSPATH=$CLASSPATH:/path/to/mybatis.jar:/path/to/dependency/jars
-
创建 MyBatis 配置文件
创建
mybatis-config.xml
配置文件,用于配置 MyBatis 环境。<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/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration>
-
编写 SQL 映射文件
创建 SQL 映射文件
UserMapper.xml
,定义 SQL 语句。<mapper namespace="com.example.mapper.UserMapper"> <select id="selectUser" resultType="com.example.model.User"> SELECT id, name, age FROM users WHERE id = #{id} </select> </mapper>
创建Java项目
- 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个新的 Java 项目。
- 配置项目的构建路径,确保添加了 MyBatis 的 jar 文件及其依赖的 jar 文件。
导入Mybatis依赖
在 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.23</version>
</dependency>
</dependencies>
配置Mybatis核心文件
创建 mybatis-config.xml
配置文件,配置数据库连接信息和 SQL 映射文件。
<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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
Mybatis映射文件详解
MyBatis 的配置文件 UserMapper.xml
包含了 SQL 语句定义和结果映射。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUser" resultType="com.example.model.User">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
SQL语句的编写
在 UserMapper.xml
中编写 SQL 语句。
<insert id="insertUser">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
结果集映射
定义结果集映射,将数据库字段映射到 Java 对象。
<select id="selectUser" resultType="com.example.model.User">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
Mybatis基本使用
实体类与Mapper接口
创建实体类 User
和对应的 Mapper 接口 UserMapper
。
// User.java
package com.example.model;
public class User {
private int id;
private String name;
private int age;
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;
}
}
// UserMapper.java
package com.example.mapper;
import com.example.model.User;
public interface UserMapper {
User selectUser(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
SqlSession和SqlSessionFactory
创建 SqlSessionFactory
和 SqlSession
。
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MybatisExample {
public static void main(String[] args) {
String resource = "mybatis-config.xml";
InputStream inputStream = MybatisExample.class.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(1);
System.out.println(user.getName());
}
}
}
增删改查操作
定义 UserMapper
接口,并在 UserMapper.xml
中编写对应的 SQL 语句。
// UserMapper.java
public interface UserMapper {
User selectUser(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUser" resultType="com.example.model.User">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
Mybatis高级特性
动态SQL
使用 <if>
、<choose>
、<when>
、<otherwise>
等标签来实现动态 SQL 语句。
<select id="selectUser" resultType="com.example.model.User">
SELECT id, name, age FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</where>
</select>
分页查询
使用 SQL 的 LIMIT
关键字实现分页查询。
<select id="selectUsers" resultType="com.example.model.User">
SELECT * FROM users
LIMIT #{offset}, #{limit}
</select>
一对一与一对多关联查询
定义一对多关联查询,例如查询用户及其订单。
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.example.model.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="orders" javaType="java.util.List" ofType="com.example.model.Order">
<id property="id" column="order_id"/>
<result property="orderName" column="order_name"/>
</collection>
</resultMap>
<select id="selectUserWithOrders" resultMap="UserResultMap">
SELECT u.id, u.name, u.age, o.id AS order_id, o.order_name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
</mapper>
Mybatis与Spring整合
Mybatis-Spring简介
Mybatis-Spring 是 Mybatis 和 Spring 的整合框架,它提供了 SqlSessionTemplate
和 SqlSessionFatoryBean
,简化了 Mybatis 的使用。
整合步骤
-
导入依赖
在
pom.xml
中添加 Mybatis-Spring 相关的依赖。<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
-
配置 Spring
在 Spring 配置文件中配置
SqlSessionFactoryBean
和MapperScannerConfigurer
。<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
SqlSessionFactoryBean
:用于创建SqlSessionFactory
。MapperScannerConfigurer
:用于扫描 Mapper 接口并注入SqlSessionFactory
。
-
配置数据源
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean>
使用示例
在 Spring 配置文件中定义 Mapper 接口的 Bean。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
创建一个服务类来调用 Mapper 接口。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.selectUser(id);
}
}
``
总结:
通过以上步骤,你可以顺利完成 Mybatis 的入门与高级特性学习,以及与 Spring 的整合。Mybatis 提供了强大的数据库操作功能,提高了开发效率,减少了复杂度。希望这篇教程能帮助你更好地理解和使用 Mybatis。更多关于 Mybatis 的详细内容,可以参考其官方文档或慕课网上的相关课程。
共同学习,写下你的评论
评论加载中...
作者其他优质文章