发表于: 2018-03-20 22:01:47

2 535


昨天才到线下,所以耽误了两天日志,不好意思,今天开始继续写。

昨天剩下的一点时间和今天都在研究spring框架,不过spring框架的知识不是这么短时间就能学会的,不过还是根据网上的各种教程写了一下代码,首先是文件结构:

StudentDao接口类代码:

package dao;
import pojo.Student;
import java.util.List;

public interface StudentDao {
List<Student> findAllStudent();
void  insert (String name);
void insert (Student s);
//插入
}

声明StudentDao接口,然后定义抽象方法insert;

StudentDaoImpl,是StudentDao接口的子类(继承),其作用是实现StudentDao接口中的抽象方法

package daoImpl;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import dao.StudentDao;
import pojo.Student;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class StudentDaoImpl implements  StudentDao{
private JdbcTemplate jdbcTemplate;

public List<Student> findAllStudent() {
String sql = "select * from stu";
final List<Student> list = new ArrayList<Student>();
jdbcTemplate.query(sql,new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException{
Student s = new Student();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setAge(rs.getInt("age"));
list.add(s);
}
});
return list;
}

public  void insert( String name) {
String sql = "insert into stu(name) values (?)";
jdbcTemplate.update(sql,name);
System.out.println("insert name"+name);

}

public void insert(Student s) {
String sql ="insert into stu(id,name,age) values (?,?,?)";
jdbcTemplate.update(sql,s.getId(),s.getName(),s.getAge());


}

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
}

这里可以看出在StudentDao中被声明的

List<Student> findAllStudent()

void  insert (String name);

两个抽象方法都被具体化实现。

Student 实体类

package pojo;
import dao.StudentDao;
import java.util.List;

public class Student {
private int id;
private String name;
private int age;
private StudentDao dao;

public StudentDao getDao() {
return dao;
}

public void setDao(StudentDao dao) {
this.dao = dao;
}

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 int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
public Student() {
this.name=name;
this.age=age;
}
public List<Student> findAllStudent(){
return dao.findAllStudent();
}


}

定义student类的属性和dao方法,然后自动生成get和set。

Test文件,测试dao类中的方法,这里需要自己生成实体对象,不过更推荐用bean文件来实现。

package  test;
import dao.StudentDao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.activation.DataSource;

public class Test {

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDao studentDao = (StudentDao) context.getBean("studentDAO");
studentDao.insert("李");
}
}

applicationContext.xml文件,用来配置bean文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/emp" />
<property name="username" value="root" />
<property name="password" value="likefei1995" />
</bean>
<bean name="studentDAO" class="daoImpl.StudentDaoImpl">
<property name="jdbcTemplate"
           ref ="jdbcTemplate">
</property>
</bean>
<bean name="student" class="pojo.Student">
<property name="dao"
           ref ="studentDAO">
</property>
</bean>
</beans>

pom.xlx,用来配置jar包、各种依赖以及设置maven项目JDK版本号

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>JDBC</groupId>
<artifactId>JDBC</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>com.hortonworks.registries</groupId>
<artifactId>schema-registry-core</artifactId>
<version>0.3.0</version>
</dependency>
</dependencies>

</project>

运行测试文件,得到结果

打开navicat观察数据库中的stu表

成功插入两列(因为运行了2次)

今天的收获:收获就是自己写了几遍JDBCtemplate的代码,遇到了很多很多问题,mysql语句报错(其实是昨天晚上写程序的时候就一直在报错),然后经过我的分析,我感觉自己没写错。。早上来了之后重启了数据库可以用了,问了师兄师兄也说这是很常见的错误让我自己检查语法来着。。就是找不到哪儿有问题,然后是今天上午写代码的时候再次遇到sql语句错误,后来发现是自己语句结构打错,这次没问别人,自己硬生生找了半个小时,很难。

上午学到了PreparedStatement 结构,比传统的statement结构好的地方在于如果有多次输入,那么statement会全部执行,而预编译的pre结构可以只运行一次,大大提高了效率(这里纠结了半天,发现后面JDBCtemplate里面也不用这些,直接把statement结构略过了,使用了jdbcTemplate.update就能执行sql语句,不对,也不能说略过,反正没看源码,只是记忆了一下用法,一知半解的,今天就想成功运行一次自己的项目,其他的也没管那么多,因为我写的sql=后面的values还是赋值(?)可以在test中自己输入)

下午主要是看了一下Dao和DaoImpl以及bean文件,依赖的注入这些知识,真的很复杂,这里推荐一个网站http://blog.csdn.net/javazejian/article/details/54561302里面讲bean讲的很清楚,因为自己配置bean也一直失败,返回空指针显示没有注入,就是自己对这个机制理解的不够透彻,最后虽然来回试代码试了出来,不过从根本上还是没有解决问题,明天准备学习mybaits然后继续学习beans,希望自己能够加快进度,毕竟是线下试学了,今天日报写的不够好,因为刚弄完代码真的是脑子晕乎乎。。下次希望可以写代码的时候也顺便注释出问题和理解方便写日志,不然只能像自己现在这样什么都不记得了。


返回列表 返回列表
评论

    分享到