github 地址,https://github.com/xcr1234/norm/ 欢迎各位大神 fork & 交流!
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 包,直接引入项目即可。
- <dependency>
- <groupId>
- io.github.xcr1234
- </groupId>
- <artifactId>
- norm
- </artifactId>
- <version>
- 1.1
- </version>
- </dependency>
- compile 'io.github.xcr1234:norm:1.1'
下载 norm.jar
完整的例子见:test.zip
Norm 框架的核心类是
和
- norm.Norm
。
- norm.Norms
- //Norm和Norms的关系相当于
- public staticNorm Norms =newNorm();
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 =newConfiguration(JdbcDrivers.MYSQL,"jdbc:mysql://localhost:3306/test","root","root");
- Norm norm =newNorm(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。
- package dao;
- import norm.CrudDao;
- import entity.User;
- public interfaceUserDaoextendsCrudDao{
- }
CrudDao 是 Norm 框架提供的增删改查接口,由于 UserDao 继承了 CrudDao<User,Integer>,因此 UserDao 就具备了对 User 实体进行增删改查的功能(Integer 是 User 实体的 Id 字段的类型)。
不用写 UserDao 接口的实现类,Norm 框架会为你实现。
- UserDao userDao = Norms.createDao(UserDao.class);
- //UserDao userDao = norm.createDao(UserDao.class);
- //find all 查询List userList = userDao.findAll();
- System.out.println(userList);
- //find all 分页查询,MySQL,查询第2页的内容,每页3条。Page page = Pages.create(Databases.MySQL,2,3);
- List userListPaged = userDao.findAll(page);
- System.out.println(userListPaged);
- //find one查询User user = userDao.findOne(8);
- System.out.println(user);
- //insertUser myUser = ...;
- userDao.save(myUser);
- //delete
- userDao.delete(user);
- userDao.deleteById(1);
在 Spring 环境中,Norm 框架的核心是
,配置一个 NormContext 的 bean 即可。
- norm.support.spring.NormContext
在 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;
- @Service
- public class TestService {
- @Dao //这个注解加不加都是可以的
- private UserDao userDao;
- }
- <bean class="norm.test.service.TestService" id="testService">
- </bean>
Norm 框架同时支持自定义查询、引用查询(外键)、缓存、事务、多表连接查询这些非常有用的特性,具体参考:[高级特性]
来源: http://www.cnblogs.com/xcr1234/p/6890708.html