MiniDao (輕量級JAVA持久層,Hibernate完美助手)
當前最新版本: 1.6.4 (發佈日期:20180604)
MiniDao產生的初衷?
採用Hibernate的J2EE項目都有一個痛病,針對複雜業務SQL,hibernate能力不足,SQL不好優化和也無法分離。 這個時候大家就想到集成mybatis,但是一個項目既用hibernate又用mybatis,顯得很重事務也不好控制。大家常規的做法是採用springjdbc來實現原生SQL編寫,但是也同樣存在問題,SQL無法分離也沒有邏輯標籤能力。 所以爲了解決這個痛病,Jeecg針對springjdbc+freemarker做了封裝,出了這麼一個輕量級持久層,可以讓Hiberate擁有mybatis一樣SQL靈活能力,同時支持事務統一、SQL標籤能力。
MiniDao 簡介及特徵
MiniDao 是一款輕量級JAVA持久層框架,基於 SpringJdbc + freemarker 實現,具備Mybatis一樣的SQL分離和邏輯標籤能力。Minidao產生的初衷是爲了解決Hibernate項目,在複雜SQL具備Mybatis一樣的靈活能力,同時支持事務同步。
具有以下特徵:
- O/R mapping不用設置xml,零配置便於維護
- 不需要了解JDBC的知識
- SQL語句和java代碼的分離
- 只需接口定義,無需接口實現
- SQL支持腳本語言(強大腳本語言,freemarker語法)
- 支持與hibernate輕量級無縫集成
- 支持自動事務處理和手動事務處理
- 性能優於Mybatis
- 比Mybatis更簡單易用
- SQL 支持註解方式
- SQL 支持獨立文件方式,SQL文件的命名規則: 類名_方法名; SQL文件更容易定位,方便後期維護,項目越大此優勢越明顯
- SQL標籤採用Freemarker的基本語法
如何快速集成minidao?
方式一:springmvc與minidao集成
https://minidao.mydoc.io/?t=293634
方式二:springboot2與minidao集成
https://minidao.mydoc.io/?t=336070
技術交流
- 文 檔: https://minidao.mydoc.io
- 論 壇: www.jeecg.org
- QQ交流羣: 362385436
代碼體驗
1. 接口定義[EmployeeDao.java]
@MiniDao public interface EmployeeDao { @Arguments({ "employee"}) @Sql("select * from employee") List<Map<String,Object>> getAll(Employee employee); @Sql("select * from employee where id = :id") Employee get(@Param("id") String id); @Sql("select * from employee where empno = :empno and name = :name") Map getMap(@Param("empno")String empno,@Param("name")String name); @Sql("SELECT count(*) FROM employee") Integer getCount(); int update(@Param("employee") Employee employee); void insert(@Param("employee") Employee employee); @ResultType(Employee.class) public MiniDaoPage<Employee> getAll(@Param("employee") Employee employee,@Param("page") int page,@Param("rows") int rows);
}
2. SQL文件[EmployeeDao_getAllEmployees.sql]
SELECT * FROM employee where 1=1 <#if employee.age ?exists> and age = :employee.age </#if> <#if employee.name ?exists> and name = :employee.name </#if> <#if employee.empno ?exists> and empno = :employee.empno </#if>
3. 接口和SQL文件對應目錄
4. 測試代碼
public class Client { public static void main(String args[]) { BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); EmployeeDao employeeDao = (EmployeeDao) factory.getBean("employeeDao"); Employee employee = new Employee(); String id = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); employee.setId(id); employee.setEmpno("A001"); employee.setSalary(new BigDecimal(5000)); employee.setBirthday(new Date()); employee.setName("scott"); employee.setAge(25); //調用minidao方法插入 employeeDao.insert(employee); } }