本实验是在使用maven工程控制版本的基础上进行的,通过使用xml配置的方式来对mysql数据库实现增删查改功能。
1 配置环境
1.1 pom文件配置
这个文件里配置了一个插件(由于我的IDEA的版本问题,override有些异常,导入这个插件可以解决,不用可以删除)
同时有mysql驱动包,junit测试包,spring包,c3p0包,dbutils(一个封装了jdbc功能的包,用起来很方便),以下是代码。
<?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>indi.huangzi</groupId>
<artifactId>day1</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
<!-- 这里不用可以删除-->>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
1.2 bean.xml文件的配置
我先把配置文件写出来了,实际上你可以先写实现类和接口类最后再写Bean的配置类。(**我的这个注释头也可以用于注解的spring配置方式**) 内容如下:(其中我的数据库database名字为test1,其密码为233333)<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="serviceImpl" class="Service.serviceImpl">
<property name="studentDao" ref="studentDAO"></property>
</bean>
<bean id="studentDAO" class="Service.DAO.DAO.daoImpl">
<property name="runner" ref="run"></property>
</bean>
<bean name="run" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
<constructor-arg name="ds" ref="datasourse"></constructor-arg>
</bean>
<bean id="datasourse" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test1"></property>
<property name="user" value="root"></property>
<property name="password" value="233333"></property>
</bean>
</beans>
1.3 所有文件的摆放一览图
下面是所有的文件建立好之后的一览图,名字都可以自己确定。2 建立业务层和数据访问层
2.1 业务层代码
业务层代码分为接口类和实现类两个,其中接口类取名为Iservice,实现类取名为serviceImpl
2.1.1 业务层接口代码
package Service;
import model.student;
import java.util.List;
public interface Iservice {
/**
* 查询所有
* @return
*/
List<student> findAllStudent();
/**
* 通过id查询
* @return
*/
student findBystudentId(Integer id);
/**
* 保存学生实体
*/
void saveStudent(student s);
/**
* 修改学生实体
*/
void updateStudent(student s);
/**
* 通过id进行删除
*/
void deleteById( Integer id);
}
2.1.2 业务层实现代码
package Service;
import Service.DAO.Idao;
import model.student;
import java.util.List;
public class serviceImpl implements Iservice {
private Idao studentDao;
public void setStudentDao(Idao studentDao) {
this.studentDao = studentDao;
}
@Override
public List<student> findAllStudent() {
return studentDao.findAllStudent();
}
@Override
public student findBystudentId(Integer id) {
return studentDao.findBystudentId(id);
}
@Override
public void saveStudent(student s) {
studentDao.saveStudent(s);
}
@Override
public void updateStudent(student s) {
studentDao.updateStudent(s);
}
@Override
public void deleteById(Integer id) {
studentDao.deleteById(id);
}
}
2.2 数据访问层代码
2.2.1 数据层接口代码
package Service.DAO;
import model.student;
import java.util.List;
public interface Idao {
List<student> findAllStudent();
/**
* 通过id查询
* @return
*/
student findBystudentId(Integer id);
/**
* 通过id进行保存
*/
void saveStudent(student s);
/**
* 通过id进行修改
*/
void updateStudent(student s);
/**
* 通过id进行删除
*/
void deleteById( Integer id);
}
2.2.2 数据层实现代码
package Service.DAO.DAO;
import Service.DAO.Idao;
import model.student;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.util.List;
public class daoImpl implements Idao {
private QueryRunner runner;
public void setRunner(QueryRunner runner) {
this.runner = runner;
}
@Override
//查找所有
public List<student> findAllStudent() {
try {
return runner.query("select *from student",new BeanListHandler<student>(student.class));
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Override
//按照Id查找
public student findBystudentId(Integer id) {
try {
return runner.query("select *from student where studentId=?",new BeanHandler<student>(student.class),id);
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Override
//保存实体
public void saveStudent(student s) {
try {
runner.update("insert into student(name,age)values(?,?)", s.getName(),s.getAge());
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Override
//更新
public void updateStudent(student s) {
try {
runner.update("update student set name=?,age=? where studentId =?", s.getName(),s.getAge(),s.getStudentId());
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Override
//根据id删除
public void deleteById(Integer id) {
try {
runner.update("delete from student where studentId =?", id);
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
2.3 model层(学生实体类)
这个类建立在model包下。记得创建一个model包。名字为student,其属性字段只有studentId,name,age这3个
package model;
import java.io.Serializable;
public class student implements Serializable {
private int studentId;
private String name;
private int age;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
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;
}
@Override
public String toString() {
return "student{" +
"studentId=" + studentId +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.4 测试类studentTest
test文件夹下的studentTest文件。
import Service.Iservice;
import model.student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class studentTest {
@Test
public void testFindAll(){
//获取容器
ApplicationContext bean= new ClassPathXmlApplicationContext("bean.xml");
//获取bean对象
Iservice service= bean.getBean("serviceImpl",Iservice.class);
//执行方法
List<student>students=service.findAllStudent();
//打印处数据库里的数据
for(student s : students){
System.out.println(s);
}
}
@Test
public void testFindById()
{
//获取容器
ApplicationContext bean= new ClassPathXmlApplicationContext("bean.xml");
//获取bean对象
Iservice service= bean.getBean("serviceImpl",Iservice.class);
//执行方法
student s=service.findBystudentId(2);
//打印处数据库里的数据
System.out.println(s);
}
@Test
public void update()
{
student s=new student();
s.setAge(24);
s.setName("qinyuan");
s.setStudentId(2);
//获取容器
ApplicationContext bean= new ClassPathXmlApplicationContext("bean.xml");
//获取bean对象
Iservice service= bean.getBean("serviceImpl",Iservice.class);
//执行方法
service.updateStudent(s);
//打印处数据库里的数据
}
@Test
public void save()
{
student s=new student();
s.setAge(388);
s.setName("qinshihuang");
//获取容器
ApplicationContext bean= new ClassPathXmlApplicationContext("bean.xml");
//获取bean对象
Iservice service= bean.getBean("serviceImpl",Iservice.class);
//执行方法
service.saveStudent(s);
//打印处数据库里的数据
}
@Test
public void delete()
{
//获取容器
ApplicationContext bean= new ClassPathXmlApplicationContext("bean.xml");
//获取bean对象
Iservice service= bean.getBean("serviceImpl",Iservice.class);
//执行方法
service.deleteById(4);
//打印处数据库里的数据
}
}
2.5 在数据库内创建数据
打开mysql的命令行,然后输入
第一步(创建数据库test1):
create database test1;
第二步(使用数据库test1)
use test1;
第三步(创建学生表)
create table student(
studentId int unsigned auto_increment,
name varchar(30) not null,
age int not null,
primary key (studentId))
;
第四步(插入数据若干)
insert into student(name,age) values('李晓明',20);
insert into student(name,age) values('王大锤',20);
insert into student(name,age) values('马大云',20);
之后就可以愉快的使用studentTest里的方法啦!此处我就不再进行演示啦~