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框架同时支持自定义查询、引用查询(外键)、缓存、事务、多表连接查询这些非常有用的特性