MiniDao使用指南.pdf

上传人:wj 文档编号:3437412 上传时间:2023-05-05 格式:PDF 页数:41 大小:866.76KB
下载 相关 举报
MiniDao使用指南.pdf_第1页
第1页 / 共41页
MiniDao使用指南.pdf_第2页
第2页 / 共41页
MiniDao使用指南.pdf_第3页
第3页 / 共41页
MiniDao使用指南.pdf_第4页
第4页 / 共41页
MiniDao使用指南.pdf_第5页
第5页 / 共41页
MiniDao使用指南.pdf_第6页
第6页 / 共41页
MiniDao使用指南.pdf_第7页
第7页 / 共41页
MiniDao使用指南.pdf_第8页
第8页 / 共41页
MiniDao使用指南.pdf_第9页
第9页 / 共41页
MiniDao使用指南.pdf_第10页
第10页 / 共41页
MiniDao使用指南.pdf_第11页
第11页 / 共41页
MiniDao使用指南.pdf_第12页
第12页 / 共41页
MiniDao使用指南.pdf_第13页
第13页 / 共41页
MiniDao使用指南.pdf_第14页
第14页 / 共41页
MiniDao使用指南.pdf_第15页
第15页 / 共41页
MiniDao使用指南.pdf_第16页
第16页 / 共41页
MiniDao使用指南.pdf_第17页
第17页 / 共41页
MiniDao使用指南.pdf_第18页
第18页 / 共41页
MiniDao使用指南.pdf_第19页
第19页 / 共41页
MiniDao使用指南.pdf_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MiniDao使用指南.pdf

《MiniDao使用指南.pdf》由会员分享,可在线阅读,更多相关《MiniDao使用指南.pdf(41页珍藏版)》请在冰点文库上搜索。

MiniDao使用指南.pdf

MiniDao使用指南作者:

张代浩2013/08/16P-2目录培训对象使用MiniDao进行开发的开发人员培训目的使开发人员掌握通过MiniDao访问Mysql数据库的用法和技巧P-3目录培训内容MiniDao简介及特征MiniDao的安装及基本概念MiniDao的使用介绍参考资料Spring(IOC/AOP/JDBC)FreemarkerHibernateP-4MiniDao简介及特征MiniDao是Jeecg自己的持久化解决方案,集成Hibernate实体维护和MybaitsSQL分离的两大优点。

具有以下特征O/Rmapping不用设置xml,零配置便于维护不需要了解JDBC的知识SQL语句和java代码的分离可以自动生成SQL语句接口和实现分离,不用写持久层代码,用户只需写接口,以及某些接口方法对应的SQL。

它会通过AOP自动生成实现类支持自动事务处理和手动事务处理支持与hibernate轻量级无缝集成MiniDao整合了Hibernate+mybatis的两大优势,支持实体维护和SQL分离SQL支持脚本语言Sql性能优于Mybatis向下兼容Hibernate实体维护方式,实体的增删改查SQL自动生成P-5&VsMybatis相同点:

相同点:

SQL语句和java代码的分离不同点:

不同点:

O/Rmapping不用设置xml,零配置,简单易用可以自动生成SQL语句接口和实现分离,不用写持久层代码,用户只需写接口,以及某些接口方法对应的SQL。

它会通过AOP自动生成实现类支持与hibernate轻量级无缝集成SQL支持更强大的脚本语言,可以写逻辑处理Sql性能优于MybatisSql支持传递多个参数Map/Object/List/包装类型都可以Mybatis只支持一个参数SQL性能对比(MiniDaoSQL内容采用文件存储)内容采用文件存储)MiniDaoSql耗时:

54毫秒(SQL模板第一从文件读取,第二次从缓存读取)方法第一次执行的时候加载sql到缓存里MiniDaoSql耗时:

4毫秒MiniDaoSql耗时:

4毫秒MiniDaoSql耗时:

5毫秒(MiniDaoSQL内容采用内容采用Sql标签标签)MiniDaoSql耗时:

6毫秒MiniDaoSql耗时:

1毫秒MiniDaoSql耗时:

1毫秒MiniDaoSql耗时:

2毫秒(Mybatis在在Sesion初始化的初始化的时候,加载时候,加载Xml到缓存里,所以第一执行比到缓存里,所以第一执行比MiniDao快快)MybatisSql耗时:

18毫秒MybatisSession初始化的时候,加载Xml到缓存里MybatisSql耗时:

6毫秒MybatisSql耗时:

5毫秒MybatisSql耗时:

9毫秒(Springjdbc)SpringjdbcSql耗时:

10毫秒SpringjdbcSql耗时:

1毫秒SpringjdbcSql耗时:

1毫秒SpringjdbcSql耗时:

1毫秒P-7MiniDao支持SQL分离写法第一步:

EmployeeDao.java接口定义(不需要实现)MiniDaopublicinterfaceEmployeeDaoArguments(employee)publicListgetAllEmployees(Employeeemployee);Arguments(empno)EmployeegetEmployee(Stringempno);Arguments(empno,name)MapgetMap(Stringempno,Stringname);Sql(SELECTcount(*)FROMemployee)IntegergetCount();Arguments(employee)intupdate(Employeeemployee);Arguments(employee)voidinsert(Employeeemployee);P-8MiniDao支持SQL分离写法第二步:

接口方法对应SQL文件创建Sql文件定位到dao接口的方法,dao接口的每个方法对应一个sql文件SQL文件命名规则:

Dao接口名_方法名.sql简单SQL,也可以采用方法注释标签Sql(SELECTcount(*)FROMemployee)IntegergetCount();P-9MiniDao支持SQL分离写法第三步:

SQL文件SQL文件采用模板语言Freemarker语法,可以灵活运用,甚至可以写脚本语言,宏处理等;示例:

SELECT*FROMemployeewhere1=1andage=$employee.ageandname=$employee.nameandempno=$employee.empnoP-10MiniDao支持实体方式维护第一步:

自定义接口继承MiniDaoSupportHiber接口示例:

publicinterfaceJeecgDemoDaoextendsMiniDaoSupportHiber说明:

JeecgDemo:

持久化对象JeecgDemoDao用户自定义接口P-11SQL参数传递两种方式方式一方式一:

支持采用占位符,支持采用占位符,格式字段前加冒号格式字段前加冒号【:

字段名字段名】优点优点:

防止sql注入;sql执行计划只解析一次;字段值根据类型自动转换不需要手工处理缺点缺点:

只能传参数原生态值;参数为List情况循环体不适用示例:

示例:

SELECT*FROMemployeewhere1=1andage=:

employee.ageandname=:

employee.nameandempno=:

employee.empnoP-12SQL参数传递两种方式方式方式二二:

模板语言方式,格式模板语言方式,格式【$字段名字段名】缺点缺点:

Sql直接拼装,有SQL注入风险;参数值需根据类型手工转换;优点优点:

可以对参数值进行脚本处理;参数为List对象,循环体对象必须用该方式;(用户体验没有变化,直接将$改为:

即可)特点:

支持多参数,支持参数多层,参数为list必须采用模板语言方式示例:

SELECT*FROMemployeewhere1=1andage=$employee.ageandname=$employee.nameandempno=$employee.empnoP-13MiniDao支持SQL分离写法第四步:

Arguments注释标签讲解/*(SQL模板参数名模板参数名)*1.注释标签参数必须和方法参数,保持顺序一致*2.注释标签参数的参数数目不能大于方法参数的参数数目*3.只有在注释标签参数标注的参数,才会传递到SQL模板里*4.如果方法参数只有一个,如果用户不设置注释标签参数,则默认参数名为miniDto*date20130817*versionV1.0*/Retention(RetentionPolicy.RUNTIME)Target(ElementType.METHOD)publicinterfaceArgumentsStringvalue()default;示例:

Arguments(empno,name)MapgetMap(Stringempno,Stringname);P-14MiniDao支持实体方式维护第二步:

JavaBean实体定义,采用JPA方式进行注解同Hibernate实体配置一样,支持一对多,多对多等复杂配置关系示例:

EntityTable(name=jeecg_demo)Inheritance(strategy=InheritanceType.JOINED)publicclassJeecgDemoextendsIdEntityimplementsjava.io.SerializableprivatestaticfinallongserialVersionUID=1L;IdGeneratedValue(generator=hibernate-uuid)GenericGenerator(name=hibernate-uuid,strategy=uuid)privateStringid;/*手机号码*/Column(name=mobilePhone,nullable=true)privatejava.lang.StringmobilePhone;/*办公电话*/Column(name=officePhone,nullable=true)privatejava.lang.StringofficePhone;/*电子邮箱*/Column(name=email,nullable=true)privatejava.lang.Stringemail;P-15MiniDao的安装及基本概念MiniDao的安装与Jeecg同样,MiniDao需要JDK1.5以上的系统环境需要引入必要的lib文件引入必要的配置文件Spring.xml,log4j.properties使用MiniDao时必须作成的文件:

JavaBeans、Dao(.java)、SQL文件(.sql)P-16MiniDao的安装及基本概念

(2)MiniDao的基本概念使用MiniDao功能时,作成的JavaBeans,Dao(.java),spring.xml文件,SQL文件(.sql)之间关系如下图:

P-17MiniDao的安装及基本概念

(2)MiniDao配置文件examples.dao.*P-18MiniDao的安装及基本概念(3)MiniDao的基本概念JavaBeans,采用JPA注解注解注解方式:

JavaBeans用来和表进行关联。

为了将JavaBeans和表进行关联,必须进行以下的常量声明和方法的实装:

和表关联的常量声明(TABLE注释)和列项关联的常量声明(COLUMN注释)和其他的表结合时指定为键(key)的常量声明(N:

1映射)getter/setter方法的实装P-19MiniDao的安装及基本概念(4)MiniDao的基本概念Dao(DataAccessObject):

Dao作为接口而作成。

Dao本来的目的,就是通过把持久化的数据和处理逻辑相分离,来维持Bean的持久化。

Dao和JavaBeans的关系是1:

1的关系,也即,有一个JavaBeans,就要作成一个Dao。

通过调用Dao的方法(method),来执行与方法(method)相对应的SQL文件中的SQL指令。

在作成Dao的时候,必须注意以下几点:

与JavaBeans关联的常量声明(BEAN注释)方法(method)的定义P-20MiniDao的安装及基本概念(5)MiniDao的基本概念SQL文件:

SQL文件里记述SQL检索,更新等指令。

一旦调用Dao里定义的方法(method),就可以执行对应的SQL文件中记述的SQL指令。

请将作成的SQL文件与Dao放在同一个命名空间下。

P-21MiniDao的安装及基本概念(6)MiniDao的基本概念Spring.xml文件:

在xml文件进行Dao配置,把Dao作为组件(component)注册到Spring容器(container)中。

要使用Dao功能,对已注册的Dao,必须进行AOP的应用。

Dao实体配置文件部分内容如下所示:

miniDaoHandlerP-22MiniDao的安装及基本概念(7)MiniDao的基本概念MiniDao的执行:

执行Dao的基本方法如下所示:

1.以spring.xml文件中配置需要管理的Dao接口,将Dao注册进Spring容器中2.从Spring容器中调用getBean,取得已注册的Dao3.执行所得到的Dao的方法(method)P-23MiniDao的安装及基本概念(8)importorg.springframework.beans.factory.BeanFactory;importorg.springframework.context.support.ClassPathXmlApplicationContext;importexamples.dao.JeecgDemoDao;importexamples.entity.JeecgDemo;publicclassClientpublicstaticvoidmain(Stringargs)BeanFactoryfactory=newClassPathXmlApplicationContext(applicationContext.xml);JeecgDemoDaojeecgDemoDao=(JeecgDemoDao)factory.getBean(jeecgDemoDao);JeecgDemoentity=newJeecgDemo();entity.setId(402880e7408c7c5001408c7c52400000);entity.setAge(20999);entity.setUserName(zhangdaihao12121);JeecgDemos=jeecgDemoDao.getByHiber(402880e7408c9b1601408c9b179a0000);System.out.println(s.getUserName();P-24MiniDao的使用介绍JavaBeans和表关联的常量声明(TABLE注释)要和表进行关联,使用TABLE注释。

TABLE注释使用以下的形式进行常量声明:

Table(name=jeecg_demo)这也可以用于定义schema。

schema名为“SCOTT”的场合,声明如下所示:

Table(name=jeecg_demo,schema=scott)P-25MiniDao的使用介绍

(2)JavaBeans和列项关联的常量声明(COLUMN注释)要和表的列项进行关联,使用COLUMN注释。

Column(name=USER_NAME,nullable=false)publicjava.lang.StringgetUserName()returnthis.userName;P-26MiniDao的使用介绍(3)JavaBeans和其他的表结合时指定为键(key)的常量声明(N:

1映射)ManyToOne(fetch=FetchType,cascade=CascadeType)可选ManyToOne表示一个多对一的映射,该注解标注的属性通常是数据库表的外键optional:

是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为truefetch:

表示抓取策略,默认为FetchType.EAGERcascade:

表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作targetEntity:

表示该属性关联的实体类型.该属性通常不必指定,ORM框架根据属性类型自动判断targetEntity.示例:

/订单Order和用户User是一个ManyToOne的关系/在Order类中定义ManyToOne()JoinColumn(name=USER)publicUsergetUser()returnuser;P-27MiniDao的使用介绍(4)JavaBeans对应于列项(column)的实例(instance)变量声明列项的值用Bean的实例变量表示。

实例变量的声明方式有两种。

作为JavaBeans的属性的声明方式gettermethodpublic类型get属性名()settermethodpublicvoidset属性名(参数)作为public字段的声明方式P-28MiniDao的使用介绍(5)Dao方法(method)的定义虽然通过调用Dao里定义的方法(method),可以执行相应的SQL文件中记述的SQL指令,但是在更新处理和检索处理中需要遵循各自的方法命名规约。

方法(method)名必须以右表中列出的单词开头处理名称插入insert,add,create更新update,modify,store删除delete,remove批处理batch检索以上各单词之外P-29MiniDao的使用介绍(6)DaoINSERT处理进行INSERT处理的方法名,必须以insert,add,create开头。

返回值可以指定为void或者int。

int的场合,返回值为更新的行数。

参数类型与实体(Entity)的类型要一致。

publicvoidinsert(Departmentdepartment);publicintaddDept(Departmentdepartment);publicvoidcreateDept(Departmentdepartment);P-30MiniDao的使用介绍(7)DaoUPDATE处理进行UPDATE处理的方法名,必须以update,modify,store开头。

返回值可以指定为void或者int。

int的场合,返回值为更新的行数。

参数类型与实体(Entity)的类型要一致。

publicintupdate(Departmentdepartment);publicintmodifyDept(Departmentdepartment);publicvoidstoreDept(Departmentdepartment);P-31MiniDao的使用介绍(10)DaoDELETE处理进行DELETE处理的方法名,必须以delete,remove开头。

返回值可以为void或者int类型。

int的场合,返回值为更新的行数。

参数类型与实体(Entity)的类型要一致。

publicvoiddelete(Departmentdepartment);publicintremoveDept(Departmentdepartment);P-32MiniDao的使用介绍(11)Dao检索(SELECT)处理进行检索处理的场合,要指定返回值的类型。

返回值的类型是java.util.List的实装的场合,SELECT指令将返回实体(Entity)的列表(List)。

返回值是实体(Entity)型的数组(array)的场合,返回实体数组(Entityarray)。

返回值的类型是实体(Entity)的场合,将返回实体(Entity)。

publicListselectList(intdeptno);publicDepartmentselectArray(intdeptno);P-33MiniDao的使用介绍(12)Dao检索(SELECT)处理除了实体(Entity)以外,还可以利用DTO或者Map作为检索处理的返回值。

返回值为DTO类型的列表(List)的场合,将返回DTO的列表(List)。

返回值为DTO类型的数组(Dto)的场合,将返回DTO的数组(array)。

返回值为Map类型的列表(List)的场合,将返回Map的列表(List)。

返回值为Map类型的数组(Map)的场合,将返回Map的数组(array)。

publicListselectAsDtoList(intdeptno);publicEmpDtoselectAsDtoArray(intdeptno);publicListselectAsMapList(intdeptno);publicMapselectAsMapArray(intdeptno);P-34MiniDao的使用介绍(13)Dao检索(SELECT)处理除此以外的场合,MiniDao还想定了这样一种情况,也即,像SELECTcount(*)FROMemp这样的指令,返回值为1行只有一个列项值的情况。

publicintselectCountAll();P-35MiniDao的使用介绍(14)DaoArguments注释标签使用Arguments注释指定方法(method)的参数名,这样就可以在SQL指令中引用方法(method)的参数。

Arguments(empno,name)MapgetMap(Stringempno,Stringname);方法(method)的参数与表的列名相对应的场合,在参数名中指定表的列名。

例如:

方法(method)的参数名是empno,表的列名是employeeno的场合,就指定为employeeno。

如果是有复数个参数的场合,则用逗号分隔。

P-36MiniDao的使用介绍(15)SQL文件(支持Freemarker语法)IF注解(comment)使用IF注解,可以根据相应的条件改变要执行的SQL指令。

IF注解的记法如下:

.例:

andempno=$employee.empno作为IF注解的条件为假的处理部分,使用ELSEIF注解。

条件为假的场合,使用.之后的部分P-37MiniDao的使用介绍(16)MiniDao实体Bean调用方法BeanFactoryfactory=newClassPathXmlApplicationContext(applicationContext.xml);EmployeeDaoemployeeDao=(EmployeeDao)factory.getBean(employeeDao);Employeeemployee=newEmployee();Listlist=employeeDao.getAllEmployees(employee);for(Mapmp:

list)System.out.println(mp.get(id);System.out.println(mp.get(name);System.out.println(mp.get(empno);System.out.println(mp.get(age);System.out.println(mp.get(birthday);System.out.println(mp.get(salary);P-38MiniDao的使用介绍(17)MiniDao测试分离SQLBeanFactoryfactory=newClassPathXmlApplicationContext(applicationContext.xml);EmployeeDaoemployeeDao=(EmployeeDao)factory.getBean(employeeDao);Employeeemployee=newEmployee();Listlist=employeeDao.getAllEmployees(employee);for(Mapmp:

list)System.out.println(mp.get(id);System.out.println(mp.get(name);System.out.println(mp.get(empno);System.out.println(mp.get(age);System.out.println(mp.get(birthday);System.out.println(mp.get(salary);P-39MiniDao的使用介绍(18)MiniDao测试实体Bean维护publicclassHiberClientpu

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2