目录
一. 创建项目
创建普通的javamaven就行
二、引入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
1.mysql常用版本
5.6 5.7 8.0
区别
(1)安装方式
5.5安装方式只有一种,直接下一步下一步;
5.6,5.7支持压缩包解压,写配置,初始化,也有下一步下一步安装的方式
(2)存储引擎
5.5的存储引擎是myisam;剩下的是InnoDB
(3)驱动
5.6和5.7对应的mysql驱动都可以用5.6的驱动;
8.0版本的驱动一般用高版本8.0的驱动,8.0的多一个cj(com.mysql.cj.jdbc.Driver)
(4)url
5.6 5.7 : jdbc:mysql:///数据库
8.0 : jdbc:mysql:///数据库?时区参数
2.连接池
(1)是什么
可以把它想象成一个容器,
对JDBC来说,每操作一次数据库都要和数据库进行一次连接,每次用完还要销毁连接,这样很影响性能,耗费时间,所以有了池化思想,放一个容器,就一直连接数据库,有人拿走,用完之后,从哪里拿的放哪里去,后面的人来了想用也直接从连接池。
连接是有策略的,比如:10个连接,10个人拿走了,后面又来了一个人,连接池就会思考要不要加连接
(2)意义
节省创建连接与释放连接,减少性能消耗; 连接池中连接起到复用的作用,提升程序性能
(3)连接池参数
初始大小:10个
最小空闲连接数:3个
增量:一次创建的最小单位(5个)
最大空闲连接数:12个
最大连接数:20个
最大的等待时间:1000毫秒
(4)4个参数
驱动的名称 ‐‐ com.mysql.jdbc.Driver
连接 ‐‐ jdbc:mysql://localhost:3306/day14
jdbc:代表的主协议
mysql:子协议
localhost : 主机-----可以理解为是一个域名
3306 : mysql默认的端口号
day14 :数据库
如果访问的是本地的自己的数据库,那么localhost:3306就可以省略不写----jdbc:mysql:///day14
用户名 ‐‐ root
密码 ‐‐ 2020
三、创建数据库、表
create database spring_db;
use spring_db;
create table account(
id int primary key auto_increment,
name varchar(40),
money double
)character set utf8 collate utf8_general_ci;
insert into account(name,money) values('aaa',1000);
insert into account(name,money) values('bbb',1000);
insert into account(name,money) values('ccc',1000);
四、编写JavaBean的类
package com.qcby.pojo;
import java.io.Serializable;
public class Account implements Serializable{
private Integer id;
private String name;
private Double money;
public Account() {
}
public Account(Integer id, String name, Double money) {
this.id = id;
this.name = name;
this.money = money;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}
五、持久层的接口和实现类
接口
package com.qcby.dao;
import com.qcby.pojo.Account;
import java.util.List;
public interface AccountDao {
public List<Account> findAll();
}
实现类
package com.qcby.dao.impl;
import com.qcby.dao.AccountDao;
import com.qcby.pojo.Account;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class AccountDaoImpl implements AccountDao{
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
//查询所有数据
@Override
public List<Account> findAll(){
List<Account> list = new ArrayList<>();
Connection connection=null;
PreparedStatement stmt=null;
ResultSet rs = null;
try {
connection=dataSource.getConnection();
String sql="select * from account";
stmt=connection.prepareStatement(sql);
rs=stmt.executeQuery();
while (rs.next()){
Account account = new Account();
account.setId(rs.getInt("id"));
account.setName(rs.getString("name"));
account.setMoney(rs.getDouble("money"));
list.add(account);
}
}catch (SQLException e){
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
}
六、业务层的接口和实现类
接口
package com.qcby.service;
import com.qcby.pojo.Account;
import java.util.List;
public interface AccountService {
public List<Account> findAll();
}
实现类
把他交给spring管理
package com.qcby.service.impl;
import com.qcby.dao.AccountDao;
import com.qcby.pojo.Account;
import com.qcby.service.AccountService;
import java.util.List;
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
@Override
public List<Account> findAll() {
return accountDao.findAll();
}
}
七、配置文件(application.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///spring_db"></property>
<property name="username" value="root"></property>
<property name="password" value="2020"></property>
</bean>
<!--管理bean-->
<bean id="accountService" class="com.qcby.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"></property>
</bean>
<bean id="accountDao" class="com.qcby.dao.impl.AccountDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
八、测试类
package com.qcby.test;
import com.qcby.pojo.Account;
import com.qcby.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Demo1 {
@Test
public void run1(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
AccountService accountService=(AccountService)applicationContext.getBean("accountService");
List<Account> list=accountService.findAll();
for(Account account:list){
System.out.println(account);
}
}
}
九、运行结果