文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

高效掌握JDBC技术(二)| 掌握ORM思想 | 定义连接数据库的工具类

2023-08-16 20:16

关注

✅作者简介:C/C++领域新星创作者、CSDN内容合伙人,喜欢学习后端语言的大学生
✨精品专栏:C++面向对象核心
🔥系列专栏:JDBC技术
📃推荐一款模拟面试、刷题神器👉注册免费刷题

🔥前言

上文讲了JDBC连接数据库的六大步,成功完成了对数据库的修改的读取。那么今天就来学习一下ORM思想,理解面向对象语言与关系型数据库之间的映射关系,学习把连接数据库的方法定义到一个工具类中从而减少重复代码的书写。

ORM框架思想:

广义上,ORM指的是面向对象的对象模型关系型数据库的数据结构之间的相互转换。 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口

模型数据格式操作数据的方式
java: 面向对象的语言对象、属性、类通过方法操作对象
mysql:关系型数据库行、字段、表的设计通过SQL语句操作表中数据

实践部分:

1、实体类

java数据库
类:对对象的设计表:对字段的设计
属性字段:列
对象
public class User implements Serializable {    private Integer id;    private String name;    private String sex;    private Integer age;    public User() {    }    public User(Integer id, String name, String sex, Integer age) {        this.id = id;        this.name = name;        this.sex = sex;        this.age = age;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}

2、DAO模式

UserDao接口:

package com.bz.dao;import com.bz.entity.User;public interface UserDao {        int insertUser(User user) throws  Exception;        User seleteUserById(Integer id) throws  Exception;}

UserDaoImpl实现:

package com.bz.dao.impl;import com.bz.dao.UserDao;import com.bz.entity.User;public class UserDaoImpl implements UserDao {    @Override    public int insertUser(User user) throws Exception{        //1. 加载驱动        Class.forName("com.mysql.cj.jdbc.Driver");        //2. 获取连接        //用户名        String username = "root";        //密码        String pwd = "123456";        //连接的url        String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";        Connection conn = DriverManager.getConnection(url, username, pwd);        //3. 获取发送SQL的工具        String sql="insert into t_user (u_name,u_sex,u_age) VALUES(?,?,?)";        PreparedStatement ps = conn.prepareStatement(sql);        //4. 发送并执行SQL        //给占位符赋值:用参数对象的值给表中字段赋值        ps.setString(1,user.getName());        ps.setString(2,user.getSex());        ps.setInt(3,user.getAge());        int n=ps.executeUpdate();        //5. 处理结果集  略        //6.关闭资源        ps.close();        conn.close();        return  n;//把受影响行数返回    }    @Override    public User seleteUserById(Integer id) throws  Exception {        User user=null;//用来返回的User对象        //1. 加载驱动        Class.forName("com.mysql.cj.jdbc.Driver");        //2. 获取连接        //用户名        String username = "root";        //密码        String pwd = "123456";        //连接的url        String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";        Connection conn = DriverManager.getConnection(url, username, pwd);        //准备发送SQL        String sql = "select * from t_user where u_id=?";        PreparedStatement ps = conn.prepareStatement(sql);        //发送SQL        //给占位符赋值        ps.setInt(1,id);        ResultSet rs=ps.executeQuery();        //处理结果集        if (rs.next()){//判断结果集中是否存在内容            Integer uid = rs.getInt("u_id");            String uname = rs.getString("u_name");            String usex = rs.getString("u_sex");            Integer uage = rs.getInt("u_age");            //根据字段值构建对应的User对象            user= new User(uid, uname, usex, uage);        }        //关闭资源        rs.close();        ps.close();        conn.close();        return user;    }}

测试UserDao的接口实现类:

package com.bz.test;import com.bz.dao.UserDao;import com.bz.dao.impl.UserDaoImpl;import com.bz.entity.User;public class TestUser {    public static void main(String[] args) throws Exception{        //创建实现类对象        UserDao ud=new UserDaoImpl();//测试查询方法        User user= ud.seleteUserById(2);        System.out.println(user);        //创建用来添加的对象        User user = new User("zhangsan", "男", 38);        //调用添加方法,接收返回值        int n = ud.insertUser(user);        //判断返回值        if (n>0){            System.out.println("添加成功");        }else{            System.out.println("添加失败");        }    }}

从上面书写Dao接口实现类的时候我们发现,每当我要对数据库进行操作就要建立一个连接,书写六大步骤,是不是过于繁琐呢?因此我们直接实现一个数据库连接的工具类来减少重复代码的书写。

1、JDBCUtils的具体代码实现

package com.bz.util;import java.sql.*;public class JDBCUtils {    public static Connection getConnection(){        Connection conn =null;        try {            //1. 加载驱动            Class.forName("com.mysql.cj.jdbc.Driver");            //2. 获取连接            //用户名            String username = "root";            //密码            String pwd = "123456";            //连接的url            String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";            conn = DriverManager.getConnection(url, username, pwd);        }catch (ClassNotFoundException e){            System.out.println("驱动路径不正确");        }catch (SQLException e){            System.out.println("获取连接失败");        }catch (Exception e){            System.out.println("未知异常");            e.printStackTrace();        }       return conn;    }        public static void close(ResultSet rs, PreparedStatement ps,Connection conn){        if (rs!=null){            try {                rs.close();            } catch (SQLException e) {                System.out.println("关闭rs失败");            }        }        if (ps!=null){            try {                ps.close();            } catch (SQLException e) {                System.out.println("关闭ps失败");            }        }        if (conn!=null){            try {                conn.close();            } catch (SQLException e) {                System.out.println("关闭conn失败");            }        }    }}

2、调用工具类

public class UserDaoImpl implements UserDao {    @Override    public int insertUser(User user) throws Exception{        //调用工具类的方法获取连接        Connection conn=JDBCUtils.getConnection();        //3. 获取发送SQL的工具        String sql="insert into t_user (u_name,u_sex,u_age) VALUES(?,?,?)";        PreparedStatement ps = conn.prepareStatement(sql);        //4. 发送并执行SQL        //给占位符赋值:用参数对象的值给表中字段赋值        ps.setString(1,user.getName());        ps.setString(2,user.getSex());        ps.setInt(3,user.getAge());        int n=ps.executeUpdate();        //5. 处理结果集  略        //6.调用工具类方法关闭资源        JDBCUtils.close(null,ps,conn);        return  n;//把受影响行数返回    }}

希望大家可以在这篇文章中学到ORM思想,此外可以参加投票,我将会在后续文章中做出改进,感谢你的配合!

来源地址:https://blog.csdn.net/m0_58618795/article/details/126630412

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯