2017-6-21 专业实习第三天
现在开始进入做项目了,大致是一个关于唱片的网站
- 1.创建web project
com.lanouMusic.Entity 这是用来存放 数据实体类的 基本上一张表一个类
com.lanouMusic.Dao 数据访问的对象接口,数据访问层 (放的都是接口)
com.lanouMusicDao.Impl 数据访问层接口的实现层
com.lanouMusic.Biz 业务层 需要执行的业务(放的都是接口)
com.lanouMusicBiz.Impl 业务接口层的实现部分
关于数据库是已经提供了 在SQLyog图形界面中 直接右键 执行SQL语句 导入数据库,先开始对专辑的分类表genrei进行获取 添加 修改 删除
- 2.在实体包中对genre表的属性 定义变量,然后右键获取set… get…方法
package com.lanouMusic.Entity;
public class Genre {
private int id;
private String name;
private String description ;
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 getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
- 3.数据访问层接口 定义一个BaseDao.java类 连接目标数据库
- executeQuery() 执行动态的select语句 返回ResultSet实例
- executeUpdate() 执行动态的INSERT UPDATE DELETE语句 返回int数值
- closeResource() 释放资源
package com.lanouMusicDao.Impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
//这样写可以方便之后的修改
private String ClassName = "com.mysql.jdbc.Driver"; //加载驱动
private String dburl = "jdbc:mysql://localhost/musicdb";
private String user = "root";
private String password = "root";
private Connection connection; //与特定的数据库进行连接
private PreparedStatement statement; //PreparedStatement执行动态的sql语句 Statement执行静态的sql语句
private ResultSet resultSet; //数据表 获得检索结果集
//创建方法 与数据库建立连接 方便其他时候调用这个链接函数
//注意方法类型为protected
protected void openConnection() throws ClassNotFoundException{
//加载驱动 try/catch 异常
Class.forName(ClassName);
try {
connection=DriverManager.getConnection(dburl, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询方法 查询数据库 返回ResultSet实例
public ResultSet executeQuery(String sql, Object[] parmars) throws SQLException{
//执行动态查询语句
statement=connection.prepareStatement(sql);
if(parmars!=null){
int i=1;
for (Object object:parmars) {
//setObject(i+1,arg[i])用法与setInt(i+1,arg[i]),setString(i+1,arg[i])用法类似,
//但不需指定参数类型,可以通用;
//其中,第一个是指你SQL语句中的第几个参数,第二个是要设置的值
//再向数据库发送时被转换为相应的SQL类型
statement.setObject(i, object);
i++;
}
}
resultSet=statement.executeQuery();
return resultSet;
}
//更新方法
public boolean execute(String sql, Object[] parmars) throws SQLException {
statement = connection.prepareStatement(sql);
if (parmars != null) {
int i = 1;
for (Object object : parmars) {
statement.setObject(i, object);
i++;
}
}
return statement.execute();
}
// 释放资源
public void closeResource(){
//try/catch异常
try {
if (resultSet!=null){
resultSet.close();
}
if (statement!=null) {
statement.close();
}
if (connection!=null) {
connection.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
- 4.创建GenreDao 接口类
package com.lanouMusic.Dao;
import java.util.List;
import com.lanouMusic.Entity.Genre;
public interface GenreDao {
// 获取所有的类别 用一个list对象来保存数据
public List<Genre> getAll();
// 添加新的类别 返回结果是添加成功 添加失败 就是boolean
public boolean addGenre(Genre genre);
// 删除类别 删除id来删除 操作对象就是id
public boolean deleteGenre(int genreId);
// 修改类别 对象就是整个表里的数据 Genre类的对象
public boolean updateGenre(Genre genre);
}
- 5.创建接口类的实例化类GenreDaoImpl.class 将从接口继承的方法实例化
package com.lanouMusicDao.Impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.lanouMusic.Dao.GenreDao;
import com.lanouMusic.Entity.Genre;
public class GenreDaoImpl extends BaseDao implements GenreDao{
@Override
public List<Genre> getAll() {
//创建ArrayList 的Genre对象来存放ResultSet的结果
ArrayList<Genre> genres=new ArrayList<Genre>();
try {
openConnection();
String sql="select * from genre";
ResultSet resultSet=executeQuery(sql, null);
while (resultSet.next()) {
Genre g=new Genre();
g.setId(resultSet.getInt("id"));//这儿是可以不用区分大小写的 是指表的列名 当然也可以用1表示第一列
g.setName(resultSet.getString("name"));
g.setDescription(resultSet.getString("description"));
//将对象添加到ArrayList的实例中去
genres.add(g);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//注意返回值
return genres;
}
@Override
public boolean addGenre(Genre genre) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean deleteGenre(int genreId) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean updateGenre(Genre genre) {
// TODO Auto-generated method stub
return false;
}
}
- 6.业务接口层
package com.lanouMusic.Biz;
import java.util.List;
import com.lanouMusic.Entity.Genre;
public interface GenreBiz {
//这个是业务层 对于专辑Genre 想前台页面只有一个业务 即 显示所有专辑
// 获取所有的类别 用一个list对象来保存数据
public List<Genre> getAll();
}
- 7.业务接口的实现层
package com.lanouMusicBiz.Impl;
import java.util.List;
import com.lanouMusic.Biz.GenreBiz;
import com.lanouMusic.Dao.GenreDao;
import com.lanouMusic.Entity.Genre;
import com.lanouMusicDao.Impl.GenreDaoImpl;
public class GenreBizImpl implements GenreBiz {
@Override
public List<Genre> getAll() {
GenreDao dao = new GenreDaoImpl();
return dao.getAll();
}
}