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