Spring JDBC
一、Spring JDBC之数据库环境
下面开始学习Sping中数据库配置的相关内容
MySQL及辅助jar包的下载
在学习Spring JDBC中,我们采用的数据库是MySQL,版本是社区版+解压缩版,因为社区版是免费的,解压缩版相对msi安装版更锻炼能力。下面开始详细流程。
- 进入下载页面:打开百度,输入关键字mysql,进入有认证的官网,点击DOWNLOADS,在下载页找到社区版(MySQL Community (GPL) Downloads)下载入口;
注意:之所以没有直接给出大家链接的原因是,将来官网的链接有可能会换,大家要根据关键字来找下载链接,作为程序员,这是必须要学习的技能 - 点击后进入页面,点击MySQL Community Server。
- 选对操作系统和下载包
- 下载mysql8.0.19,点击No thanks,立马下载,不用注册;
- 再次进入到第2小步的页面,点击Connector/J,即将要下载的是MySQL与Java的适配器jar包。
Connector/C++,Python, PHP等都是MySQL和不同语言的适配器 - 选择平台–Platform Independent;
- 下载zip格式,点击Dowload后, 依然No thanks,不用注册,立马下载。到此,需要在MySQL上下载的就告一段落了。
说明:MySQL msi安装版的教程参考https://www.runoob.com/w3cnote/windows10-mysql-installer.html
MySQL解压缩版的安装
- 将下载的压缩包解压到全英文路径下(路径里切记不要有英文),进入到该路径下,共有5个文件夹,2个文件;
- 设置显示文件后缀名;
- 在mysql目录下,新建一个文本文件,将其名称改为my,后缀名改为ini,不在是txt。
该文件名必须为my.ini,不要更改
- 用记事本方式打开my.ini,加入以下配置信息。其中basedir后的目录,换成你自己的目录,目录路目录之间用双\。
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录,替换成你自己的
basedir=D:\\soft\\mysql-8.0.19-winx64
# 设置 mysql数据库的数据的存放目录,通常是basedir下data
datadir=D:\\soft\\mysql-8.0.19-winx64\\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
- 保存时my.ini配置文件时,要注意不要直接保存,使用另存为,在另存为中,文件名不变,设置编码方式为ANSI;
- 以管理员身份打开cmd。
- 在cmd中使用cd 命令进入到刚才的mysql路径下的bin文件夹里;
- 输入初始化mysql的命令,敲回车。仔细看命令,别拼写错误
mysqld --initialize --console
(1)如果看到图片中的文字,表明结果正常,记下自动生成的密码。(密码随机生成,里边可能会有特殊符号)
(2)如果出现以下这种情况,从班级群中下载vcruntime140_1.dll这个文件拷贝到C:\Windows\System32这个路径下
(3)如果出现如下情况,从班级群里下载vc_redist.x64.exe安装,这是缺少VS2015运行库导致的。
(4)如果出现一下这种情况,排查的方向有是否以管理员方式启动(重新启动cmd);my.ini配置文件编写错误(认真核对);mysql目录下是否已有data文件(删掉data文件夹)。
9.命令行中输入.输入时查看是否在mysql安装路径的bin目录下
mysqld install
成功后显示,Service successfully installed.
如果失败,首先检查是否是以管理员身份运行的cmd
10. 启动MySQL服务,
net start mysql
成功的话会显示:
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
可在win10的服务功能中找到MySQL服务(如何打开服务界面,自行百度)
11. 双击该项服务,将其启动类型设置为手动,点击确定。自动的话是随着操作系统开启时一同启动的,没有必要。
MySQL设置开启桌面图标
注意:先设置MySQL服务为手动启动(看上图)
- 编写bat脚本文件:在mysql安装目录下新建一个txt,文件内写入以下内容后,保存
net start mysql
- 重新修改文件名:文件名修改为mysql(名字任意),后缀修改为bat
- 创建快捷方式到桌面:右击该文件->发送到->桌面快捷方式
- 修改快捷方式属性:右击该文件->属性->高级->勾选用管理员身份运行->确定
设置图标(图标文件.ico在群文件中,下载到mysql安装路径下)
更改图标->点击确定
选择图标文件:浏览->选择mysql.ico->打开->确定->确定->应用->确定
- 修改快捷方式名称,双击测试:名字修改任意,我修改为mysql。
登录MySQL
- 开启cmd,利用cd命令切入到mysql安装路径下的bin目录。敲命令
mysql -u root -p
进入界面,敲如刚才自动生成的密码,按回车
进入如下界面,表示登录成功
如果进入以下界面,表示密码输入错误,访问被拒绝(自动生成密码较复杂,很容易输错,多输几次)
2. 进入mysql命令行,修改用户名密码。密码统一改为123456。
alter user ‘root’@‘localhost’ identified by ‘123456’;
结果如图,修改成功
3. 用新密码重新登录mysql.
4. 创建数据库test,并查看
create database test;
show databases;
结果如图所示:
Eclipse连接MySQL
1.打开Eclipse的数据浏览器: 选择Window->Show View->Data Source Explorer
出现下图,表明已打开。
2.右击DataBaseConnections->New->单击MySQL,在Name框中输入名字,点击Next
.3.添加驱动与数据库信息
切换到JarList选项卡,点击clear All
单击 Add JAR/Zip
选中下载的mysql和java连接器压缩包中的jar文件,点击打开(我已将它解压缩,提取出来放入了我的springBasicLibrary目录下)
切换到Properties标签页中配置信息。
url改为如下:
jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
DataBase Name改为test
点击Test Connection ,测试连接
出现一下为连接正常。注意:此时必须先确定mysql服务已开启
点击Finish,配置完成。
4、配置完成,可在Eclipse中可视化浏览数据库test
二、Spring JDBC之JdbcTemplate
下面开始学习Sping中数据库编程相关内容
JDBC基础概念
JDBC的相关原理和使用参考如下链接:https://blog.csdn.net/u011753266/article/details/80044768
这里只解释一下里边最重要的两个图,一时半会可能理解不了,大家慢慢去感悟。
下图展示了JDBC的作用:用来统一不同数据库厂商所给出操作数据库函数的名称和参数,也就是jdbc定义了接口(规范了函数名和参数列表,这就是接口的好处),这样使得用java jdbc开发出的程序可以随意移植,不用因为数据库不同就重写程序了,更加利于java的推广。
注意:从jdbc去体会使用接口的好处
下图是jdbc的六个流程,spring jdbc框架或者是其他jdbc框架基本上都是对其中的流程1、2、6进行了内部管理,不再需要程序员自己去管理,将精力更加聚焦到主业务逻辑。此外还对流程3、4、5中用到的jdbc原生函数进行了不同程度的封装,更加方便程序员使用。
Spring Jdbc Template
1.创建工程,加入新jar包。点击next
切换到Libraries选项卡,点击Add Library
选中UserLibray,点击Next
点击User Librayies…
选中后点击Add External JARs…
使用ctrl键分别选中以下4个包(前两个包在群文件中,后两个包在spring 源jar包中找,我事先把这4个jar包放入到了我个人的springBasicLibs里了)
个人的spring 库中就有14个jar包了,确认后Apply and close
务必勾选上,之后Finish
再次Finish,添加完成。
2. 创建表
在Data source Explorer中找到test数据库,右击选择 GenerateDDL
什么也不勾选
还是不勾选
选择sql脚本存放目录。
选择刚创建的工程test21
设置文件名,根据用途修改。我选择不变。
点击Finish
双击该文件,进入编辑页面
选择作用范围:Name
选择要操作的数据库
编写Sql语句:创建一个student表,插入两条语句
如下:
create table student(
id int not null auto_increment,
username varchar(50) not null,
password varchar(10) not null,
primary key(id)
);
insert into student(username, password) values("A","123456");
insert into student(username, password) values("B","123456");
运行SQl语句
运行结果:创建成功,Schemas/test/Tables/目录下已包含student表
查看表中数据:右击student表->Data->Edit
查看数据
3. 工程目录:
4. 在各个包中编写java源码
包com.edu.tjdz.geng.model下创建实体类Student。
刚开始学习时,可以简单认为实体类对应了数据库表的名字,实体类中的属性对应了数据库表中的属性
package com.edu.tjdz.geng.model;
public class Student {
private String username;
private String password;
private int id;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
包com.edu.tjdz.geng.dao下创建一个接口StudentDao
package com.edu.tjdz.geng.dao;
import com.edu.tjdz.geng.model.Student;
public interface StudentDao {
public void insertStudent(Student s);
}
包com.edu.tjdz.geng.dao.impl下创建一个实现类StudentDaoImpl。该实现类中有一个JdbcTemplate的成员属性,为它生成setter方法。inserStudent这是方法是大家要重点模仿的方法,函数名根据实际功能变化,模仿它的内部实现,通过调用jdbcTemplate对象的方法去实现增删改查这几个功能。
package com.edu.tjdz.geng.dao.impl;
import org.springframework.jdbc.core.JdbcTemplate;
import com.edu.tjdz.geng.dao.StudentDao;
import com.edu.tjdz.geng.model.Student;
public class StudentDaoImpl implements StudentDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void insertStudent(Student s) {
String sql = "insert into student(username, password) values(?,?)";
Object[] args = {s.getUsername(), s.getPassword()};
this.jdbcTemplate.update(sql, args);
}
}
包com.edu.tjdz.geng.test下创建测试类:Test。
package com.edu.tjdz.geng.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.edu.tjdz.geng.dao.StudentDao;
import com.edu.tjdz.geng.model.Student;
public class Test {
public static void main(String[] args) {
Student s = new Student();
s.setUsername("C");
s.setPassword("123456");
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDao stuDao = (StudentDao)appContext.getBean("stuDao1");
stuDao.insertStudent(s);;
}
}
注意下图中关于那三行代码的说明
5. 编写配置文件
<?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
">
<!--1、创建数据源,采用c3p0 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--2、创建Spring jdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--3、创建studentDao对象-->
<bean id="stuDao1" class="com.edu.tjdz.geng.dao.impl.StudentDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>
- 运行Test类的main方法