Mybatis iBatis jdbc
时间: 2023-07-07 22:03:13 浏览: 65
MyBatis和iBatis都是基于JDBC(Java数据库连接)的持久化框架。它们的主要目的是简化数据库访问,通过将SQL语句从Java代码中分离出来,使得开发人员可以更方便地管理和维护SQL语句。
iBatis是MyBatis的前身,它是由Apache Software Foundation管理的开源项目。MyBatis是iBatis的升级版,是一个由国人开发的轻量级ORM框架。它提供了一种优雅的方式来映射Java对象和数据库表,同时也支持高级映射、存储过程和高级查询等功能。
JDBC(Java数据库连接)是Java平台上访问关系型数据库的标准API。它提供了一种标准化的方式来访问关系型数据库,使得开发人员可以用Java语言编写应用程序来访问数据库。JDBC是通过JDBC驱动程序实现的,每个数据库供应商都需要提供相应的JDBC驱动程序。
相关问题
mybatis-plus配置手动释放jdbc连接
在 Mybatis-Plus 中,我们可以通过配置 `MybatisConfiguration` 来手动释放 JDBC 连接。具体步骤如下:
1. 首先,我们需要创建一个实现了 `org.apache.ibatis.session.TransactionFactory` 接口的类,例如:
```java
public class ManualTransactionFactory implements TransactionFactory {
@Override
public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) {
return new ManualTransaction(dataSource);
}
@Override
public Transaction newTransaction(Connection connection) {
return new ManualTransaction(connection);
}
@Override
public boolean canHandleDataSource(DataSource dataSource) {
return true;
}
}
```
2. 接下来,我们需要创建一个实现了 `org.apache.ibatis.session.Transaction` 接口的类,例如:
```java
public class ManualTransaction implements Transaction {
private Connection connection;
public ManualTransaction(Connection connection) {
this.connection = connection;
}
public ManualTransaction(DataSource dataSource) {
try {
this.connection = dataSource.getConnection();
this.connection.setAutoCommit(false);
} catch (SQLException e) {
throw new MybatisPlusException(e);
}
}
@Override
public Connection getConnection() {
return connection;
}
@Override
public void commit() {
try {
connection.commit();
} catch (SQLException e) {
throw new MybatisPlusException(e);
}
}
@Override
public void rollback() {
try {
connection.rollback();
} catch (SQLException e) {
throw new MybatisPlusException(e);
}
}
@Override
public void close() {
try {
connection.close();
} catch (SQLException e) {
throw new MybatisPlusException(e);
}
}
@Override
public Integer getTimeout() {
return null;
}
}
```
这里的 `ManualTransaction` 类中,我们实现了 `close` 方法,在执行器对象关闭时,会调用该方法释放连接。
3. 最后,在 Mybatis-Plus 的配置中,我们需要将 `MybatisConfiguration` 中的 `transactionFactory` 属性设置为我们自己创建的 `ManualTransactionFactory`,例如:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// ...
return interceptor;
}
@Bean
public MybatisConfiguration mybatisConfiguration() {
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setTransactionFactory(new ManualTransactionFactory()); // 设置事务工厂
return configuration;
}
}
```
这样,当执行器对象关闭时,就会自动调用 `ManualTransaction` 中的 `close` 方法释放连接了。
mybatis isnull
MyBatis provides a built-in function called `isnull` that checks whether a value is null or not.
You can use this function in your MyBatis XML mapper files to conditionally execute a SQL statement based on whether a value is null or not.
Here's an example:
```xml
<select id="getUserById" resultType="User">
SELECT *
FROM users
WHERE id = #{id}
<if test="@org.apache.ibatis.jdbc.Null.null == username">
AND username IS NULL
</if>
<if test="@org.apache.ibatis.jdbc.NotNull@notNull(username)">
AND username = #{username}
</if>
</select>
```
In this example, the `isnull` function is used to check whether the `username` parameter is null or not. If it is null, the SQL statement will include a condition that checks whether the `username` column in the `users` table is null. If it is not null, the SQL statement will include a condition that checks whether the `username` column in the `users` table matches the `username` parameter.
Note that in order to use the `isnull` function, you need to include the `mybatis-3-jdbc-type-converter` dependency in your project.