1. Dao层方法怎么写
dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的
service层是面向功能的,一个个功能模块比如说银行登记并完成一次存款,UI要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层
dao就是把数据存起来,之所以service的方法会有雷同只不过是因为service得需求不是很复杂不用再service里面完成太多包装或者处理过程可以直接调用dao的方法就完成的请求处理例如就要save一个对象,而这个对象是封装好的,dao里面有个方法专门save封装好的对象于是service的方法就仅仅调用一下就o了,函数签名自然很像了
service不能直接接触持久层,而dao是持久层或者直接访问持久层
有的时候只是为了分层清楚,为了将来scale up的时候方便我们才把service和dao分开,其实没必要分开的
2. mvc dao层,service层 到底怎么写
我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。
初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。
好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。
这就是MVC的意义。接下来说你感觉service的意义,其实因为你现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
再有不明白的追问,这是经验问题,呵呵,其实以后你就会懂。只是刚开始写的代码都是有个请求,我就去数据库取,业务几乎没有。
------------------------------------------------------------------------------虽然每分,但还是把自己的理解给LZ说说。怎么说呢,我不是理论帝。
所以我讲讲自己的理解比说你现在用的是SSH框架,做一个用户模块:1、假设现在你做这个功能会用到user表和权限表,那么你前台的页面访问action,action再去调用用户模块service,用户模块service判断你是操作user表还是权限表,如果你操作的是user表则service的实现类就去调用userDAO。如果是操作的是权限表则调用权限的DAO2、也就是说DAO一定是和数据库的每张表一一对应,而service则不是。
明白的没?其实你一个项目一个service和一个DAO其实也一样可以操作数据库,只不过那要是表非常多,出问题了,那找起来多麻烦,而且太乱了3、好处就是你的整个项目非常系统化,和数据库的表能一致,而且功能模块化,这样以后维护或者改错比较容易,性能也高一些--------------------------------------------------------------------------简单的说DAO层是跟数据库打交道的,service层是处理一些业务流程的,至于你说的为什么要用service层封装,我认为:一般来说,某一个程序的有些业务流程需要连接数据库,有些不需要与数据库打交道而直接是一些业务处理,这样就需要我们整合起来到service中去,这样可以起到一个更好的开发与维护的作用,同时也是MVC设计模式中model层功能的体现-------------------------------------------------------------------------------初级DAO模式:例如::写一个类 操作1张表 针对这张表的所有操作都以方法的形式写在这个类中 1个操作对应1个方法要求是外部通过调用这个类的方法达到操作某张表的目的时不需要写任何和数据库以及JDBC相关的代码,这个类的命名就是XXDAO比如表叫做 t_goods 商品表那么操作它的DAO就叫GoodsDAO高级DAO模式:例如:即DAO工厂模式,多个XXDAO实现同一个接口或者继承同一个基类,编写一个工厂类通过工厂模式(简单工厂模式或利用反射动态加载均可)获得接口或基类对象,内部实际上封装返回的是具体的XXDAO类的对象。简单的说即是在1的基础上将创建具体的XXDAO对象的方式由new变为工厂模式实现例如:UserDAO dao = DAOFactory.create(。
);dao.save()dao.delete。.-------------------------------------------------------------------------1.有一个dao接口,里面有平时的增删查该的方法2.有一个具体的实体类3.有一个dao的实现类,有对实体操作的方法,继承1的接口4.如果有需要,还可以有一个工厂类,负责生产dao实现类---------------------------------------------------------------------------DAO层一般有接口和该接口的实现类! 接口用于规范实现类! 实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类DAO类!-----------------------------------------------------------------------------com.公司名.系统名.模块名 代码目录结构Action : 负责页面逻辑,将调用service的结果返回到页面中Service : 接口定义---impl 接口的实现,负责业务逻辑Domain 对应数据库表的pojoDao : 只负责连接数据库,从数据库中查询结果,包装成对象后返回util :工具类。
3. dao层的父接口ibasedao怎么写
接口是为了屏蔽不同数据库的JDBC实现差异而出现的。
以常见的系统组织结构为例,管理系统里有一个部门department表用于存放部门信息,因为部门下面可能有子部门所以表中的字段要定义成类似树形结构的方式(parentId呀什么的)。这时我们想在java中用sql去查询指定部门下的数据,你就要考虑不同数据库的SQL语句的问题了:Oracle sql提供了树查询的方法,你只需要发一句sql就能查询出该部门下的所有子部门信息;但是mysql就不行,mysql就只能通过java递归一条一条查询。那么假如我们的系统即要支持Oracle又要支持mysql,这时我们查询部门怎么办呢?这时就要考虑接口,看下面的代码:
首先定义一个部门接口,该接口有一个findDept方法用于查询部门下的所有子部门
Interface DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId);
}
有了接口,我们就需要有实现类了,这时我们为了考虑兼容性就需要编写两套接口类,一个是用mysql语句实现的类,另一个是用Oracle实现的类:
class MySqlDepartmentDaoImpl implement DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId){String sql="mysql的sql语句"。..}
}
class OracleDepartmentDaoImpl implement DepartmentDao{
//根据父部门ID查询部门下的所有子部门
public List findDept(int deptId){String sql="Oracle的sql语句"。..}
}
一个Dao工厂,这个工厂返回部门Dao接口的实例
class DaoFactory{
public DepartmentDao getDepartmentDao(){
if(使用的是Mysql数据库){
return new MySqlDepartmentDaoImpl ();
}else{
return new OracleDepartmentDaoImpl ();
}
}
}
上面的编码DaoFactory是关键,通过这个这个工厂只返回给我们接口实例,这样就屏蔽了不同数据库的差异性(如果用户使用的是mysql数据库就会返回new MySqlDepartmentDaoImpl ()反之为new OracleDepartmentDaoImpl ())。我们在编码中只需要通过DepartmentDao deptDao = DaoFactory.getDepartmentDao();deptDao.findDept就可以查询我们需要的数据了。
所以面向接口编程是很重要的东西,建议你学习一下spring的IOC,代码写多了你就明白接口的重要性了
4. hibernate的Dao层应该怎么改写
这种东西很常见,只是关于参数的问题的 可以这么实现,
比如你的参数是有1,2,3 那service层就写这3个参数的方法。
然后再dao层进行参数的判断,比如你只要查1,3限制条件的,
那service层上面层的action层里往service层传参数时候2应该是等于null,因为没有选2不是吗
那就在dao层对每个1,2,3参数进行判断
比如 1,3
可以写成
from XXX表
where
if(XXX1!=NULL){写1的限制}else{}
if(XX2!=null){写2的限制}else{}
if(xxx3!=null){写3的限制}else{}
只是在正常的共用语句之前进行了判断
希望对你有所帮助
5. 用 String 注解Dao 层,用main方法测试怎么写
如果Spring管理Dao,则不能使用原有的直接实例化的方式得到Dao对象,而必须是通过创建Spring配置文件对象的方式,从配置文件中提取出dao对象的方式,代码如下:
public static void main(String[] args){
//得到Spring配置文件对象
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//从配置文件中取出id为udao的UserDao的对象
UserDao userDao=(UserDao)context.getBean("udao");
List<User> list=userDao.getUsers();
}
6. hibernate的Dao层应该怎么改写
这种东西很常见,只是关于参数的问题的 可以这么实现,比如你的参数是有1,2,3 那service层就写这3个参数的方法。
然后再dao层进行参数的判断,比如你只要查1,3限制条件的,那service层上面层的action层里往service层传参数时候2应该是等于null,因为没有选2不是吗那就在dao层对每个1,2,3参数进行判断比如 1,3可以写成 from XXX表whereif(XXX1!=NULL){写1的限制}else{}if(XX2!=null){写2的限制}else{}if(xxx3!=null){写3的限制}else{}只是在正常的共用语句之前进行了判断希望对你有所帮助。
7. java中Dao模式怎么分的层 啊
你好,你的问法本身有些不妥,dao就属于应用中的一层。可能你想说的是以下的情况:
初级DAO模式:
例如::写一个类 操作1张表 针对这张表的所有操作都以方法的形式写在这个类中 1个操作对应1个方法要求是外部通过调用这个类的方法达到操作某张表的目的时不需要写任何和数据库以及JDBC相关的代码,这个类的命名就是XXDAO
比如表叫做 t_goods 商品表那么操作它的DAO就叫GoodsDAO
高级DAO模式:
例如:即DAO工厂模式,多个XXDAO实现同一个接口或者继承同一个基类,编写一个工厂类通过工厂模式(简单工厂模式或利用反射动态加载均可)获得接口或基类对象,内部实际上封装返回的是具体的XXDAO类的对象。简单的说即是在1的基础上将创建具体的XXDAO对象的方式由new变为工厂模式实现
例如:UserDAO dao = DAOFactory.create(。);
dao.save()
dao.delete。.