Java客户端-标准DAO简介
标准DAO是通过Code Gen生成出来的第一种方式的DAO。里面包含了最常用的单表操作。可以直接使用。同时Code gen生成的第二种DAO,即构建DAO也是基于单表操作的,生成的时候会跟同一表名的标准DAO的代码合并在一个class文件里面,方便查找和维护。
标准DAO的生成的代码一般是先对DalHints做简单的校验,然后直接调用同名的DalTableDao里面的方法,同时标准DAO直接使用被调用的DalTableDao的返回值作为自身的返回值。对于增删改方法,需要注意的是其返回值会随着数据库类型和数据库设置的不同有所不同,具体不同之处在下面会有详细说明。
这样做的好处是使暴露在DAL框架外部的代码尽可能少,修改和升级仅需要替换DAL客户端的版本即可。
假定表名为Person。以下以此举例:
标准DAO的构造函数为无参构造函数
public PersonDao() throws SQLException
查询
按照唯一主键查找,返回实体类型
public Person queryByPk(Number id, DalHints hints) throws SQLException
按照给定的包含主键的实体类型查找
public Person queryByPk(Person pk, DalHints hints) throws SQLException
安装给定的包含某些字段的样例实体类型查找
public List<Person> queryLike(Person sample, DalHints hints) throws SQLException
获取全部记录数
public int count(DalHints hints) throws SQLException
按照给定的页码和每页的长度查找
public List<Person> queryAllByPage(int pageNo, int pageSize, DalHints hints) throws SQLException
获取所有记录
public List<Person> queryAll(DalHints hints) throws SQLException
插入操作
插入单条数据,返回影响行数
public int insert(DalHints hints, Person daoPojo) throws SQLException
插入多条数据,可以配合continueOnError使用。返回每条记录影响行数
public int[] insert(DalHints hints, List<Person> daoPojos) throws SQLException
插入一条数据,并且在keyHolder里返回自动生成的主键。返回影响行数
public int insert(DalHints hints, KeyHolder keyHolder, Person daoPojo) throws SQLException
插入多条数据,并且在keyHolder里返回自动生成的主键。返回每条记录影响行数。如果设置continueOnError,则某条记录操作失败,剩下的记录还是会执行。
public int[] insert(DalHints hints, KeyHolder keyHolder, List<Person> daoPojos)
批量插入数据,返回每条记录影响行数
public int[] batchInsert(DalHints hints, List<Person> daoPojos) throws SQLException
通过把每条记录对应的insert语句拼接为一条语句来执行。可以在hints里面传keyHolder获得自增主键。返回值为影响行数
public int combinedInsert(DalHints hints, List<Person> daoPojos) throws SQLException
通过把每条记录对应的insert语句拼接为一条语句来执行。keyHolder里面将保存获得的自增主键。返回值为影响行数
public int combinedInsert(DalHints hints, KeyHolder keyHolder, List<Person> daoPojos)
删除操作
删除一条,返回影响行数
public int delete(DalHints hints, Person daoPojo) throws SQLException
删除多条记录,返回每个实体影响的行数。如果设置continueOnError,则某条记录操作失败,剩下的记录还是会执行。
public int[] delete(DalHints hints, List<Person> daoPojos) throws SQLException
批量删除操作,返回每个实体影响的行数
public int[] batchDelete(DalHints hints, List<Person> daoPojos) throws SQLException
更新操作
更新一条记录,返回影响行数。如果实体里面字段为空,则不更新该字段,如果希望更新为空的自动,可以传递updateNullField到hints里面
public int update(DalHints hints, Person daoPojo) throws SQLException
更新一条记录,返回每个实体影响的行数。如果实体里面字段为空,则不更新该字段,如果希望更新为空的自动,可以传递updateNullField到hints里面。如果设置continueOnError,则某条记录操作失败,剩下的记录还是会执行。
public int[] update(DalHints hints, List<Person> daoPojos) throws SQLException
批量删除操作。返回每条实体影响行数
public int[] batchUpdate(DalHints hints, List<Person> daoPojos) throws SQLException
由于具体的增删改操作的方式,对应的数据库和连接设置上面的不同,每种操作相应的返回值也不一样,详细说明如下
Mysql
insert:
1、只插入单个pojo
public int insert(DalHints hints, T daoPojo)
返回值:影响行数
2、插入多个pojo,逐个插入
public int[] insert(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理插入
public int[] batchInsert(DalHints hints, List<T> daoPojos)
返回值:
(1) datasource.xml中,connectionProperties写入"rewriteBatchedStatements=true",则返回
int[]数组,数组长度等于daoPojos的长度,数组元素值都是数据库驱动返回值-2
(2) 无"rewriteBatchedStatements=true",则返回
int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
4、将多个pojo的插入语句拼成一个大insert语句,一次完成插入
public int combinedInsert(DalHints hints, List<T> daoPojos)
返回值:影响行数
delete:
1、只删除单个pojo
public int delete(DalHints hints, T daoPojo)
返回值:影响行数
2、删除多个pojo,逐个删除
public int[] delete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理删除
public int[] batchDelete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
update:
1、只更新单个pojo
public int update(DalHints hints, T daoPojo)
返回值:影响行数
2、更新多个pojo,逐个更新
public int[] update(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理更新
public int[] batchUpdate(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
SQLServer(set nocount off)
insert:
1、只插入单个pojo
public int insert(DalHints hints, T daoPojo)
返回值:影响行数
2、插入多个pojo,逐个插入
public int[] insert(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理插入
public int[] batchInsert(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
4、将多个pojo的插入语句拼成一个大insert语句,一次完成插入
public int combinedInsert(DalHints hints, List<T> daoPojos)
返回值:影响行数
delete:
1、只删除单个pojo
public int delete(DalHints hints, T daoPojo)
返回值:影响行数
2、删除多个pojo,逐个删除
public int[] delete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理删除
public int[] batchDelete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
update:
1、只更新单个pojo
public int update(DalHints hints, T daoPojo)
返回值:影响行数
2、更新多个pojo,逐个更新
public int[] update(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
3、批处理更新
public int[] batchUpdate(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为对daoPojos中每个元素操作所影响的行数
SQLServer(set nocount on)
insert:
1、只插入单个pojo
public int insert(DalHints hints, T daoPojo)
返回值:-1
2、插入多个pojo,逐个插入
public int[] insert(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-1
3、批处理插入
public int[] batchInsert(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-2
4、将多个pojo的插入语句拼成一个大insert语句,一次完成插入
public int combinedInsert(DalHints hints, List<T> daoPojos)
返回值:-1
delete:
1、只删除单个pojo
public int delete(DalHints hints, T daoPojo)
返回值:-1
2、删除多个pojo,逐个删除
public int[] delete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-1
3、批处理删除
public int[] batchDelete(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-2
update:
1、只更新单个pojo
public int update(DalHints hints, T daoPojo)
返回值:-1
2、更新多个pojo,逐个更新
public int[] update(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-1
3、批处理更新
public int[] batchUpdate(DalHints hints, List<T> daoPojos)
返回值:int[]数组,数组长度等于daoPojos的长度,数组元素值为-2
相关文章
- 基于-SLF4J-MDC-机制的日志链路追踪配置属性
ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC
- ajax-跨域访问
ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>
- 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache
spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port
- Java动态代理
Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public
- Java读取classpath中的文件
public void init() { try { //URL url = Thread.currentThread().getContextClassLo
随机推荐
- 基于-SLF4J-MDC-机制的日志链路追踪配置属性
ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC
- ajax-跨域访问
ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>
- 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache
spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port
- Java动态代理
Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public
- Java读取classpath中的文件
public void init() { try { //URL url = Thread.currentThread().getContextClassLo