持久层简述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞旅行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值