请问java项目 里的DAO,model,service, IMPL 是啥意思,以及有啥关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问java项目 里的DAO,model,service, IMPL 是啥意思,以及有啥关系相关的知识,希望对你有一定的参考价值。
有谁能写的详细点,深刻点,我提高悬赏
在一般工程中 基本上都会出现上述的字眼首先 DAO 提供了应用程序与数据库之间的操作规范 和操作 用于通常数据库的增删查改 一般如果使用框架 都是由框架自动生成,提高访问效率和便于快速开发。hibernate的DAO中 提供了关于事物 数据读取 修改 删除 添加 这些逻辑 还依赖于下面提到的Model
Model 为了便于理解业务和代码可读 美观 通常将数据库表 作为对象封装,对象封装中提供属性 一般操作DAO类的时候 传入的是Model 通过 hibernate的映射文件 映射到数据库字段也就是通常说的 通过实体类操作数据库
IMPL 以IMPL 结尾的类 一般是实现了某个或多个接口的类 这些类的接口 是定义了一些规范的类通常是数据访问等等 在service 中 会通过spring的注入 注入这些接口来实现逻辑
service 一般在service的实现类 会出现在action中。这些service 提供了包含逻辑的数据访问
举个例子 在 项目中需要将查询出来的所有数据的某个值加1 那么 在service 中 就会做一次循环 从查询出来的Model 集合中 将值取出来 +1
它们的协作关系如下
web页面--->Action---->service---->interface---->IMPL---->DAO---->DATABASE 参考技术A DAO : data access object 与数据库交互的相关JAVA代码写在这,比如对DATABASE的增删改查; model:存放模型,通常是实体BEAN,也就是你业务建模分析出来的那些 actor等实物类; service:是后来网上大多数人经验总结出来,从而增加了这么一个层次,主要是为了降低耦合,面向接口、组件编程,具体的服务类,能产生实际效果和影响的类放于此; 参考技术B DAO层主要与数据库打交道,实现数据交互
model主要是一些javaben类,定义定的方法和属性,实现类的封装,以便于其他类调用它
service主要是一些方法,处理业务逻辑,接收dao里面的方法及获取model中类的属性或方法
impl是一些借口,供dao层或service层实现
之所以分这么多层,就是为了它们程序中层次分明,各司其职,其中的一层出了问题不会对其他层有太大影响,实现了高内聚、低耦合。 参考技术C 是SSH架构的工程吗?代表了三层吧,model是实例,service提供各种方法,dao实现各种方法,impl指implement,即实现,service和dao都需要impl,dao内部的方法一般是实现与数据库交互的,而model一般就是数据库中表的实例追问
工程是SSH架构的,能在详细说下各层的调用关系吗
追答额,貌似楼下理解得比较深刻,我是个菜鸟,你还是问楼下吧,sorry
参考技术D DAO层里面一般是数据库的操作model层里面一般是一些JavaBean,定义一些类对象
impl层定义一些了接口
service层的话一般可以不用
03_java基础之综合练习与考核评估
25.综合练习之车站业务分析
完成步骤:
需求: 以车站业务对车票做增删改查操作
1.建立数据库
2.建立车票表
3.建立java项目结构(model\\dao\\service\\test)
4.创建model
5.创建dao(接口和实现)并实现测试
6.创建service(接口实现)
26.综合练习之数据库与表建立
27.项目标准结构创建
28\\29\\30\\31.综合练习之代码实现
1.model
1 package com.day03.station.model; 2 3 /** 4 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 5 * 疑问咨询wx:851298348 6 */ 7 public class Ticket { 8 private Integer id; 9 private String startStation; 10 private String stopStation; 11 private String startTime; 12 private Integer ticketPrice; 13 14 public Integer getId() { 15 return id; 16 } 17 18 public void setId(Integer id) { 19 this.id = id; 20 } 21 22 public String getStartStation() { 23 return startStation; 24 } 25 26 public void setStartStation(String startStation) { 27 this.startStation = startStation; 28 } 29 30 public String getStopStation() { 31 return stopStation; 32 } 33 34 public void setStopStation(String stopStation) { 35 this.stopStation = stopStation; 36 } 37 38 public String getStartTime() { 39 return startTime; 40 } 41 42 public void setStartTime(String startTime) { 43 this.startTime = startTime; 44 } 45 46 public Integer getTicketPrice() { 47 return ticketPrice; 48 } 49 50 public void setTicketPrice(Integer ticketPrice) { 51 this.ticketPrice = ticketPrice; 52 } 53 }
2.dao接口
1 package com.day03.station.dao; 2 3 import com.day03.station.model.Ticket; 4 5 import java.util.List; 6 7 /** 8 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 9 * 疑问咨询wx:851298348 10 */ 11 public interface ITicketDao { 12 //增加 13 public void save(Ticket ticket); 14 //删除 根据id删除 15 public void delete(Integer id); 16 17 //修改 18 public void update(Ticket ticket); 19 //查找 查单个 根据id查询 20 public Ticket queryById(Integer id); 21 //查找多个 (集合装)List 22 public List<Ticket> queryAll(); 23 }
3.dao实现
1 package com.day03.station.dao.impl; 2 3 import com.day03.station.dao.ITicketDao; 4 import com.day03.station.model.Ticket; 5 6 import java.sql.Connection; 7 import java.sql.DriverManager; 8 import java.sql.PreparedStatement; 9 import java.sql.ResultSet; 10 import java.util.ArrayList; 11 import java.util.List; 12 13 /** 14 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 15 * 疑问咨询wx:851298348 16 */ 17 public class TicketDao implements ITicketDao { 18 @Override 19 public void save(Ticket ticket) { 20 21 try { 22 23 //1.加载 24 Class.forName("com.mysql.jdbc.Driver"); 25 //2.链接 26 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_data", "root", "admin"); 27 //3.创建编译语句 28 String sql="INSERT INTO ticket (start_station,stop_station,start_time,ticket_price) VALUES (?,?,?,?)"; 29 PreparedStatement preparedStatement = connection.prepareStatement(sql); 30 //设置参数 31 preparedStatement.setString(1,ticket.getStartStation()); 32 preparedStatement.setString(2,ticket.getStopStation()); 33 preparedStatement.setString(3,ticket.getStartTime()); 34 preparedStatement.setInt(4,ticket.getTicketPrice()); 35 //4.执行 36 preparedStatement.executeUpdate(); 37 //5.释放资源 38 preparedStatement.close(); 39 connection.close(); 40 } catch (Exception e) { 41 e.printStackTrace(); 42 } 43 44 } 45 46 @Override 47 public void delete(Integer id) { 48 try { 49 50 //1.加载 51 Class.forName("com.mysql.jdbc.Driver"); 52 //2.链接 53 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_data", "root", "admin"); 54 //3.创建编译语句 55 String sql="DELETE FROM ticket WHERE id=?"; 56 PreparedStatement preparedStatement = connection.prepareStatement(sql); 57 //设置参数 58 preparedStatement.setInt(1,id); 59 //4.执行 60 preparedStatement.executeUpdate(); 61 //5.释放资源 62 preparedStatement.close(); 63 connection.close(); 64 } catch (Exception e) { 65 e.printStackTrace(); 66 } 67 } 68 69 @Override 70 public void update(Ticket ticket) { 71 try { 72 73 //1.加载 74 Class.forName("com.mysql.jdbc.Driver"); 75 //2.链接 76 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_data", "root", "admin"); 77 //3.创建编译语句 78 String sql="UPDATE ticket SET ticket_price=? WHERE id=?"; 79 PreparedStatement preparedStatement = connection.prepareStatement(sql); 80 //设置参数 81 preparedStatement.setInt(1,ticket.getTicketPrice()); 82 preparedStatement.setInt(2,ticket.getId()); 83 84 //4.执行 85 preparedStatement.executeUpdate(); 86 //5.释放资源 87 preparedStatement.close(); 88 connection.close(); 89 } catch (Exception e) { 90 e.printStackTrace(); 91 } 92 } 93 94 @Override 95 public Ticket queryById(Integer id) { 96 //准备一个对象,装获取到的结果数据 97 Ticket ticket = new Ticket(); 98 try { 99 100 //1.加载 101 Class.forName("com.mysql.jdbc.Driver"); 102 //2.链接 103 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_data", "root", "admin"); 104 //3.创建编译语句 105 String sql="SELECT id,start_station,stop_station,start_time,ticket_price FROM ticket WHERE id=?"; 106 PreparedStatement preparedStatement = connection.prepareStatement(sql); 107 //设置参数 108 preparedStatement.setInt(1,id); 109 //4.执行 110 ResultSet resultSet = preparedStatement.executeQuery(); 111 //解析结果集 112 while (resultSet.next()){ 113 //取id 114 int id1 = resultSet.getInt("id"); 115 //取开始车站 116 String startStation = resultSet.getString("start_station"); 117 //取到达车站 118 String stopStation = resultSet.getString("stop_station"); 119 //取发车时间 120 String startTime = resultSet.getString("start_time"); 121 //取车票价格 122 int ticketPrice = resultSet.getInt("ticket_price"); 123 //封装到对象里面去 124 ticket.setId(id1); 125 ticket.setStartStation(startStation); 126 ticket.setStopStation(stopStation); 127 ticket.setStartTime(startTime); 128 ticket.setTicketPrice(ticketPrice); 129 130 } 131 132 //5.释放资源 133 preparedStatement.close(); 134 connection.close(); 135 } catch (Exception e) { 136 e.printStackTrace(); 137 } 138 return ticket; 139 } 140 141 @Override 142 public List<Ticket> queryAll() { 143 //准备一个对象,装获取到的结果数据 144 //Ticket ticket = new Ticket(); 145 //准备一个可以装多个对象的对象来装多个车票对象==>集合对象List 146 List<Ticket> list=new ArrayList<>(); 147 //list.add(); 添加 148 //list.get(); 取 149 try { 150 151 //1.加载 152 Class.forName("com.mysql.jdbc.Driver"); 153 //2.链接 154 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_data", "root", "admin"); 155 //3.创建编译语句 156 String sql="SELECT id,start_station,stop_station,start_time,ticket_price FROM ticket"; 157 PreparedStatement preparedStatement = connection.prepareStatement(sql); 158 //设置参数 159 160 //4.执行 161 ResultSet resultSet = preparedStatement.executeQuery(); 162 //解析结果集 163 while (resultSet.next()){ 164 //取id 165 int id1 = resultSet.getInt("id"); 166 //取开始车站 167 String startStation = resultSet.getString("start_station"); 168 //取到达车站 169 String stopStation = resultSet.getString("stop_station"); 170 //取发车时间 171 String startTime = resultSet.getString("start_time"); 172 //取车票价格 173 int ticketPrice = resultSet.getInt("ticket_price"); 174 //封装到对象里面去 175 Ticket ticket = new Ticket(); 176 ticket.setId(id1); 177 ticket.setStartStation(startStation); 178 ticket.setStopStation(stopStation); 179 ticket.setStartTime(startTime); 180 ticket.setTicketPrice(ticketPrice); 181 182 //将车票对象装入集合对象里面 183 list.add(ticket); 184 185 } 186 187 //5.释放资源 188 preparedStatement.close(); 189 connection.close(); 190 } catch (Exception e) { 191 e.printStackTrace(); 192 } 193 return list; 194 } 195 }
4.dao测试
1 package com.day03.station.testDao; 2 3 import com.day03.station.dao.impl.TicketDao; 4 import com.day03.station.model.Ticket; 5 import org.junit.Test; 6 7 import java.util.List; 8 9 /** 10 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 11 * 疑问咨询wx:851298348 12 */ 13 public class TestTicketDao { 14 TicketDao ticketDao = new TicketDao(); 15 //测试车票保存 16 @Test 17 public void testSave(){ 18 //1.创建dao对象 19 //TicketDao ticketDao = new TicketDao(); 20 //2.调用dao方法 21 Ticket ticket = new Ticket(); 22 //赋值 23 ticket.setStartStation("南充"); 24 ticket.setStopStation("成都"); 25 ticket.setStartTime("2018-05-20 13:14:00"); 26 ticket.setTicketPrice(99); 27 ticketDao.save(ticket); 28 } 29 @Test 30 public void testDelete(){ 31 ticketDao.delete(5); 32 } 33 @Test 34 public void testUpdate(){ 35 Ticket ticket = new Ticket(); 36 ticket.setTicketPrice(120); 37 ticket.setId(2); 38 ticketDao.update(ticket); 39 } 40 @Test 41 public void testQueryById(){ 42 Ticket ticket = ticketDao.queryById(2); 43 System.out.println("ticket="+ticket); 44 } 45 @Test 46 public void testQuery(){ 47 List<Ticket> tickets = ticketDao.queryAll(); 48 System.out.println("tickets="+tickets); 49 50 } 51 52 }
5.service接口
1 package com.day03.station.service; 2 3 import com.day03.station.model.Ticket; 4 5 import java.util.List; 6 7 /** 8 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 9 * 疑问咨询wx:851298348 10 */ 11 public interface ITicketService { 12 //增加 13 public void save(Ticket ticket); 14 //删除 根据id删除 15 public void delete(Integer id); 16 17 //修改 18 public void update(Ticket ticket); 19 //查找 查单个 根据id查询 20 public Ticket queryById(Integer id); 21 //查找多个 (集合装)List 22 public List<Ticket> queryAll(); 23 }
6.service实现
1 package com.day03.station.service.impl; 2 3 import com.day03.station.dao.impl.TicketDao; 4 import com.day03.station.model.Ticket; 5 import com.day03.station.service.ITicketService; 6 7 import java.util.List; 8 9 /** 10 * 课程笔记:http://www.cnblogs.com/newAndHui/category/1153640.html 11 * 疑问咨询wx:851298348 12 */ 13 public class TicketService implements ITicketService { 14 TicketDao ticketDao = new TicketDao(); 15 16 @Override 17 public void save(Ticket ticket) { 18 //1.创建dao对象 19 //TicketDao ticketDao = new TicketDao(); 20 //2.调用dao方法 21 ticketDao.save(ticket); 22 } 23 24 @Override 25 public void delete(Integer id) { 26 ticketDao.delete(id); 27 } 28 29 @Override 30 public void update(Ticket ticket) { 31 ticketDao.update(ticket); 32 } 33 34 @Override 35 public Ticket queryById(Integer id) { 36 Ticket ticket = ticketDao.queryById(id); 37 38 return ticket; 39 } 40 41 @Override 42 public List<Ticket> queryAll() { 43 List<Ticket> tickets = ticketDao.queryAll(); 44 45 return tickets; 46 } 47 }
7.项目完成后的结构
以上是关于请问java项目 里的DAO,model,service, IMPL 是啥意思,以及有啥关系的主要内容,如果未能解决你的问题,请参考以下文章
web里的action、dao/model、service、util是干啥的?