手撕持久层框架详细代码以及流程(上)

1.创建一个maven的java工程

2.引入依赖的jar包

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.8</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
    </dependency>
</dependencies>

3.创建数据源的属性文件

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/1suo
username=root
password=12345678

上面的属性文件就是用来连接数据库的,换成自己的数据库就行了

4.创建Dbutil工具类

package com.ls.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.mysql.cj.protocol.Resultset;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @program: shousichijiuceng
 * @description:
 * @author: 1suo
 * @create: 2024-07-02 09:24
 **/
public class DbUtil {
    //数据源对象
    private  static DataSource dataSource;
    //静态代码块 只执行一次
    static {
        try {
            //创建一个属性对象
            Properties properties =new Properties();
            //加载属性文件
            InputStream is=DbUtil.class.getClassLoader().getResourceAsStream("db.properties");
            properties.load(is);
            //获取连接池对象
            dataSource= DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e){
            e.printStackTrace();;
        }
    }

    //获取连接对象
     public  static Connection getConnection() throws  Exception{
        Connection conn=dataSource.getConnection();
        return conn;
    }
    //释放资源
     public  static  void closeAll(Connection conn, PreparedStatement ps, ResultSet rs){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (ps !=null){
            try {
                ps.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

 5.实体类的创建

用mybatis创建实体类

package com.ls.entity;

import java.io.Serializable;

import com.ls.annotation.TableField;
import com.ls.annotation.TableId;
import com.ls.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 
 * @TableName user
 */

@Data  //简单来说就是简写了get,set方法
@NoArgsConstructor//无参构造
@AllArgsConstructor//有参构造
@TableName(value = "user")//这个就是自行创建的自定义注解 作用:为了为数据库的表名一致,如果是一致的则不用写,我这一致但也写了
public class User{
 
    @TableId //用来找到主键
    private Integer id;

   
    private String account;

  
    private String password;

   
    private String tel;

    @TableField(value = "true_name") //用来和数据库的列名一致,如果一致则不用写 
    private String trueName;


}

6.自定义注解

6.1 TableField:专门用于属性的注解

package com.ls.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TableField {
    String value();
}

6.2  TableId:专门用于找到主键

package com.ls.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableId {
    String value() default "id";
}

6.3 TableName:专门用于得到表的名称

package com.ls.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TableName {
    String value();
}

 7.创建对应实体类的Dao

注:只用来继承BaseDao

package com.ls.dao;

import com.ls.entity.User;

/**
 * @program: shousichijiuceng
 * @description:
 * @author: 1suo
 * @create: 2024-07-02 16:45
 **/
public class UserDao extends BaseDao<User> {
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值