阅读完需:约 4 分钟
这是一个java面向对象的基本练习,主要是以练习为主,包含了MySQL,javaBean,继承,实现,重写,覆盖等。
总目录:

1.首先写一个连接MySQL的java文件,在写文件之前要先导入MySQL的包!!
//DatabaseConnection.java
public class DatabaseConnection {
private static final String cond="com.mysql.jdbc.Driver";
private static final String conc="jdbc:mysql://localhost:3306/mydata?characterEncoding=utf-8";
private static final String username="root";
private static final String password="123";
private static Connection con=null;
public static Connection getConnection() throws Exception{
Class.forName(cond);
con=DriverManager.getConnection(conc, username, password);
return con;
}
public void close() throws SQLException{
con.close();
}
}
DatabaseConnection.java包含了数据库的地址,账号,密码以及加载包,同时要封装起来返回一个Connection类型的con便于后续调用数据库。
2.编写javaBean文件
//Emp.java
public class Emp {
private int empno;
private String ename;
private String job;
private Date hiredate;
private float sal;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job
+ ", hiredate=" + hiredate + ", sal=" + sal + "]";
}
}
javaBean文件包含属性的get和set以及重写的toString方法
3.编写接口文件,写入需要的方法
//IEmp.java
public interface IEmp {
public Emp findById(int empno) throws Exception;
public List<Emp> findByName(String name) throws Exception;
public int doInsert(Emp emp)throws Exception;
public int doupdate(Emp emp)throws Exception;
}
4.编写连接数据库的文件,用于数据的增删改查
//EmpImp.java
public class EmpImp implements IEmp{
private Connection conn=null;
private PreparedStatement pre=null;
public EmpImp(Connection con){
this.conn=con;
}
public Emp findById(int empno) throws Exception {
Emp emp=null;
String sql="select * from emp where empno=?";
pre=conn.prepareStatement(sql);
pre.setInt(1,empno);
ResultSet re=pre.executeQuery();
if(re.next()){
emp=new Emp();
emp.setEmpno(re.getInt(1));
emp.setEname(re.getString(2));
emp.setHiredate(re.getDate(4));
emp.setJob(re.getString(3));
emp.setSal(re.getFloat(5));
}
pre.close();
return emp;
}
public List<Emp> findByName(String name) throws Exception {
List<Emp> list=new ArrayList<Emp>();
String sql="select * from emp where ename like ? or job like ?";
pre=conn.prepareStatement(sql);
pre.setString(1,"%"+name+"%");
pre.setString(2, "%"+name+"%");
ResultSet re=pre.executeQuery();
// int count=re.getMetaData().getColumnCount();
while(re.next()){
Emp emp=new Emp();
emp.setEmpno(re.getInt(1));
emp.setEname(re.getString(2));
emp.setHiredate(re.getDate(4));
emp.setJob(re.getString(3));
emp.setSal(re.getFloat(5));
list.add(emp);
}
return list;
}
public int doInsert(Emp emp) throws Exception {
// TODO Auto-generated method stub
int i=0;
String sql="insert into emp values(?,?,?,?,?)";
pre=conn.prepareStatement(sql);
pre.setInt(1,emp.getEmpno());
pre.setString(2, emp.getEname());
pre.setString(3, emp.getJob());
pre.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
pre.setFloat(5, emp.getSal());
i=pre.executeUpdate();
return i;
}
public int doupdate(Emp emp) throws Exception {
int i=0;
String sql="update emp set ename =?,job=?,hiredate=?,sal=? where empno=?";
pre=conn.prepareStatement(sql);
pre.setString(1, emp.getEname());
pre.setString(2, emp.getJob());
pre.setDate(3, new java.sql.Date(emp.getHiredate().getTime()));
pre.setFloat(4, emp.getSal());
pre.setInt(5,emp.getEmpno());
i=pre.executeUpdate();
return i;
}
}
EmpImp.java文件主要实现了IEmp.java的接口方法,同时利用自身的构造方法载入数据库连接con
public EmpImp(Connection con){
this.conn=con;
}
和javaBean建立起联系,利用javaBean来暂时存储数据
5.代理模式——主要用于加载DatabaseConnection.java这个数据库连文件,并且将属性注入到EmpImp.java这个实现类中
//EmpProxy.java
public class EmpProxy implements IEmp{
private DatabaseConnection mycon=null;
private IEmp dao;
public EmpProxy() throws Exception{
dao=new EmpImp(DatabaseConnection.getConnection());
}
public Emp findById(int empno) throws Exception {
// TODO Auto-generated method stub
Emp emp=dao.findById(empno);
return emp;
}
public List<Emp> findByName(String name) throws Exception {
return dao.findByName(name);
}
public int doInsert(Emp emp) throws Exception {
// TODO Auto-generated method stub
int i=0;
if(dao.findById(emp.getEmpno())==null){
dao.doInsert(emp);
i=1;
}
return i ;
}
public int doupdate(Emp emp) throws Exception {
// TODO Auto-generated method stub
int i=0;
if(dao.findById(emp.getEmpno())!=null){
dao.doupdate(emp);
i=1;
}
return i;
}
}
EmpProxy.java同时也实现了IEmp.java这个接口文件的方法来实现EmpImp.java里面方法的调用。
实例化DatabaseConnection.java文件并调用getConnection( )方法
public EmpProxy() throws Exception{
dao=new EmpImp(DatabaseConnection.getConnection());
}
6.工厂模式——因为可能代理类有很多个所以需要一个工厂类来管理和调用
//EmpFactor.java
public class EmpFactory {
public static IEmp getEmp() throws Exception{
return new EmpProxy();
}
}
7.最后就是测试文件了
//Text.java
public class Text {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
IEmp dao =EmpFactory.getEmp();
Emp emp1=dao.findById(1001);
System.out.println(emp1);
List<Emp> list =dao.findByName("科");
Iterator<Emp> it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Emp emp=new Emp();
emp.setEmpno(4001);
emp.setHiredate(new Date());
int i=dao.doInsert(emp);
System.out.println(i);
emp.setEmpno(8);
emp.setEname("kkkkkkkkasdasd");
emp.setHiredate(new Date());
int k=dao.doupdate(emp);
System.out.println(k);
}
}