数据访问

总结

 

 

 

 

 

 

 

 

分层的特点

每一层都有自己的职责

上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能

上一层调用下一层的功能,下一层不能调用上一层功能

分层开发的好处:

各层专注于自己功能的实现,便于提高质量

便于分工协作,提高开发效率

便于代码复用

便于程序扩展

 

 

开始流程:

1:建立数据库epet,建表;


2
:创建实体类,和相应的数据库的表是对应的;com.beiwo.epet.entity 

 

例如对应的代码如下:

package com.yang.epet.entity;

 

import java.io.Serializable;

/**

 *

 * 主人实体类

 * @author yang

 *

 * */

public class Master implements Serializable {

         /**

 *

 */

private static final long serialVersionUID = 1L;

private int id;

         private String loginIn;

         private String password;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getLoginIn() {

return loginIn;

}

public void setLoginIn(String loginIn) {

this.loginIn = loginIn;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

         

}

 

 

3:创建Dao的基类接口类BaseDao;com.beiwo.epet.dao.BaseDao

 

例如对应的代码如下:

package com.yang.epet.dao;

 

public interface BaseDao {

 

/**

 * 增 删 改的操作

 *update dog set name= ? ,password =?,where id=?

 *@param sql 预编译的sql语句

 *@param 预编译的sql语句中的‘?’参数的字符串数组

 *@return 影响的行数

 *

 * */

public int executeUpdate(String sql,Object[] param);

}

 

 

 

4:创建Dao的实现类BaseDaoImpl;com.beiwo.epet.dao.impl.BaseDaoImpl

 

例如对应的代码如下:

package com.yang.epet.dao.impl;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

 

import com.yang.epet.dao.BaseDao;

import com.yang.epet.util.DBUtils;

 

public class BaseDaoImpl implements BaseDao {

 

@Override

public int executeUpdate(String sql, Object[] param) {

// TODO Auto-generated method stub

int num=0;

Connection conn = null;

 

PreparedStatement pstmt = null;

 

//获取Connection

try {

conn = DBUtils.getConn();

pstmt = conn.prepareStatement(sql);

if (null !=param) {

for (int j = 0; j < param.length; j++) {

pstmt.setObject(j+1, param[j]);

}

}

num= pstmt.executeUpdate();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

 

DBUtils.closeAll(null, pstmt, conn);

}

 

return num;

}

 

}

 

 

 

5创建具体表的DaoPetDao;com.beiwo.epet.dao.PetDao

 

例如对应的代码如下:

 

package com.beiwo.epet.dao;

 

import java.util.List;

 

import com.beiwo.epet.entity.Pet;

 

public interface PetDao extends BaseDao{

 

/**

 * 保存宠物

 * @param pet

 * @return

 */

int save(Pet pet);

 

 

/**

 * 删除宠物

 * @param pet

 * @return

 */

int del(Pet pet);

 

/**

 * 更新宠物

 * @param pet

 * @return

 */

int update(Pet pet);

 

 

/**

 * 根据宠物的昵称查询

 * @param name

 * @return

 */

Pet getByName(String name);

 

 

/**

 * 根据宠物的昵称,查询宠物列表

 * @param name

 * @return

 */

List<Pet> findByName(String name);

 

/**

 * 根据宠物的类型,查询宠物列表

 * @param type

 * @return

 */

List<Pet> findByType(String type);

 

 

}

 

 

 

6 创具体表的Dao实现类,PetDaoMysqlImpl;com.beiwo.epet.dao.impl.PetDaoMysqlImpl

 

例如对应的代码如下:

 

package com.beiwo.epet.dao.impl;

 

import java.util.List;

 

import com.beiwo.epet.dao.PetDao;

import com.beiwo.epet.entity.Pet;

 

public class PetDaoOracleImpl extends BaseDaoImpl implements PetDao{

 

@Override

public int save(Pet pet) {

return 0;

}

 

@Override

public int del(Pet pet) {

return 0;

}

 

@Override

public int update(Pet pet) {

String sql="UPDATE pet SET status=0 WHERE id=?";

Object[] param={pet.getId()};

 

 

int result=this.executeUpdate(sql, param);

 

return result;

}

 

@Override

public Pet getByName(String name) {

return null;

}

 

@Override

public List<Pet> findByName(String name) {

return null;

}

 

@Override

public List<Pet> findByType(String type) {

return null;

}

 

}

 

 

 

7:  创建业务逻辑层的接口类,PetService;com.beiwo.epet.service.PetService

 

例如对应的代码如下:

 

package com.yang.epet.service;

 

public interface PetTypervice {

 

/**

 *

 * 显示宠物类型

 * */

public void showPetTyper();

 

/**

 *

 * 根据宠物的名称显示宠物的id

 * @param name

 * @return

 *

 *

 * */

 

public int findId(String name);

 

}

 

 

 

 

8:建业务逻辑层的接口实现类,PetServiceImpl;com.beiwo.epet.service.impl.PetServieImpl

 

例如对应的代码如下:

 

package com.yang.epet.service.impl;

import java.util.Scanner;

import com.yang.epet.dao.MasterDao;

import com.yang.epet.dao.impl.MasterDaoMySqlImpl;

import com.yang.epet.entity.Master;

import com.yang.epet.service.MasterService;

public class MasterServiceImpl implements MasterService {

public Master master = null;

@Override

public void longin() {

// TODO Auto-generated method stub

Scanner scanner = new Scanner(System.in);

 

//1.输入用户名

System.out.println("请输入用户名");

String loginId = scanner.next();

//2.输入密码

System.out.println("请输入密码");

String password = scanner.next();

 

MasterDao masterDao = new MasterDaoMySqlImpl();

Master master2 = new Master();

master2.setPassword(loginId);

master2.setLoginIn(password);

master = masterDao.finMaster(master2);

if (null !=master) {

System.out.println("登录成功");

}else {

System.out.println("登录失败");

}

}

@Override

public boolean longin(Master master) {

// TODO Auto-generated method stub

return false;

}

 

}

 

 

 

9: 创建测试类。

 

 

例如对应的代码如下:

 

package com.beiwo.epet.test;

 

import java.util.Scanner;

 

import org.junit.Test;

 

import com.beiwo.epet.entity.Master;

import com.beiwo.epet.service.MasterService;

import com.beiwo.epet.service.impl.MasterServiceImpl;

import com.beiwo.epet.service.impl.MasterServiceImpl2;

 

public class TestMasterDao {

 

@Test

public void testLogin(){

MasterService masterService=new MasterServiceImpl();

masterService.login();

 

}

 

@Test

public void testLogin2(){

Scanner scanner = new Scanner(System.in);

 

// 1.输入用户名

System.out.println("请输入用户名");

String loginId = scanner.next();

 

// 2.输入密码

System.out.println("请输入密码");

String password = scanner.next();

 

MasterService masterService=new MasterServiceImpl2();

Master master=new Master();

master.setLoginId(loginId);

master.setPassword(password);

 

boolean isLogin=masterService.login(master);

 

if(isLogin){

System.out.println("登陸成功");

}else{

System.out.println("登陸失敗");

}

 

 

}

 

 

}

 

 

 

转载于:https://www.cnblogs.com/ynavigatorqcarsauto/p/6183392.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值