您的位置:

深入探究minidao框架

随着技术的不断进步,JavaWeb 开发已经成为了一种热门的技术趋势。在 JavaWeb 开发中,访问数据库是一项必不可少的工作。minidao 是一款轻量级的 ORM 框架,它可以帮助我们更加方便地完成数据库的操作。下面将对 minidao 框架进行深入探究。

1、minidao 简介

minidao 是基于 Spring 微内核的 ORM 框架,主要使用了两种设计模式——Spring BeanFactory 设计模式和后处理器模式。它提供了一种方便、简单的方式访问数据库,也是一个轻量的 ORM 框架。

minidao 提供了多种数据库支持,目前支持的数据库包括Mysql、Postgresql、Oracle、SqlServer等。同时,它还提供了非常实用的注解工具类,可以在编译期完成 SQL 语句的拼装,并且支持多种分页方式。

1.1 minidao 特点

1)、简单易用,只需要在 POJO 中添加注解就可以完成 CRUD 操作。

2)、在 DAO 接口中使用注解方式完成 SQL 语句拼装。

3)、参数绑定和结果集映射实现了降低数据库访问的开销。

4)、支持多重数据源访问。

5)、支持多种分页方式,如 Oracle、Mysql、Postgresql 等分页方式。

6)、支持 SpringBoot 快速集成。

1.2 minidao 使用限制

1)、兼容性:最低兼容 Java1.7 以上。

2)、minidao 不支持存储过程、函数、触发器等操作,也不支持将一个逻辑操作分解为若干子操作后再进行执行。

2、minidao 使用示例

2.1 添加 minidao 依赖

在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.github.drinkjava2</groupId>
    <artifactId>mini-dao</artifactId>
    <version>3.0.0</version>
</dependency>

2.2 配置数据源

在 Spring 配置文件中,配置数据源并引入 minidao:

<!-- 定义数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test" />
    <property name="username" value="root" />
    <property name="password" value="123456" />
</bean>

<!-- 配置 minidao -->
<bean id="miniDao" class="org.nutz.dao.impl.NutDao">
    <constructor-arg ref="dataSource" />
</bean>

2.3 编写 DAO 层代码

在 DAO 接口中使用相关注解,进行 SQL 语句的拼装工作。

public interface UserDao {

    // 添加用户
    @Sql("insert into user(username,password) values(@user.username,@user.password)")
    @Transcation
    void addUser(@Param("user") User user);

    // 删除用户
    @Sql("delete from user where id=@id")
    @Transcation
    void deleteUser(@Param("id") int id);

    // 查询所有用户
    @Sql("select * from user")
    List<User> findAll();

    // 根据 ID 查询用户
    @Sql("select * from user where id=@id")
    User findById(@Param("id") int id);

    // 更新用户
    @Sql("update user set username=@user.username,password=@user.password where id=@user.id")
    @Transcation
    void updateUser(@Param("user") User user);
}

2.4 编写 Service 层代码

在 Service 层中进行事务管理:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void addUser(User user) {
        userDao.addUser(user);
    }

    @Override
    public void deleteUser(int id) {
        userDao.deleteUser(id);
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }

    @Override
    public User findById(int id) {
        return userDao.findById(id);
    }

    @Override
    public void updateUser(User user) {
        userDao.updateUser(user);
    }

}

2.5 配置 Mybatis 分页插件

minidao 使用 Mybatis 分页插件进行分页,首先需要在 pom.xml 文件中添加插件依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>

然后在 Spring 配置文件中添加 Mybatis 配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:mapper/*.xml" />
    <!-- 添加 Mybatis 分页插件配置 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <props>
                        <!-- 数据库方言 -->
                        <prop key="helperDialect">mysql</prop>
                        <!-- 分页合理化参数验证,默认为 true。如果设置为 true,pageNum<1 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。如果设置为 false,直接根据参数进行查询。 -->
                        <prop key="reasonable">true</prop>
                        <!-- 支持通过 Mapper 接口参数来传递分页参数 -->
                        <prop key="supportMethodsArguments">true</prop>
                        <!-- 默认通过 ThreadLocal 存储方法调用的分页参数,可以配置为每次调用时都传递参数。PageHelper.startPage(int pageNum,int pageSize,boolean count) 方法中的 count 参数即为配置的参数,true 时则会进行 count(1) 操作,消耗不少性能。 -->
                        <prop key="rowBoundsWithCount">true</prop>
                    </props>
                </property>
            </bean>
        </array>
    </property>
</bean>

2.6 使用分页插件进行分页

在 DAO 层代码中,使用 minidao 提供的 Pager 类进行分页操作。

public interface UserDao {

    // 分页查询所有用户
    @Sql("select * from user")
    List<User> findAll(Pager pager);

}

在 Service 层代码中,调用 DAO 层方法进行分页查询操作。

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public List<User> findAll(int pageNum, int pageSize) {
        Pager pager = Pager.create(pageNum, pageSize);
        return userDao.findAll(pager);
    }
}

3、总结

本文对 minidao 框架进行了深入的探究,介绍了其主要特点和使用方法。minidao 是一个非常方便、实用的 ORM 框架,可以帮助开发者们更加便捷地完成数据库操作。相信掌握了 minidao 的使用方法后,开发效率会得到很大的提升。