7.数据访问接口实现类:
按下快捷键之后:
通常应该先将代码的整体结构(开头,结尾)码好,再慢慢进行内部代码量的填充
如果码代码的时候出现了异常,我们应该怎么解决呢?
选中异常范围
试试这里:
然后选择 8.try/catch/finally
学校数据访问接口实现类整体代码如下:
/**
* 包名:net.qt.student.dao.impl
* 类名:CollegeDaoImpl
* 描述:学校数据访问接口实现类
* 作者:谯婷
* 日期:2019.6.18
*/
package net.qt.student.dao.impl;
import net.qt.student.bean.College;
import net.qt.student.dao.CollegeDao;
import net.qt.student.dbutil.ConnectionManager;
import java.sql.*;
public class CollegeDaoImpl implements CollegeDao {
/**
* 按id查询学校
* @param id
* @return
*/
@Override
public College findById(int id) {
//声明学校对象
College college = null;
//1.获取数据库连接对象
Connection conn = ConnectionManager.getConnection();
//2.定义SQL字符串
String strSQL = "SELECT * FROM t_college WHERE id = ?";
try {
//3.创建预备语句对象
PreparedStatement pstmt = conn.prepareStatement(strSQL);
//4.设置占位符的值
pstmt.setInt(1,id);
//5.执行SQL查询,返回结果集
ResultSet rs = pstmt.executeQuery();
//6.判断结果集是否有记录
if(rs.next()){
//创建学校实体
college = new College();
//利用当前字段值设置属性
college.setId(rs.getInt("id"));
college.setName(rs.getString("name"));
college.setPresident(rs.getString("president"));
college.setStartTime(rs.getDate("start_time"));
college.setTelephone(rs.getString("telephone"));
college.setEmail(rs.getString("email"));
college.setAddress(rs.getString("address"));
college.setProfile(rs.getString("profile"));
}
//7.关闭预备语句对象
pstmt.close();
//8.关闭结果集对象
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//关闭数据库连接
ConnectionManager.closeConnection(conn);
}
//返回学校对象
return college;
}
/**
* 更新学校方法
* @param college
* @return
*/
@Override
public int update(College college) {
//1.定义更新记录数
int count = 0;
//1.获取数据库连接
Connection conn = ConnectionManager.getConnection();
//2.定义SQL字符串
String strSQL = "update t_college set name = ?, president = ?, start_time = ?,"
+ "telephone = ?, email = ?, profile = ? where id = ?";
try {
//3.创建预备语句对象
PreparedStatement pstmt = conn.prepareStatement(strSQL);
//4.设置占位符的道
pstmt.setString(1,college.getName());
pstmt.setString(2,college.getPresident());
pstmt.setTimestamp(3,new Timestamp(college.getStartTime().getTime()));
pstmt.setString(4,college.getTelephone());
pstmt.setString(5,college.getEmail());
pstmt.setString(6,college.getProfile());
pstmt.setInt(7,college.getId());
//5.执行SQL语句,返回更新的记录数
count = pstmt.executeUpdate();
//6.关闭预备语句对象
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//
ConnectionManager.closeConnection(conn);
}
//返回更新记录数
return count;
}
}
这是我的第一个CollegeDaoImpl学校数据访问接口实现类的成品,虽然是跟着老师的步骤来的,但是我速度有点慢,或者有的时候没注意,码的时候就出现了两个小插曲
第一个小插曲就是:
当我在更新学校方法中设置占位符的道的时候,找不到startTime的getTime()方法。原因是在College类中设置startTime的私有属性时,将它的字符类型设置错了,应该是:
后面改正一下就好了
第二个小插曲:
粗心的我把单词拼错了,邮箱应该是email,但是我有的地方拼成了emial或者emails,果然学好英语的重要性非比寻常哟~~~看来自己真的需要补补课啦
做好了CollegeDaoImpl学校数据访问接口实现类,那么怎么让他发挥功能呢?
8.这个时候我们需要再创建一个包,专门来存放归类测试类,再创建一个TestCollegeDaoImpl类用来测试
然后就会发现这下面出现了一个东西:
完整的TestCollegeDaoImpl测试代码如下:
package net.qt.student.test;
import net.qt.student.bean.College;
import net.qt.student.dao.CollegeDao;
import net.qt.student.dao.impl.CollegeDaoImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestCollegeDaoImpl {
@Before
public void beforeTset(){
System.out.println("单元测试开始了~");
}
@After
public void afterTset(){
System.out.println("单元测试结束了~");
}
@Test
public void testFindById() {
CollegeDao dao = new CollegeDaoImpl();
College college = dao.findById(1);
System.out.println(college);
}
@Test
public void testUpdate() {
CollegeDao dao = new CollegeDaoImpl();
College college = dao.findById(1);
college.setPresident("小王");
int count = dao.update(college);
if(count>0){
System.out.println("恭喜,学校记录更新成功!");
}else {
System.out.println("遗憾,学校记录更新失败!");
}
}
}
让我们来测试一下代码:
之后我们自己创建一个TestStatusDaoImpl类用来测试StatusDaoImpl
有了第一个测试类的经验,这个测试代码很容易就完成了
package net.qt.student.test;
import net.qt.student.bean.Status;
import net.qt.student.dao.StatusDao;
import net.qt.student.dao.impl.StatusDaoImpl;
import org.junit.Test;
public class TestStatusDaoImpl {
@Test
public void testFindById(){
StatusDao dao = new StatusDaoImpl();
Status status = dao.findById(1);
System.out.println(status);
}
@Test
public void tsetUpdate(){
StatusDao dao = new StatusDaoImpl();
Status status = dao.findById(1);
status.setAuthor("无心剑");
status.setTelephone("15984263712");
status.setEmail("2624598742@qq.com");
dao.update(status);
status = dao.findById(1);
System.out.println(status);
}
}
运行结果:成功啦~