个人用过的持久层有 jdbc mybatis hibernate jpa(spring版本jpa)
今天简单介绍下 jdbc,这个相对来说简单,无需整合.
1 引入mysql-connector-java-**jar
2 编写链接数据库工具类,以及一些公共方法
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JDBC工具类?
* 一、增删改的通用方法
* 二、查询的通用方法
* 三、关闭的通用方法
*/
public class DBUtil {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull",
"root","");
}catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/** 增删改的通用方法
* @paramString sql 要执行的sql
* @paramObject[] obj 对象类型的数组 里面存放着 sql执行的占位符参数
* 【name,age,id】
* 【id】
* 【name,age】
* Object... 可变参数
* */
public static boolean executeUpdate(String sql,Object... args){
Connection conn =null;
PreparedStatement ps =null;
try {
conn =getConnection();
ps = conn.prepareStatement(sql);
for (int i=0;i
ps.setObject(i+1,args[i]);
}
int i = ps.executeUpdate();
if (i>0)return true;
}catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭
close(conn,ps,null);
}
return false;
}
/**
* c查询的通用方法
* @param sql
* @param args
* @return
*/
public static List> executeQuery(String sql,Object... args){//可变参数Object... args
Connection conn =null;
PreparedStatement ps =null;
ResultSet set =null;
try {
conn = DBUtil.getConnection();
ps = conn.prepareStatement(sql);
/* 有可能有参数*/
for (int i=0;i
ps.setObject(i+1,args[i]);
}
/*执行*/
set = ps.executeQuery();
/*需要将所有数据都存放到 List中 每一行 用一个 map存放*/
List> list =new ArrayList<>();
/*获取本次查询结果集有多少列*/
int count = set.getMetaData().getColumnCount();
while(set.next()){
Map map =new HashMap<>();//一行数据 用一个map 接收
/*
我们不用在乎数据库表中有几列
通过 getMetData().getColumnLabel() 获取列
因为用的map键值对集合 得到了列 就能得到相应的values值*/
for(int i=0;i
String name = set.getMetaData().getColumnLabel(i+1);
map.put(name,set.getObject(name));
}
/*将每行的map存放到 List中*/
list.add(map);
}
return list;
}catch (Exception e) {
e.printStackTrace();
}finally {
close(conn,ps,set);
}
return null;
}
/** 关闭的通用方法
* 先进后出的原则
* */
private static void close(Connection conn,PreparedStatement st,ResultSet set){
try {
if(set!=null){
set.close();
}
if(st!=null){
st.close();
}
if(conn !=null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
=======================================================================
3 用法
新建一个类TestController
import com.example.demo.util.DBUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
public class TestController {
@Autowired
private ExcelServcieexcelServcie;
/**
* @comment TestController.java
* @author FL
* @date 2020-7-2 13:27:11
* @email 1792939443@qq.com
*/
@RequestMapping("test")
public String name(Model model) {
//查询
List> maps = DBUtil.executeQuery("select * from excel");//sql语句
for (Map map : maps) {
System.out.println(map.get("id"));//输出 查询到的id字段
}
return null;
}
}
到此,原生jdbc 已经整合完毕.