持久层简述

72 阅读2分钟

个人用过的持久层有 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 已经整合完毕.

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。