序言:为了避免学了又忘,趁还完全忘记,用csdn记录下来,本篇文章简单介绍两种连接数据库,并调用数据库数据的方法。第一种比较简单,很容易理解。第二种配置文件比较多一点点(仅一点点),层次可能更清明点,根据自己需要来看吧。
依赖jar和配置:
链接:https://pan.baidu.com/s/1NLTggGSjFQ6TWwsFqSK4IQ
提取码:8dfe
超详细:Java 两种连接数据库的方式 SSM架构和一种超简单的方法
- 简单架构
- .
- SSM架构
- 第一阶段 写配置文件
- 第二阶段 获取数据
简单架构
.
第一步 创建一个Dynamic Web Projiect项目
第二步 导入依赖包,使用这种方法用到的依赖包很少只有两个(感觉只需要mysql包就好,毕竟另一个只是用来处理JSON字段的),导入到该项目下的 WebContent → WEB-INF → lib 里面,直接复制粘贴就好了
第三步 在Java Resource → src 文件夹下建两个包,一个包用来存放连接数据库的配置文件,一个包用来存放接口的文件
第四步 就这步比较复杂,也是最需要练的一步。在helper包下建一个类,类的内容如下,主要就是三个函数 一个连接数据库,一个执行查操作,一个执行增,改,删操作。
在写这个的时候就记三个单词 PreparedStatement,ResultSet和ResultSetMetaData,其他的我们可以使用ctrl + 1自动生成
package helper;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSetMetaData;
public class Helper {
public static Connection getConnection() {
String url = "jdbc:mysql://localhost:3306/session1"; //连接拿台计算机的数据库 session1为数据库名
String username = "root"; //账户名
String password = "123"; //密码
String driver = "com.mysql.jdbc.Driver"; //数据库 驱动
try {
//加载类资源,导入的依赖包里面的
Class.forName(driver);
//返回一个 连接属性
return (Connection) DriverManager.getConnection(url, username, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
// 所有需要用到sql查操作的方法都调用这个函数,预先写好sql语句,传递sql语句进来
// 返回一个数据对象
public static ArrayList<HashMap<String, Object>> sqlSelect(String sql) {
// sql 查询会返回多条语句,用列表来存储,HashMap 存储字段和值
ArrayList<HashMap<String, Object>> array = new ArrayList<HashMap<String, Object>>();
try {
// 核心三条
// 调用上面定义的连接数据库的函数
PreparedStatement ps = (PreparedStatement) getConnection().prepareStatement(sql);
// 返回一个结果集
ResultSet rs = ps.executeQuery();
// 返回数据
ResultSetMetaData rsmd = (ResultSetMetaData) ps.getMetaData();
int row_number = rsmd.getColumnCount();
while(rs.next()) {
// 将数据以键值对的方式存放
HashMap<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < row_number; i++) {
String name = rsmd.getColumnLabel(i + 1);
Object value = rs.getObject(i +1);
map.put(name, value);
}
// 键值对存储起来,相当于查询一条语句就会执行一次这个
array.add(map);
}
// 当查询玩所有数据后,关闭连接
rs.close();ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return array;
}
public static void sqlChange(String sql) {
try {
// 连接,执行,关闭
PreparedStatement ps = (PreparedStatement) getConnection().prepareStatement(sql);
// 因为在数据库中执行增,改,删返回的是执行的数据条数,可以输出在控制台看是否执行了
int i = ps.executeUpdate();
System.out.println("change row number is" + i);
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第五步 在servlet包下创建一个servlet项目,新建可能会报错,如果报错为
Httpservlet cannot be resolved to a type参考添加链接描述 在这步我们简单的执行一个查和改操作,为了避免增大文章篇幅,我将在servlet中直接调用方法,当自己创建项目的时候,一定要分开来写。
写在get和post 方法都不影响访问,我这是写在get放法中的
// 定义一个查询sql语句
String sql_one = "select * from users limit 5";
// 调用查询函数
ArrayList<HashMap<String, Object>> list = Helper.sqlSelect(sql_one);
// 定义一个改sql语句
String sql_two = "update users set firstName = 'my' where UserId = 1";
// 调用改操作函数
Helper.sqlChange(sql_two); // 可以通过控制台看改变的行数
// 将查询操作的结果返回到前端
response.getWriter().append(list.toString());
第六步 检验前面的努力是否白费了,在浏览器中输入自己Servlet接口的路径http://localhost:8080/项目名/接口名(Servlet的名字);
可以看到response.getWriter().append(list.toString());语句将我们找到的数据返回到了前段
我们在Helper类中的更改方法的输出也被执行了
这就是使用比较简单 一种方法连接数据库的方式,只有三个函数,只需记得三个单词就可以自己敲出来了。
SSM架构
前言:使用这个架构来详写,有点太抽象了。而我也仅仅只是为了记录所学,将自己的理解注释于中,并没有能力将这个讲述的很清楚。
使用SSM架构时,老师将一些不太好理解的资源文件也一同下发到文件夹里面了,所以在写例子的时候我也会用到那些文件,因为有些确实靠自己是敲不出来的,
第一阶段 写配置文件
第一步 依然是创建一个Dynamic Web Projiec项目,但是这里我们需要点击下一步然后把web.xml文件给勾上
第二步 导包,用这个方法导入的包比较多有八个,依然是导入WebContent → WEB-INF → lib 里面,这里面的web,xml文件是在WEB-INF文件下面,不是在lib文件下面
第三步 在src文件夹下导入预先准备好的两个xml文件,(预先准备好,是因为这两个头文件实在是太难写了,但是里面的其他的bean对象就要自己来写了,在这里我们不先写这个配置文件,先把web.xml文件的内容写好),然后在创建一个mapper包,这个包后面主要用来存放sql语句的,如果不创建的话加载资源时会出错。
可以看到这两个头文件是非常复杂的,而且没有去记的必要
第四步 配置好web.xml文件。 这里所有的servlet-class里面的内容都不是手打的,起先可以根据路径到Libraries→Web App Libraries下面这些包去找
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SSM</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 找到src文件下的applicationContext.xml文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
第五步 配置src下的spring-mvc.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 扫描controller包 -->
<context:component-scan base-package="pers.test.controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 当你有html文件需要加载时一定要配置这个,要不然可能访问不到 -->
<mvc:default-servlet-handler/>
</beans>
第六步 配置applicationContext.xml文件,这步很复杂,而且不知道是什么原因,这里面的id都只能这样写,我试着写成其他的运行时会报错
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 扫描所有包 -->
<context:component-scan base-package="pers.test"></context:component-scan>
<!-- 配置数据源 -->
<bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value = "jdbc:mysql://localhost:3306/session1?characterEncoding=utf-8&serverTimezone=UTC"></property>
<property name="username" value = "root"></property>
<property name="password" value = "123"></property>
<property name="driverClassName" value = "com.mysql.cj.jdbc.Driver"></property>
</bean>
<!-- 配置会话工厂 -->
<bean id ="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref = "dataSource"></property>
<property name="mapperLocations" value = "classpath:mapper/*.xml"></property>
</bean>
<!-- 配置映射对象,SQL语句的映射 -->
<bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value = "pers.test.dao"></property>
<property name="sqlSessionFactoryBeanName" value = "sqlSessionFactory"></property>
</bean>
</beans>
第七步 主要的配置文件都写好了,写一个测试用例,测试一下我们的web.xml文件是否写错。 创建一个pers.test.controller包,包下建立一个ControllerTest类,
类的内容
package pers.test.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ControllerTest {
//这个是你访问的接口的名字
@RequestMapping("hello")
@ResponseBody
String sayHello() {
return "Hello World !";
}
}
通过前段访问,我们访问到了该结构返回的一个String字段。但是这个例子与数据库毫无关联,但是也要写,是为了后面出现错误能缩小错误的范围
第二阶段 获取数据
第一步 建包,先把需要的包都建好,需要注意的是如果包名在相同的情况下,并且没有资源会被合并,所以建议建一个包在包下创建一个资源。为了减小篇幅我只建一个包pers.test.dao包,然后在里面创建一个Interfac接口
第二步 写SQL语句,在mapper包下建立一个.xml的文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace是你的SQL语句映射到dao包下的接口文件 -->
<mapper namespace = "pers.test.dao.TestDao">
<!-- 这个Id必须和你pers.test.dao.TestDao下的方法名一模一样 -->
<select id="testSelect" resultType="HashMap">
select * from users limit 5
</select>
</mapper>
第三步 在TestDao接口下,声明一个与select语句id同名的方法,
package pers.test.dao;
import java.util.HashMap;
import java.util.List;
public interface TestDao {
List<HashMap<String, Object>> testSelect();
}
第四步 数据调用,在TestController下调用接口
package pers.test.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import pers.test.dao.TestDao;
//千万不能忘记这个注解啊
@Controller
public class ControllerTest {
//先声明接口文件
@Resource
TestDao testDao;
//这个是你访问的接口的名字
@RequestMapping("hello")
@ResponseBody
Object sayHello() {
return testDao.testSelect();
}
}
通过接口访问我们可以看到访问到了我们sql查询到的语句
更改操作和这个也差不多,但是需要注意的是,xml里面的SQL语句接受参数是通过键值对来的,而不是直接使用参数,所以在dao包下的方法传参数也应该以键值对来传参数。