java web开发时dao和model层里写什么内容

java web开发时dao和model层里写什么内容,第1张

model 翻译成中文叫模型层也叫实体层 是net里使用的三层架构中的与数据库中表对应的类
java中一般叫entity
里边主要是实体类 也就是对应数据库表中的类 每个表对应一个实体类 每个字段对应实体类中的一个属性
dao 数据访问层 Mvc 结构编程中访问数据库的层 一般连接数据库 的代码都写在这里边

AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,
下面就对Spring Data相关知识作一个较为详细的描述。
1Spring Data所解决的问题
Spring Data :提供了一整套数据访问层(DAO)的解决方案,
致力于减少数据访问层(DAO)的开发量。
它使用一个叫作Repository的接口类为基础,
它被定义为访问底层数据模型的超级接口。
而对于某种具体的数据访问 *** 作,则在其子接口中定义。
public interface Repository<T, ID extends Serializable> {
}
所有继承这个接口的interface都被spring所管理,此接口作为标识接口,功能就是用来控制domain模型的。
Spring Data可以让我们只定义接口,只要遵循spring data的规范,就无需写实现类。
2什么是Repository?
21 Repository(资源库):通过用来访问领域对象的一个类似集合的接口,
在领域与数据映射层之间进行协调。这个叫法就类似于我们通常所说的DAO,
在这里,我们就按照这一习惯把数据访问层叫Repository
Spring Data给我们提供几个Repository,基础的Repository提供了最基本的数据访问功能,
其几个子接口则扩展了一些功能。它们的继承关系如下:
Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别
CrudRepository: 继承Repository,实现了一组CRUD相关的方法
PagingAndSortingRepository: 继承CrudRepository,实现了一组分页排序相关的方法
JpaRepository: 继承PagingAndSortingRepository,实现一组JPA规范相关的方法
JpaSpecificationExecutor: 比较特殊,不属于Repository体系,实现一组JPA Criteria查询相关的方法

import javautilList;
import comicssxxxdomainUser;
public interface UserDAO {
public int login(User user);

public User queryUser(String userId) throws Exception;

public int updateUser(User user);

public int addUser(User user);

public int deleteUser(String userId) throws Exception;

public List getAllUsers();

public User getUser(String userName) throws Exception;

}
---------------------------------------
下面是实现类
import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javasqlStatement;
import javautilArrayList;
import javautilList;
import comxxxxxxcommonConnectionFactory;
import comxxxxxxcommonDatabaseUtils;
import comxxxxxxdaoUserDAO;
import comxxxxxxdomainUser;
public class UserDAOImpl implements UserDAO {
public List getAllUsers() {
Connection conn=ConnectionFactorygetConnection();
List users=new ArrayList();
Statement stmt=null;
ResultSet rs=null;
try {
stmt=conncreateStatement();
rs=stmtexecuteQuery("select from training");
User user=null;
while(rsnext()){
user=new User();
usersetUserId(rsgetString("userid"));
usersetUserName(rsgetString("username"));
usersetUserPass(rsgetString("userpass"));
usersadd(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{
DatabaseUtilsrelease(rs, stmt, conn);
}
return users;
}
public int login(User user) {
int flag=0;
Connection conn=ConnectionFactorygetConnection();
PreparedStatement pstm=null;
ResultSet rs=null;
try {
pstm=connprepareStatement("select from train_user where user_name= and user_pass=");
pstmsetString(1, usergetUserName());
pstmsetString(2, usergetUserPass());
rs=pstmexecuteQuery();
if(rsnext()){
if(rsgetString("admin")equals("1")){
flag=1;
}else if(rsgetString("admin")equals("0")){
flag=2;
}else{
flag=0;
};
}
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{
DatabaseUtilsrelease(rs, pstm, conn);
}
return flag;
}
public User queryUser(String userId) {

Connection conn = ConnectionFactorygetConnection();
PreparedStatement pstm = null;
ResultSet rs = null;
User user = null;

try {

pstm = connprepareStatement("select from test where userid=");
pstmsetString(1, userId);
rs = pstmexecuteQuery();
if(rsnext()){
user = new User();
usersetUserId(rsgetString("userid"));
usersetUserName(rsgetString("username"));
usersetUserPass(rsgetString("userPass"));

}

} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{

DatabaseUtilsrelease(rs, pstm, conn);
}
return user;
}
public int updateUser(User user) {

Connection conn = ConnectionFactorygetConnection();
PreparedStatement pstm = null;
ResultSet rs = null;

int flag = 0;
try {

pstm = connprepareStatement("update test set username=, userpass= where userid=");

pstmsetString(1, usergetUserName());

pstmsetString(2, usergetUserPass());

pstmsetString(3, usergetUserId());

flag = pstmexecuteUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{

DatabaseUtilsrelease(rs, pstm, conn);
}
return flag;
}
public int addUser(User user) {
Connection conn=ConnectionFactorygetConnection();
PreparedStatement pstm=null;
int flag=0;
try {
pstm=connprepareStatement("insert into train_user(user_id,user_name,user_pass,train_id,train_nature,admin) values(,,,,,0)");
pstmsetString(1,usergetUserId());
pstmsetString(2,usergetUserName());
pstmsetString(3,usergetUserPass());
pstmsetString(4,usergetTrain_id());
pstmsetString(5,usergetTrain_nature());
pstmexecuteUpdate();
flag=1;
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{

DatabaseUtilsrelease(null, pstm, conn);
}
return flag;
}
public int deleteUser(String userId) throws Exception {

Connection conn = ConnectionFactorygetConnection();
PreparedStatement pstm = null;
int flag = 0;
try {

pstm = connprepareStatement("delete from test where userid=");

pstmsetString(1, userId);

flag = pstmexecuteUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{

DatabaseUtilsrelease(null, pstm, conn);
}
return flag;

}
public User getUser(String userName) throws Exception {
// TODO Auto-generated method stub
return null;
}
}

DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
DAO的功能:
1 DAO用来封装Data Source的就比如,Connection conn = DAOFacotrycreateConnection();
就可以把Driver URL username, passpword这一些放在DAO中
以后要更改数据库的类型比如要把MSSQL换成Oracle的话,只需要更改DAOFacory里面的getConnection()里面的DriverURL之类的。
2 DAO也是把对数据库的 *** 作(比如最基本的CRUD *** 作)全部封装在里面
比如说要要插入一个新的用户,那么在DAO中只需要提供一个insertUser(User user)这一个方法就可以了,具体的 *** 作是在DAO中实现的。
那么对于要调用DAO的时候只要知道insertUser(User)是用来插入一个新的用户,而不需要知道是如何实现的。

Dao是数据访问层,用来保存数据。
Service是业务逻辑处理的。
 我们开发程序的目的是为了完成业务功能, 理想的情况下程序中的每一条语句都应该是与业务直接相关的, 例如程序中不应该出现连接数据库, 读取某个字段等纯技术性的 *** 作, 而应该是得到用户A的基本信息等具有业务含义的 *** 作 dao(data access object)层存在的意义在于将与数据持久化相关的函数调用剥离出去, 提供一个具有业务含义的封装层 原则上说, dao层与utils等帮助类的功能非常类似, 只是更加复杂一些, 需要依赖更多的对象(如DataSource, SessionFactory)等 如果不需要在程序中屏蔽我们对于特定数据持久层技术的依赖, 例如屏蔽对于Hibernate的依赖, 在dao层我们没有必要采用接口设计 一些简单的情况下我们甚至可以取消整个dao层, 而直接调用封装好的一些通用dao *** 作函数, 或者调用通用的EntityDao类等
    程序开发的过程应该是从业务对象层开始的, 并逐步将纯技术性的函数调用剥离到外部的帮助类中, 同时我们会逐渐发现一些业务 *** 作的特定组合也具有明确的含义, 为了调用的方便, 我们会把它们逐步补充到service层中 在一般的应用中, 业务逻辑很难稳定到可以抽象出接口的地步, 即一个service接口不会对应于两个不同的实现, 在这种情况下使用接口往往也是没有必要的
    
    在使用spring的情况下原则上应该避免使用getBean的调用方式, 应该尽量通过注入来获得依赖对象, 但有时我们难免需要直接获取业务对象, 在不使用接口的情况下可以采用如下方式
    class TaskService{
        public static TaskService getInstance(){
            return (TaskService)BeanLoadergetBean(TaskServiceclass);
        }
    }
    在程序中我们可以直接使用TaskServicegetInstance()来得到TaskService对象通过命名规范的约定, 我们可以从类名推导出spring配置文件中的对象名, 因而不需要使用一个额外的硬编码字符串名


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12623282.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存