深入探究minidao框架

发布时间:2023-05-20

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 的使用方法后,开发效率会得到很大的提升。