date 数据|access 访问|object|entity实体|purchase购买|vehicle车辆|guide|invoice|
什么是持久化:持久化就是将程序中数据在瞬时状态将转换的机制
主要的持久化操作有哪些
什么是DAO模式,使用该模式有哪些优势:隔离了数据访问代码和业务逻辑代码隔离了不同数据库实现
DAO模式接口,DAO实现类,实体类,数据库连接和关闭
实现宠物主人登录页面SJLX1~2
package ch08;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 数据库连接与关闭工具类。
*/
public class BaseDao {
private static String driver; // 数据库驱动字符串
private static String url; // 连接URL字符串
private static String user; // 数据库用户名
private static String password; // 用户密码
Connection conn = null;// 数据连接对象
static{//静态代码块,在类加载的时候执行
init();
}
/**
* 初始化连接参数,从配置文件里获得
*/
public static void init(){
Properties params=new Properties();
String configFile = "database.properties";//配置文件路径
//加载配置文件到输入流中
InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);
try {
//从输入流中读取属性列表
params.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//根据指定的获取对应的值
driver=params.getProperty("driver");
url=params.getProperty("url");
user=params.getProperty("user");
password=params.getProperty("password");
}
/**
* 获取数据库连接对象。
*/
public Connection getConnection() {
if(conn==null){
// 获取连接并捕获异常
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();// 异常处理
}
}
return conn;// 返回连接对象
}
/**
* 关闭数据库连接。
* @param conn 数据库连接
* @param stmt Statement对象
* @param rs 结果集
*/
public void closeAll(Connection conn, Statement stmt,
ResultSet rs) {
// 若结果集对象不为空,则关闭
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 若Statement对象不为空,则关闭
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 若数据库连接对象不为空,则关闭
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 增、删、改的操作
* @param sql 预编译的 SQL 语句
* @param param 预编译的 SQL 语句中的‘?’参数的字符串数组
* @return 影响的行数
*/
public int exceuteUpdate(String preparedSql, Object[] param) {
PreparedStatement pstmt = null;
int num = 0;
conn = getConnection();
try {
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
pstmt.setObject(i + 1, param[i]); // 为预编译sql设置参数
}
}
num = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally{
closeAll(conn, pstmt, null);
}
return num;
}
}
/**
* 主人Dao接口。
*/
public interface MasterDao {
/**
* 保存主人信息。
* @param master 主人
*/
int save(Master master);
/**
* 删除主人信息。
* @param master 主人
*/
int del(Master master);
/**
* 更新主人信息。
* @param master 主人
*/
int update(Master master);
/**
* 查找指定登录名和密码的主人
* @param master 要查找的主人
* @return 主人
*/
Master findMaster(Master master);
}
import java.util.List;
import cn.jbit.epet.entity.Pet;
/**
* 宠物Dao接口。
*/
public interface PetDao {
/**
* 保存宠物。
* @param pet 宠物
*/
int save(Pet pet);
/**
* 删除宠物。
* @param pet 宠物
*/
int del(Pet pet);
/**
* 更新宠物。
* @param pet 宠物
*/
int update(Pet pet);
/**
* 获取指定昵称的宠物,精确查询。
* @param name 昵称
* @return 宠物
*/
Pet getByName(String name);
/**
* 获取指定昵称的宠物列表,模糊查询。
* @param name 昵称
* @return 宠物列表
*/
List findByName(String name);
/**
* 获取指定类型的宠物列表。
* @param type 宠物类型
* @return 宠物列表
*/
List findByType(String type);
}
package cn.jbit.epet.dao;
import java.util.List;
import cn.jbit.epet.entity.Pet;
/**
* 宠物Dao接口。
*/
public interface PetDao {
/**
* 保存宠物。
* @param pet 宠物
*/
int save(Pet pet);
/**
* 删除宠物。
* @param pet 宠物
*/
int del(Pet pet);
/**
* 更新宠物。
* @param pet 宠物
*/
int update(Pet pet);
/**
* 获取指定昵称的宠物,精确查询。
* @param name 昵称
* @return 宠物
*/
Pet getByName(String name);
/**
* 获取指定昵称的宠物列表,模糊查询。
* @param name 昵称
* @return 宠物列表
*/
List findByName(String name);
/**
* 获取指定类型的宠物列表。
* @param type 宠物类型
* @return 宠物列表
*/
List findByType(String type);
}
package cn.jbit.epet.entity;
/**
* 宠物主人类。
*/
public class Master {
private int id;// 主人id
private String name;// 登录名
private String password; // 登录密码
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package cn.jbit.epet.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import cn.jbit.epet.dao.BaseDao;
import cn.jbit.epet.dao.PetDao;
import cn.jbit.epet.entity.Pet;
/**
* PetDao针对MySQL数据库的实现类。
*/
public class PetDaoMySQLImpl extends BaseDao implements PetDao{
public int update(Pet pet) {
String sql="update pet set status=9 where id=?";
Object[] param={pet.getId()};
int result=this.exceuteUpdate(sql, param);
return result;
}
@Override
public List findByName(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public Pet getByName(String name) {
// TODO Auto-generated method stub
return null;
}
@Override
public List findByType(String type) {
// TODO Auto-generated method stub
return null;
}
@Override
public int save(Pet pet) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int del(Pet pet) {
// TODO Auto-generated method stub
return 0;
}
}
package cn.jbit.epet.manager;
import java.util.Scanner;
import cn.jbit.epet.dao.impl.MasterDaoMySQLImpl;
import cn.jbit.epet.entity.Master;
/**
* 主人业务类。
*/
public class MasterManager {
Master master=null; //主人
/**
* 主人登录。
*/
public void login() {
// 1、获得输入对象
Scanner input = new Scanner(System.in);
// 2、打印欢迎信息
System.out.println("---- 欢迎光临宠物乐园 ----");
// 3、获取用户输入的登录名、密码
System.out.print("请输入登录名:");
String loginId = input.next();
System.out.print("请输入密码:");
String password = input.next();
Master mas=new Master();
mas.setName(loginId);
mas.setPassword(password);
// 4、检查登录名、密码是否合法,并输出提示信息
MasterDaoMySQLImpl masterDao = new MasterDaoMySQLImpl();
master = masterDao.findMaster(mas);
if (master!=null) {
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误,登录失败!");
}
}
}
package cn.jbit.epet.test;
import cn.jbit.epet.manager.MasterManager;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
MasterManager masterManager = new MasterManager();
masterManager.login();
}
}
package cn.jbit.epet.dao;
import java.util.List;
import cn.jbit.epet.entity.Pet;
/**
* 宠物Dao接口。
*/
public interface PetDao {
/**
* 保存宠物。
* @param pet 宠物
*/
int save(Pet pet);
/**
* 删除宠物。
* @param pet 宠物
*/
int del(Pet pet);
/**
* 更新宠物。
* @param pet 宠物
*/
int update(Pet pet);
/**
* 获取指定昵称的宠物,精确查询。
* @param name 昵称
* @return 宠物
*/
Pet getByName(String name);
/**
* 获取指定昵称的宠物列表,模糊查询。
* @param name 昵称
* @return 宠物列表
*/
List findByName(String name);
/**
* 获取指定类型的宠物列表。
* @param type 宠物类型
* @return 宠物列表
*/
List findByType(String type);
}
package cn.jbit.epet.dao;
import java.util.List;
import cn.jbit.epet.entity.PetType;
public interface PetTypeDao {
List findPetType(); //查询宠物类型
int findIdByTypeName(String name); //根据类型名称查询类型编号
int save(PetType petType);
}
package cn.jbit.epet.entity;
import java.io.Serializable;
public class PetType implements Serializable {
private static final long serialVersionUID = 25874444741572L;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.jbit.epet.manager;
import java.util.List;
import cn.jbit.epet.dao.PetTypeDao;
import cn.jbit.epet.dao.impl.PetTypeMySQLImpl;
import cn.jbit.epet.entity.PetType;
public class PetTypeManager {
/**
* 显示宠物类型
*/
public void showPetType(){
PetTypeDao pTypeDao=new PetTypeMySQLImpl();
List list=pTypeDao.findPetType();
System.out.println("请选择宠物类型:");
for(PetType petType:list){
System.out.print(petType.getName()+" | ");
}
System.out.println();
}
public int findId(String name){
PetTypeDao pTypeDao=new PetTypeMySQLImpl();
return pTypeDao.findIdByTypeName(name);
}
}
package cn.jbit.epet.test;
import java.util.Scanner;
import cn.jbit.epet.dao.MasterDao;
import cn.jbit.epet.dao.PetDao;
import cn.jbit.epet.dao.impl.MasterDaoMySQLImpl;
import cn.jbit.epet.dao.impl.PetDaoMySQLImpl;
import cn.jbit.epet.entity.Master;
import cn.jbit.epet.entity.Pet;
import cn.jbit.epet.manager.PetTypeManager;
/**
* 测试类。
*/
public class Test {
Master master = null;
public static void main(String[] args) {
/* PetService petService = new PetServiceImpl();
Pet pet = new Pet();
pet.setId(1);
if(petService.updateStatus(pet)){
System.out.println("宠物状态更新成功!");
}else{
System.out.println("宠物状态更新成功!");
}*/
Test test = new Test();
test.adoptPet();
}
/*
* 登录
*/
public void login() {
// 1、获得输入对象
Scanner input = new Scanner(System.in);
// 2、打印欢迎信息
System.out.println("---- 欢迎光临宠物乐园 ----");
// 3、获取用户输入的登录名、密码
System.out.print("请输入登录名:");
String loginId = input.next();
System.out.print("请输入密码:");
String password = input.next();
Master mas=new Master();
mas.setName(loginId);
mas.setPassword(password);
// 4、检查登录名、密码是否合法,并输出提示信息
MasterDao masterDao = new MasterDaoMySQLImpl();
master = masterDao.findMaster(mas);
if (master!=null) {
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误,登录失败!");
}
}
/*
* 主人领养宠物
*/
public void adoptPet() {
Scanner input = new Scanner(System.in);
if(master==null){ //判断主人是否登录
login();
adoptPet();
}else{
PetTypeManager petTypeManager=new PetTypeManager();
petTypeManager.showPetType(); //显示宠物类型
String name=input.next().trim();
int typeId=petTypeManager.findId(name); //获得宠物类型的编号
if(typeId!=0){
System.out.print("请输入宠物昵称:");
String petName=input.next();
Pet pet=new Pet();
pet.setMasterId(master.getId());
pet.setName(petName);
pet.setTypeId(typeId);
PetDao petDao=new PetDaoMySQLImpl();
int result=petDao.save(pet); //添加宠物
if(result!=0)
System.out.println("领养成功!");
}else{
System.out.println("宠物类型有误,领养失败!");
}
}
}
}