Norm
Norm是一套微型的JAVA數據庫ORM庫,提供了簡單高效的 API,僅需一個600KB左右的JAR包。 讓開發者不需要關心數據庫操作的具體細節,只需專注SQL和業務邏輯。同時,也提供了對於事務、緩存是處理,支持在Spring環境中運行!
Norm的設計參考了Hibernate、Spring Data Jpa、Sqlla、DbUtils等數據庫框架,它吸收了這些框架的優點,同時解決了一些開發過程中遇到的問題。它提供了簡單的API,讓開發者不需要關心數據庫操作的具體細節,只需專注SQL和業務邏輯。同時簡單的事務模型讓開發過程增益很多。.
(Norm = N - ORM = Norm alize)
快速開始
首先是引入JAR包,使用Maven/Gradle可以輕鬆依賴關係。但是我也提供了一個JAR包,直接引入項目即可。
Maven
<dependency> <groupId>io.github.xcr1234</groupId> <artifactId>norm</artifactId> <version>1.1</version></dependency>
Gradle
compile 'io.github.xcr1234:norm:1.1'
下載
下載norm.jar
簡單使用
完整的例子見:test.zip
Norm框架的核心類是norm.Norm和norm.Norms。
//Norm和Norms的關係相當於public static Norm Norms = new Norm();
Norms對象是Norm對象的一顆語法糖,它其實就是一個全局的Norm對象。有了Norms後,每次創建dao等操作就可以直接調用Norms上的靜態方法了,不用每次new了。如果系統中沒有跨數據庫的需求,使用全局的Norms對象就可以了。
全局配置
Norms.setDriverClass(JdbcDrivers.MYSQL); // JdbcDrivers.MYSQL = "com.mysql.jdbc.Driver"Norms.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false"); Norms.setUsername("root"); Norms.setPassword("root"); Norms.setShowSql(true); Norms.setFormatSql(true);
局部配置
Configuration configuration = new Configuration(JdbcDrivers.MYSQL,"jdbc:mysql://localhost:3306/test","root","root"); Norm norm = new Norm(configuration);
創建實體類
package entity;import norm.anno.Table;import norm.anno.Id;import norm.anno.Column; @Table("tb_user") //使用 Table 標識後,表名爲@Table的值,如果沒有 Table 標識,默認是類名)。public class User { @Id private Integer id; @Column("username") //使用 Column 標識後的屬性使用標識的值來對應表中的列 private String name; public User(){ //必須有無參數默認構造函數 } //省略get、set、toString方法}
實體類的@Id和無參數默認構造函數是必須有的,且實體類不可爲final。否則會拋出BeanException。
DAO 接口類
package dao;import norm.CrudDao;import entity.User;public interface UserDao extends CrudDao<User,Integer>{ }
CrudDao是Norm框架提供的增刪改查接口,由於UserDao繼承了CrudDao<User,Integer>,因此UserDao就具備了對User實體進行增刪改查的功能(Integer是User實體的Id字段的類型)。
不用寫UserDao 接口的實現類,Norm框架會爲你實現。
CRUD查詢
UserDao userDao = Norms.createDao(UserDao.class);//UserDao userDao = norm.createDao(UserDao.class);//find all 查詢List<User> userList = userDao.findAll(); System.out.println(userList); //find all 分頁查詢,MySQL,查詢第2頁的內容,每頁3條。Page page = Pages.create(Databases.MySQL,2,3); List<User> userListPaged = userDao.findAll(page); System.out.println(userListPaged);//find one查詢User user = userDao.findOne(8); System.out.println(user);//insertUser myUser = ...; userDao.save(myUser);//deleteuserDao.delete(user); userDao.deleteById(1);
在Spring環境中使用
在Spring環境中,Norm框架的核心是norm.support.spring.NormContext,配置一個NormContext的bean即可。
在Spring環境中使用時,建議先配置一個單獨的norm對象bean,如:
<bean class="norm.Configuration" id="configuration"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="showSql" value="true"/> <property name="formatSql" value="false"/> <property name="cacheManager"> <bean class="norm.cache.LruCacheManager"> <constructor-arg value="10" /> </bean> </property> </bean> <bean class="norm.Norm" id="norm"> <property name="configuration" ref="configuration" /> </bean>
然後將這個norm傳入NormContext bean中。
<!--Norm框架在Spring中配置的核心,傳入一個norm參數,表示數據庫連接的配置信息--> <bean class="norm.support.spring.NormContext"> <property name="norm" ref="norm" /> </bean>
在Service中使用如下代碼時,userDao會被自動注入。
package norm.test.service;import norm.support.spring.Dao;import norm.test.dao.UserDao;import norm.test.entity.User;import org.springframework.stereotype.Service; @Servicepublic class TestService { @Dao //這個註解加不加都是可以的 private UserDao userDao; }
<bean class="norm.test.service.TestService" id="testService"></bean>
高級特性
Norm框架同時支持自定義查詢、引用查詢(外鍵)、緩存、事務、多表連接查詢這些非常有用的特性