0
点赞
收藏
分享

微信扫一扫

持久层简述


个人用过的持久层有 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 条评论