# dexcoder-assistants **Repository Path**: zjc_scut/dexcoder-assistants ## Basic Information - **Project Name**: dexcoder-assistants - **Description**: dexcoder快速开发工具包,dexcoder-assistant的开源部分 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://www.dexcoder.com/blog/index.shtml - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-06-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #Dexcoder快速开发工具包,目前主要有以下功能组件: - 基于Spring JdbcTemplate的通用dao - 比Apache BeanUtils更强大高效的Bean转换工具类 ##基于Spring JdbcTemplate的通用dao使用说明 如果你不喜欢用`Hibernate`、`Mybaits`这类ORM框架,喜欢`JdbcTemplate`或`DbUtils`,那么可以试试这个封装的通用dao,这可能是目前封装的最方便的通用dao了。 该通用dao是在使用过程中,针对常规的泛型dao经常遇到的一些不便问题进行了改进。命名上遵循了约定优于配置的原则,典型约定如下: - 表名约定 `USER_INFO`表实体类名为`UserInfo`。 - 字段名约定 `USER_NAME`实体类中属性名为`userName`。 - 主键名约定 `USER_INFO`表主键名为`USER_INFO_ID`,同理实体类中属性名为`userInfoId`。 - `Oracle`序列名约定 `USER_INFO`表对应的主键序列名为`SEQ_USER_INFO` 当然,这些你可以在扩展中改变它,但不建议这么做,这本身就是一个良好的规范。 目前除了具有常规泛型dao的功能外还具有如下特性: 1. 一个dao可以操作所有的实体类,不必再一个个建立跟实体对应的继承于类似BaseDao这类“通用dao”了。 2. 各类方法参数支持`Entity`和`Criteria`两种方式。 3. sql的where条件支持不等于`(column != value)`、等于多个值`(column = value1 or column = value2)`和in的方式`(column in (value1,value2,...))`。 4. 允许在查询时指定使用哪个字段进行排序,可以指定多个进行组合升降序自由排序。 5. 支持在查询时指定返回字段的白名单和黑名单,可以指定只返回某些字段或不返回某个大字段。 6. 方便强大的分页功能,无须额外操作,二三行代码搞定分页,自动判断数据库,无须指定。 要在项目中使用通用dao十分简单,只需要在spring的配置文件中声明如下bean:
`接下来就可以注入到您的`Service`或者其它类中使用了。 ##下面是一些常用的方法示例,这里的`Entity`对象为`User`,对于任何的`Entity`都是一样的. 先来看一下`User`对象及它继承的`Pageable` public class User extends Pageable { private Long userId; private String userName; private Integer userAge; private Date gmtCreate; private Date gmtModify; //...... } Pageable对象,用来保存页码、每页条数信息以支持分页 public class Pageable implements Serializable { /** 每页显示条数 */ protected int itemsPerPage = 20; /** 当前页码 */ protected int curPage = 1; //...... } 都是普通的JavaBean对象,下面来看看如何进行具体的增删改查,每种操作都演示了`Entity`和`Criteria`两种方式。 ###insert操作 public void insert() { User user = new User(); user.setUserName("liyd"); user.setUserAge(20); user.setGmtCreate(new Date()); Long id = jdbcDao.insert(user); System.out.println(id); } public void insert2() { Criteria criteria = Criteria.create(User.class).set("userName", "liyd22") .set("userAge", 22).set("gmtCreate", new Date()); Long id = jdbcDao.insert(criteria); System.out.println(id); } ###save操作,和insert的区别在于不处理主键,由调用者指定 public void save() { user.setUserId(-123L); jdbcDao.save(user); } public void save2() { Criteria criteria = Criteria.create(User.class).set("userId", -122L) .set("userName", "liyd22").set("userAge", 22).set("gmtCreate", new Date()) .set("gmtModify", new Date()); jdbcDao.save(criteria); } ###update操作 public void update() { user.setUserId(34L); user.setUserName("liyd34"); user.setGmtCreate(null); user.setGmtModify(new Date()); jdbcDao.update(user); } public void update2() { //这里where条件userId传入了多个值,会生成in语句 Criteria criteria = Criteria.create(User.class).set("userName", "liydCriteria") .set("userAge", "18").where("userId", new Object[] { 34L, 33L, 32L }); jdbcDao.update(criteria); } ###get操作 public void get1() { //根据主键 User u = jdbcDao.get(User.class, 23L); } public void get2() { //criteria,主要用来指定字段白名单、黑名单等 Criteria criteria = Criteria.create(User.class).include("userName"); User u = jdbcDao.get(criteria, 23L); } ###delete操作 public void delete() { //会把不为空的属性做为where条件 User u = new User(); u.setUserName("selfly"); u.setUserAge(16); jdbcDao.delete(u); } public void delete2() { //where条件使用了or Criteria criteria = Criteria.create(User.class).where("userName", new Object[] { "liyd2" }) .or("userAge", new Object[]{64}); jdbcDao.delete(criteria); } public void delete3() { //根据主键 jdbcDao.delete(User.class, 25L); } ###列表查询操作 public void queryList1() { //以不为空的属性作为查询条件 User u = new User(); u.setUserName("liyd"); List`
`- nameHandler 默认使用DefaultNameHandler,即遵守上面的约定优于配置,如果需要自定义可以实现该接口。 - rowMapperClass 默认使用了spring的`BeanPropertyRowMapper.newInstance(clazz)`,需要自定义可以自行实现,标准spring的RowMapper实现即可。 - dialect 默认为自增类主键如MySql,其它类型请指定数据库如oracle ##相关链接 对应的实现思路及步骤:http://www.dexcoder.com/list/series/56.shtml 某些详细信息可能需要阅读第一个版本:http://www.dexcoder.com/list/series/32.shtml 作者QQ: 341470 作者邮箱: javaer@live.com 交流QQ群: 32261424`