[原創]Spring Boot + Mybatis 簡易使用指南(一)基礎環境搭建


前言

作者: Ant QQ:517377100

相對於使用JdbcTemplate,Mybatis可自動建立pojo類型與數據庫列的映射關系,數據庫訪問層的開發簡單了許多

所有數據庫訪問操作,均封裝在各個Mapper接口中,接口的實現即為數據庫sql操作,sql可以注解的形式提供,也可以定義在xml文件中(復雜的sql操作優選xml)

引入Mybatis框架步驟簡單,這里做一些整理

本人集成開發環境使用 Intellij

添加Mybatis依賴項

pom.xml增加如下依賴項

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.8</version>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.2</version>
    </dependency>

Bean聲明

相關Bean的聲明統一在DatabaseConfiguration類型中

其中包含了UserMapper、CommodityMapper、CommodityCategoryMapper三個Bean的聲明

代碼如下

@Configuration
public class DatabaseConfiguration {
    @Bean
    public DataSource dataSource() {
        ...
    }

	@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
        sqlSessionFactoryBean.setTypeAliases(new Class[]{User.class, Commodity.class, CommodityCategory.class});
        sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return sqlSessionFactoryBean.getObject();
    }

    private <T> MapperFactoryBean getMapper(Class<T> mapperInterface) {
        MapperFactoryBean<T> mapperFactoryBean = new MapperFactoryBean<T>();
        try {
            mapperFactoryBean.setSqlSessionFactory(sqlSessionFactory());
            mapperFactoryBean.setMapperInterface(mapperInterface);
        } catch (Exception ex) {
            logger.error("error when create mapper: ", ex);
            throw new RuntimeException(ex);
        }
        return mapperFactoryBean;
    }

    @Bean
    public MapperFactoryBean userMapper() {
        return getMapper(UserMapper.class);
    }

    @Bean
    public MapperFactoryBean commodityCategoryMapper() {
        return getMapper(CommodityCategoryMapper.class);
    }

    @Bean
    public MapperFactoryBean commodityMapper() {
        return getMapper(CommodityMapper.class);
    }
}

創建SqlSessionFactory的同時,將其配置項MapUnderscoreToCamelCase設置為true,如數據庫列 user_name將自動映射到pojo中的userName屬性

通過setTypeAliases,指定使用的Pojo類型,后續Mapper.xml中就不需要指定Pojo類型的完整限定名(即無需指定namespace)

Mapper interface

package com.antsoft.docoding.mapper;
import java.util.List;
import com.antsoft.docoding.model.User;

public interface UserMapper {
    List<User> getUsers();

    User getUser(long id);

    void addUser(User user);

    void clear();

    void updateUser(User user);
}

Mapper xml

Mapper.xml所在目錄需要與對應的Mapper接口位於統一個包中

上述UserMapper接口,對應的UserMapper.xml 位於目錄resources/com/antsoft/docoding/mapper/中,內容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antsoft.docoding.mapper.UserMapper">
    <resultMap id="user" type="user">
        <result column="user_type" property="userType" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
    </resultMap>
    
    <delete id="clear">
        DELETE FROM dc_user
    </delete>

    <select id="getUsers" resultMap="user">
        SELECT id, user_name, user_type FROM dc_user
    </select>

    <select id="getUser"  resultMap="user">
        SELECT id, user_name, user_type FROM dc_user WHERE id = #{id}
    </select>

    <insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="user">
        INSERT INTO dc_user(user_name, user_type)
        VALUES(#{userName}, #{userType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler})
    </insert>

    <update id="updateUser" parameterType="user">
        UPDATE dc_user SET user_name = #{userNmae},
        user_type = #{userType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
        WHERE id = #{id}
    </update>

</mapper>

關於EnumOrdinalTypeHandler,可以完成枚舉值敘述與枚舉類型的自動轉換

使用Mapper

使用Mapper的方式與以前使用Dao類型的方法完全一致,通過@Autowired實現依賴注入,如下:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public void clear() {
        userMapper.clear();
    }

    public List<User> getUsers() {
        return userMapper.getUsers();
    }

    public void addUser(User user) {
        userMapper.addUser(user);
    }

    public void updateUser(User user) {
        userMapper.updateUser(user);
    }

    public User getUser(long id) {
        return userMapper.getUser(id);
    }
}

更多Mabatis內容 請閱讀官方文檔

入門

動態SQL 簡化工作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM