MyBatis 是一个优良的长久层框架,它反对定制化 SQL、存储过程以及高级映射。MyBatis 罢黜了简直所有的 JDBC 代码和手动设置参数以及获取后果集的工作。MyBatis 能够应用 XML 或者注解配置和原生 Map 的形式将接口和 Java 的 POJOs(Plain Old Java Objects,一般的 Java 对象)映射成数据库中的记录。
9.2.1. MyBatis 外围组件
MyBatis 次要蕴含以下几个外围组件:
- SqlSessionFactory: 一个 SqlSessionFactory 实例能够看作是一个数据库连接池,它的作用是创立 SqlSession 实例。
- SqlSession: SqlSession 是 MyBatis 的外围,它用于执行长久化操作。在 SqlSession 中执行的所有操作都是线程不平安的,所以每个线程都应该有本人的 SqlSession 实例。
- Mapper: Mapper 是一个接口,它的实现是由 MyBatis 生成的。Mapper 中的办法对应着 SQL 映射文件中的一个 SQL 语句。这样,咱们能够间接调用 Mapper 中的办法来执行 SQL,而无需手动编写 JDBC 代码。
9.2.2. MyBatis 配置
在应用 MyBatis 时,咱们须要进行一些根本配置,包含数据库连贯信息、事务管理器、数据源等。这些配置能够通过 XML 或者 Java 注解的形式进行。
9.2.2.1. 应用 XML 配置
以下是一个简略的 MyBatis 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"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
<property name="username" value="root"></property>
<property name="password" value="password"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
在这个配置文件中,咱们配置了一个名为 ”development” 的环境,包含事务管理器、数据源以及数据库连贯信息。此外,咱们还注册了一个名为 ”UserMapper” 的 SQL 映射文件。
9.2.2.2. 应用 Java 注解配置
除了应用 XML 配置文件,咱们还能够应用 Java 注解进行配置。以下是一个简略的例子:
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
public class AppConfig {public static SqlSessionFactory getSqlSessionFactory() {PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUsername("root");
dataSource.setPassword("password");
Environment environment = new Environment.Builder("development")
.transactionFactory(new JdbcTransactionFactory())
.dataSource(dataSource)
.build();
Configuration configuration = new Configuration(environment);
configuration.addMapper(UserMapper.class);
return new SqlSessionFactoryBuilder().build(configuration);
}
}
在这个例子中,咱们应用 Java 代码来配置 MyBatis 的环境、数据源、事务管理器等。留神,咱们应用 configuration.addMapper()
办法来注册 Mapper 接口。
9.2.3. MyBatis 实例
接下来,咱们将应用 MyBatis 框架来实现一个简略的用户管理系统。首先,咱们须要创立一个 User 实体类以及对应的 Mapper 接口:
User.java:
public class User {
private int id;
private String name;
private intage;
// getters and setters
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:
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {@Select("SELECT * FROM users")
List<User> findAll();
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(int id);
@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(User user);
@Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
void update(User user);
@Delete("DELETE FROM users WHERE id = #{id}")
void delete(int id);
}
在这个例子中,咱们应用 Java 注解定义了 UserMapper 接口,包含查问所有用户、依据 ID 查问用户、插入用户、更新用户和删除用户等办法。
接下来,咱们须要创立一个测试类,以便对 UserMapper 进行测试:
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class Main {public static void main(String[] args) {SqlSessionFactory sqlSessionFactory = AppConfig.getSqlSessionFactory();
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// Insert a user
User newUser = new User();
newUser.setName("John Doe");
newUser.setAge(25);
userMapper.insert(newUser);
sqlSession.commit();
System.out.println("Inserted user with ID:" + newUser.getId());
// Find all users
List<User> users = userMapper.findAll();
System.out.println("All users:");
for (User user : users) {System.out.println(user.getId() + "-" + user.getName() + "-" + user.getAge());
}
// Find user by ID
User user = userMapper.findById(newUser.getId());
System.out.println("Found user by ID:" + user.getId() + "-" + user.getName() + "-" + user.getAge());
// Update user
user.setName("Jane Doe");
user.setAge(28);
userMapper.update(user);
sqlSession.commit();
System.out.println("Updated user with ID:" + user.getId());
// Delete user
userMapper.delete(user.getId());
sqlSession.commit();
System.out.println("Deleted user with ID:" + user.getId());
}
}
}
在这个测试类中,咱们首先创立了一个 SqlSessionFactory 实例,而后关上一个 SqlSession。接着,咱们通过 SqlSession 的 getMapper()
办法获取 UserMapper 的实例,并调用其中的办法执行数据库操作。最初,不要遗记在插入、更新和删除操作之后调用 sqlSession.commit()
办法提交事务。
这个例子展现了如何应用 MyBatis 框架进行根本的数据库操作,心愿能帮忙你更好地了解 MyBatis 框架的工作原理。在理论我的项目中,你可能还须要应用更简单的查问条件、连贯多个表等性能,这些都能够通过 MyBatis 的 XML 映射文件或者 Java 注解实现。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g