发表于: 2018-04-02 21:06:57
1 668
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
明天计划的事情:(一定要写非常细致的内容)
遇到的问题:(遇到什么困难,怎么解决的)
收获:(通过今天的学习,学到了什么知识)
今天完成的事情: 1.使用Jbdc完成了DAO接口实现
先定义了一个Student类,在里面填写了基本信息,并进行了封装。使用get set方法,提供修改和获取数据
package zhj.jdbc.test;
/**
* Created by msi-pc on 2018/4/2.
*/
public class Student {
private String name;
private int id;
private String swear;
private String school;
private long creat_at;
private long update_at;
public String getName() {
return name;
}
public int getId() {
return id;
}
public String getSwear() {
return swear;
}
public String getSchool() {
return school;
}
public long getCreat_at() {
return creat_at;
}
public long getUpdate_at() {
return update_at;
}
public void setUpdate_at(long update_at) {
this.update_at = update_at;
}
public void setCreat_at(long creat_at) {
this.creat_at = creat_at;
}
public void setName(String name) {
this.name = name;
}
public void setSchool(String school) {
this.school = school;
}
public void setSwear(String swear) {
this.swear = swear;
}
public void setId(int ID) {
this.id = ID;
}
}
编写接口,只提供方法
package zhj.jdbc.test;
import java.util.List;
/**
* Created by msi-pc on 2018/4/2.
*/
public interface StudentDAO {
Student get(int id);
void add(Student student);
void delete(int id);
void update(Student student);
public List<Student> list();
public List<Student> list(int start, int count);
}
重头戏,实现增删改查和分页查询功能
package zhj.jdbc.test;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created by msi-pc on 2018/4/2.
*/
public class ImplSDAO implements StudentDAO {
public ImplSDAO() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection("jdbc:mysql://localhost:3306/enrolment?useSSL=false","root","19971015");
}
@Override
public Student get(int ID) {
Student s1 = new Student();
String sql = "select * from student where id =?";
try (Connection c = getConnection();PreparedStatement pst = c.prepareStatement(sql)){
pst.setInt(1,ID); //传入id值
ResultSet rst = pst.executeQuery();
if (rst.next()){ //因为只有一个对象,所以可以使用if语句而不是while
String name = rst.getString(1);
int id = rst.getInt(2);
String swear = rst.getString(3);
String school = rst.getString(4);
long creat_at = rst.getLong(5);
long update_at = rst.getLong(6);
s1.setName(name); //调用set方法将数据表中的数据传入给student类中
s1.setId(id);
s1.setSwear(swear);
s1.setSchool(school);
s1.setCreat_at(creat_at);
s1.setUpdate_at(update_at);
}
} catch (SQLException e) {
e.printStackTrace();
}
return s1;
}
@Override
public void add(Student student) {
String sql = "insert into student values(?,?,?,?,?,?)";
try(Connection c = getConnection();PreparedStatement pst = c.prepareStatement(sql)){
pst.setString(1,student.getName());
pst.setInt(2,student.getId());
pst.setString(3,student.getSwear());
pst.setString(4,student.getSchool());
pst.setLong(5,student.getCreat_at());
pst.setLong(6,student.getUpdate_at());
pst.executeUpdate();
}
catch (SQLException e){
e.printStackTrace();
}
}
@Override
public void delete(int ID) {
String sql = "delete from student where id = ? ";
try (Connection c = getConnection(); PreparedStatement pst = c.prepareStatement(sql)){
pst.setInt(1,ID);
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void update(Student student) {
String sql = "update student set name = ? , id = ? , swear = ? ,school = ? , creat_at = ? , update_at = ? where id = ?";
try (Connection c = getConnection();PreparedStatement pst = c.prepareStatement(sql)){
pst.setString(1,student.getName());
pst.setInt(2,student.getId());
pst.setString(3,student.getSwear());
pst.setString(4,student.getSchool());
pst.setLong(5,student.getCreat_at());
pst.setLong(6,student.getUpdate_at());
pst.setInt(7,student.getId());
pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public List<Student> list() {
return list(0, Short.MAX_VALUE);
}
@Override
public List<Student> list(int start, int count) {
List<Student> students = new ArrayList<Student>();
String sql = "select * from student order by id desc limit ?,? ";
try (Connection c = getConnection();PreparedStatement pst = c.prepareStatement(sql)){
pst.setInt(1,start);
pst.setInt(2,count);
ResultSet rst = pst.executeQuery();
while (rst.next()){
Student s1 = new Student();
String name = rst.getString(1);
int id = rst.getInt(2);
String swear = rst.getString(3);
String school = rst.getString(4);
long creat_at = rst.getLong(5);
long update_at = rst.getLong(6);
students.add(s1); //将获取的一个对象的数据添加进列表中
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
}
尽管昨天看过了别人的类似代码,私以为会比较行云流水。但现实还是无情的抽了我一个耳光:编写一个方法,思路突然断掉,不知道自己的前一句到底是用来干什么的?然后智商仿佛就已经和我无缘?ORZ 比如在编写最难的Studnet get(int ID)方法中,我竟然忘记去写获得传参ID语句: pst.setInt(1,ID);
然后后面写完一堆 rst.getXXX后又不知到要干嘛以为就结束了。殊不知因为函数返回的是Student类型,所以你当然要将对象的信息给get到啊啊啊。如果当时编写能前后观察,清楚知道它的实现作用是什么,或许就不用这么磕磕绊绊了吧。
2.了解了一下JdbcTemplate是什么
作为 SpringJDBC 框架的核心, JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法. 每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务.通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低.
JdbcTemplate主要提供以下五类方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;
call方法:用于执行存储过程、函数相关语句。
所以JdbcTemplate是Spring框架自带的对JDBC操作的封装,提供了五种基本方法。JDBCTemplate帮我们省去了很多麻烦
开始编写需要 : 1.引入Spring框架相关的jar包以及c3p0和mysql连接jar包。为了对方法进行测试,这里还需要引入JUnit4.这里以导入外部属性文件的方式来配置数据源
2.在xml文件中,导入这个属性文件以及配置c3p0数据源:
3.配置JdbcTemplate
明天计划的事情:1.配置JDVC Template ,尝试使用Template编写方法
遇到的问题:1.编写不熟悉,需要有范例的情况下完成。
收获:1.完成实现类达到增删改查和分页查询功能,对resultset,preparedStatement,set和get调用有了更深的理解
2.大值理解了JdbcTemplate是干什么的,我要去干什么
评论