欢迎访问宙启技术站
智能推送

Mybatis怎么用

发布时间:2023-05-14 08:22:47

Mybatis是一个开源的持久层框架,它可以通过XML或注解的方式与数据库进行交互。它的主要优点是易于学习和使用,并且可以与各种关系型数据库协作,使得开发者可以专注于业务逻辑而不用关心过多的SQL语句。

1. 配置文件

Mybatis的配置文件名一般为mybatis-config.xml,其中包含了数据源和各种属性的配置。

(1)数据源配置

<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/test"/>
            <property name="username" value="root"/>
            <property name="password" value=""/>
        </dataSource>
    </environment>
</environments>

(2)属性配置

<typeAliases>
    <typeAlias alias="User" type="com.example.domain.User"/>
</typeAliases>
<mappers>
    <mapper resource="mappers/UserMapper.xml"/>
</mappers>

2. 映射文件

Mybatis将SQL语句与Java方法进行映射,这就需要通过映射文件来定义需要执行的SQL语句。

(1)命名空间

<mapper namespace="com.example.mapper.UserMapper">

(2)SQL语句

<select id="getUserById" parameterType="int" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

3. Java API

Mybatis也支持通过Java API编写SQL语句和映射文件,但是相对于XML或注解,Java API的方式较为少见并且不太友好。

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);
}

4. 注解

Mybatis还支持通过注解的方式编写SQL语句和映射文件,这种方式的操作比XML更为简洁。

(1)使用@MapperScan

@MapperScan("com.example.mapper")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(2)使用@Mapper

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);

    @Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
    int insertUser(User user);
}

(3)使用@Param

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(@Param("id") int id);
}

5. 插件

Mybatis的插件是在执行SQL语句之前或之后对SQL进行拦截,通过拦截器可以很方便地实现自定义的功能和扩展。

@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class MyPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        System.out.println("插件拦截到了方法!");
        Object result = invocation.proceed();
        return result;
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
    }
}

6. 总结

Mybatis是一款功能强大、使用简单的持久化框架,支持多种方式和灵活的插件机制,如果掌握好了Mybatis已经可以完全胜任一般的数据库操作。当然,随着Spring Boot等框架的普及,Mybatis和其他框架的整合也是非常的简单方便的。