当前位置: 首页 > news >正文

WordPress添加用户组网络排名优化软件

WordPress添加用户组,网络排名优化软件,商洛网站建设哪家好,产品推广渠道文章目录 JDBC封装DAO模式实体类DAO接口DAO实现类数据源配置基础DAO类业务逻辑层 单例模式饿汉式懒汉式 JDBC封装 JDBC(Java Database Connectivity)封装是一种将 JDBC 的基本操作和常见的数据库访问逻辑封装成易于使用的工具类或框架的方法。这样做的目…

文章目录

    • JDBC封装
    • DAO模式
      • 实体类
      • DAO接口
      • DAO实现类
      • 数据源配置
      • 基础DAO类
      • 业务逻辑层
    • 单例模式
      • 饿汉式
      • 懒汉式

JDBC封装

JDBC(Java Database Connectivity)封装是一种将 JDBC 的基本操作和常见的数据库访问逻辑封装成易于使用的工具类或框架的方法。这样做的目的是为了减少重复代码,提高代码的可读性和可维护性,并且简化数据库访问的过程。

在这里插入图片描述

隔离业务逻辑代码和数据访问代码
隔离不同数据库的实现

实现 JDBC 封装

  • 将所有增删改查操作抽取成接口
  • 定义实体类传输数据
  • 将通用的操作(打开、关闭连接等)封装到工具类
  • 数据库工具类BaseDao:增、删、改、查的通用方法

DAO模式

DAO(Data Access Object 数据存取对象)模式:将数据访问逻辑封装在单独的类中,使得业务逻辑层不需要关心具体的数据库操作细节。

  • DAO接口:定义了对数据库进行访问的方法
  • DAO实现类:实现了DAO接口,提供了具体的数据访问逻辑
  • 实体类:表示数据库中的表或记录
  • 数据源配置:配置数据库连接信息
  • 业务逻辑层:使用DAO接口来处理业务逻辑,而不需要关心具体的数据库操作

DAO 起着转换器的作用,将数据在实体类和数据库记录之间进行转换

在这里插入图片描述

创建包

com.dao             ----放接口文件    UserDao  BaseDao(数据库工具类)com.dao.impl    ----放接口实现类   UserDaoImpl
com.entity||pojo    ----放实体类      User

实体类

代表数据库中的表或记录。每个实体类通常对应一个数据库表,并且包含与表字段相对应的属性。

public class SmbmsUser {private Integer id;          // idprivate String userCode;     // 用户编码private String userName;     // 用户名称private String userPassword; // 用户密码private Integer gender;      // 性别private Date birthday;       // 出生日期private String phone;        // 电话private String address;      // 地址private Integer userRole;    // 用户角色private Integer createdBy;   // 创建者private Date creationDate;   // 创建时间private Integer modifyBy;    // 更新者private Date modifyDate;     // 更新时间@Overridepublic String toString() {// 重写 toString() 方法...}// get&set 方法...
}

DAO接口

定义了对数据库进行访问的方法,通常是增删改查等基本操作。

公共接口

public interface PublicInterface<E> {/*** 根据ID获取单一实体。* @param id 实体的唯一标识* @return 返回Optional包装的实体,如果没有找到则返回空的Optional*/E findById(Integer id);/*** 获取所有实体。* @return 返回包含所有实体的列表*/List<E> findAll();/*** 保存或更新实体。* 如果实体已存在,则执行更新操作;如果不存在,则执行插入操作。* @param e 要保存或更新的实体* @return 操作后的实体*/int save(E e);/*** 删除指定ID的实体。* @param id 要删除的实体ID*/int deleteById(Integer id);
}

SmbmsUser 类接口

public interface SmbmsUserDao extends PublicInterface<SmbmsUser>{/*** 登录* @param name 用户名* @param pwd 密码* @return 用户对象*/public SmbmsUser login(String name, String pwd);
}

DAO实现类

实现了DAO接口,提供了具体的数据访问逻辑。这个类中包含了与数据库交互的具体代码。

public class SmbmsUserDaoImpl extends BaseDao implements SmbmsUserDao {@Overridepublic SmbmsUser login(String name, String pwd) {try{if(getConnection()){// 3.准备 SQL 语句String sql = "select id,userCode,userName,userPassword from smbms_user " +"where userCode = ? and userPassword = ?";ResultSet res = query(sql,name,pwd);// 6.处理 resultSet 结果集SmbmsUser smbmsUser = null;while(res.next()){smbmsUser = new SmbmsUser();smbmsUser.setId(res.getInt("id"));smbmsUser.setUserCode(res.getString("userCode"));smbmsUser.setUserName(res.getString("userName"));smbmsUser.setUserPassword(res.getString("userPassword"));}return smbmsUser;}} catch (Exception e) {e.printStackTrace();} finally {closeResources(); // 释放资源}return null;}@Overridepublic SmbmsUser findById(Integer id) {// ...}@Overridepublic List<SmbmsUser> findAll() {try{if(getConnection()){String sql = "select id,userCode,userName,userPassword from smbms_user";ResultSet res = query(sql);List<SmbmsUser> list = new ArrayList<>();while(res.next()){SmbmsUser smbmsUser = new SmbmsUser();smbmsUser.setId(res.getInt("id"));smbmsUser.setUserCode(res.getString("userCode"));smbmsUser.setUserName(res.getString("userName"));smbmsUser.setUserPassword(res.getString("userPassword"));list.add(smbmsUser);}return list;}} catch (Exception e) {e.printStackTrace();} finally {closeResources(); // 释放资源}return null;}@Overridepublic int save(SmbmsUser smbmsUser) {try {if (getConnection()) {String sql = "INSERT INTO smbms_user (userCode, userName, userPassword) " +"VALUES (?, ?, ?)";return update(sql, smbmsUser.getUserCode(), smbmsUser.getUserName(), smbmsUser.getUserPassword());}} catch (Exception e) {e.printStackTrace();} finally {closeResources(); // 释放资源}return 0;}@Overridepublic int deleteById(Integer id) {try {if (getConnection()) {return update("DELETE FROM smbms_user WHERE id = ?",id);}} catch (Exception e) {e.printStackTrace();} finally {closeResources(); // 释放资源}return 0;}
}

数据源配置

数据源配置通常在单独的文件中定义,例如 jdbc.propertiesapplication.properties

使用属性文件来管理数据库连接信息,需要创建 .properties文件存储配置,并在 Java 代码中读取这些属性。

# jdbc.properties 数据格式为 " 键 = 值 "
mysql.driver = com.mysql.cj.jdbc.Driver
mysql.url = jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
mysql.username = root
mysql.userpwd = root

Java 中提供了 Properties 类来读取配置文件

/*** @Description: 读取JDBC.properties文件* 饿汉模式*/
public class ConfigManager {private static Properties properties = new Properties();// 只运行一次static {try {InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream("jdbc.properties");// 将字节流转换为 properties 对象properties.load(is);System.out.println(properties.getProperty("mysql.driver"));} catch (IOException e) {throw new RuntimeException(e);}}public static String getString(String key){return properties.getProperty(key);}
}

基础DAO类

BaseDao 类封装了与数据库连接、执行查询和更新操作以及释放资源相关的通用功能。是一个基础的数据访问对象类。

提供了以下功能:

  • 获取数据库连接。
  • 执行查询操作并返回结果集。
  • 执行增删改操作并返回受影响的行数。
  • 释放数据库连接和 PreparedStatement 对象。
public class BaseDao {protected Connection conn = null;protected PreparedStatement stat = null;/*** 获得 conn 对象* @return*/public boolean getConnection() {try {// 1.加载驱动Class.forName(ConfigManager.getString("mysql.driver"));// 2.创建 Connection 对象(通过 DriverManager)conn = DriverManager.getConnection(ConfigManager.getString("mysql.url"), ConfigManager.getString("mysql.username"), ConfigManager.getString("mysql.userpwd"));return true;} catch (Exception e) {e.printStackTrace();}return false;}/*** 查询*/public ResultSet query(String sql, Object... objs) throws Exception{// 4.赋值 PreparedStatement 对象(通过 Connection)stat = conn.prepareStatement(sql);// 5.执行 SQL 语句(通过 PreparedStatement)if(objs != null){for (int i = 0; i < objs.length; i++) {stat.setObject((i + 1),objs[i]);}}return stat.executeQuery();}/*** 增删改*/public int update(String sql,Object... objs) throws Exception{// 4.赋值 PreparedStatement 对象(通过 Connection)stat = conn.prepareStatement(sql);// 5.执行 SQL 语句(通过 PreparedStatement)if(objs != null){for (int i = 0; i < objs.length; i++) {stat.setObject((i + 1),objs[i]);}}return stat.executeUpdate();}/*** 释放资源*/public void closeResources(){// 7. 关闭资源try {if(stat != null) stat.close();if(conn != null) conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}
}

业务逻辑层

使用DAO接口来处理业务逻辑,而不需要关心具体的数据库操作。

public class Main {public static void main(String[] args) {SmbmsUserDao smbmsUserDao = new SmbmsUserDaoImpl();// 测试登录SmbmsUser smbmsUser = smbmsUserDao.login("liming","0000000");if(smbmsUser != null){System.out.println("登录成功!"+smbmsUser.getUserName()+"欢迎您!");} else {System.out.println("账号或密码错误,登录失败!");}// 测试添加用户SmbmsUser newUser = new SmbmsUser();newUser.setUserCode("yier");newUser.setUserName("yier");newUser.setUserPassword("1234567");int addResult = smbmsUserDao.save(newUser);if (addResult > 0) {System.out.println("新用户添加成功!");} else {System.out.println("新用户添加失败!");}// 测试查询所有List<SmbmsUser> allUsers = smbmsUserDao.findAll();System.out.println(allUsers);// 测试根据 ID 查询// 假设我们要查询刚刚添加的用户SmbmsUser foundUser =  smbmsUserDao.findById(newUser.getId());if (foundUser != null) {System.out.println("该用户为: " + foundUser);} else {System.out.println("该用户不存在");}// 测试删除用户// 假设我们要删除刚刚添加的用户int i = smbmsUserDao.deleteById(newUser.getId());if (i > 0) {System.out.println("用户删除成功!");} else {System.out.println("用户删除失败!");}}
}

单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁实例化然后销毁的对象,或者创建对象需要消耗大量资源的情况。单例模式可以确保系统中某个类的唯一性,避免由于多实例导致的数据不一致等问题。

  • 单一实例:整个系统运行期间,只存在一个该类的实例。
  • 私有构造器:防止外部通过new关键字直接创建实例。
  • 自行创建实例:在类内部自行创建唯一的实例。
  • 静态私有对象:定义一个静态私有的成员变量来保存这个唯一的实例。
  • 全局访问点:提供一个公共的方法,使外界能够获取到这个实例。

饿汉式

(Eager Initialization)

这种方式在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。这是线程安全的实现。

/*** @Description: 读取JDBC.properties文件* 饿汉模式*/
public class ConfigManager {private static Properties properties = new Properties();// 只运行一次static {try {InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream("jdbc.properties");// 将字节流转换为 properties 对象properties.load(is);System.out.println(properties.getProperty("mysql.driver"));} catch (IOException e) {throw new RuntimeException(e);}}public static String getString(String key){return properties.getProperty(key);}
}

懒汉式

(Lazy Initialization, 线程不安全)

这种方式延迟了实例的创建,直到第一次使用时才进行初始化。但是这种方法不是线程安全的,在多线程环境下可能会产生多个实例,因此需要用到 synchronized 关键字。

/*** @Description: 读取JDBC.properties文件* 懒汉模式*/
public class ConfigManager1 {private static ConfigManager1 configManager1 = null;private static Properties properties = new Properties();public ConfigManager1(){try {InputStream is = ConfigManager1.class.getClassLoader().getResourceAsStream("jdbc.properties");// 将字节流转换为 properties 对象properties.load(is);System.out.println(properties.getProperty("mysql.driver"));} catch (IOException e) {throw new RuntimeException(e);}}public synchronized static ConfigManager1 getConfigManager1(){if(configManager1 == null){configManager1 = new ConfigManager1();}return configManager1;}public  String getString(String key){return properties.getProperty(key);}
}public class Singleton {private static Singleton instance;// 私有构造函数private Singleton() {}// 提供一个全局访问点public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

在整个程序运行期间,有且仅有一个实例。若违背这一点,所设计的类就不是单例类。

单例模式懒汉模式饿汉模式
概念在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例在类加载的时候就完成初始化
特点类加载速度快,但是运行时获取对象的速度较慢(时间换空间)类加载较慢,但获取对象速度快(空间换时间)
延迟加载(lazy loading)具备不具备
线程安全线程不安全线程安全

文章转载自:
http://dinncotargum.wbqt.cn
http://dinncotractable.wbqt.cn
http://dinncodesmotropism.wbqt.cn
http://dinncosoja.wbqt.cn
http://dinncoshache.wbqt.cn
http://dinncomiriness.wbqt.cn
http://dinncoicositetrahedron.wbqt.cn
http://dinncotransthoracic.wbqt.cn
http://dinncooxydase.wbqt.cn
http://dinnconumidian.wbqt.cn
http://dinnconapoo.wbqt.cn
http://dinncoterminator.wbqt.cn
http://dinncosensurround.wbqt.cn
http://dinncoluminism.wbqt.cn
http://dinncovsf.wbqt.cn
http://dinncocosmogonic.wbqt.cn
http://dinncotetrafunctional.wbqt.cn
http://dinncoeligible.wbqt.cn
http://dinncopistillate.wbqt.cn
http://dinncosacrosanctity.wbqt.cn
http://dinncotransplanter.wbqt.cn
http://dinncoproteolysis.wbqt.cn
http://dinncosemischolastic.wbqt.cn
http://dinncoraucously.wbqt.cn
http://dinncoimbody.wbqt.cn
http://dinncoaden.wbqt.cn
http://dinncovocabulary.wbqt.cn
http://dinncoketogenic.wbqt.cn
http://dinncoextine.wbqt.cn
http://dinncofalsehood.wbqt.cn
http://dinncoteu.wbqt.cn
http://dinncostud.wbqt.cn
http://dinncobivallate.wbqt.cn
http://dinncodeterminist.wbqt.cn
http://dinncoglulam.wbqt.cn
http://dinncoblight.wbqt.cn
http://dinncoretinoscopy.wbqt.cn
http://dinncoreprobate.wbqt.cn
http://dinncocarval.wbqt.cn
http://dinncodemetrius.wbqt.cn
http://dinncoimpressionism.wbqt.cn
http://dinncowindmill.wbqt.cn
http://dinncoskewwhiff.wbqt.cn
http://dinncopariah.wbqt.cn
http://dinncocemetery.wbqt.cn
http://dinncochymopapain.wbqt.cn
http://dinncosmoke.wbqt.cn
http://dinncocaducous.wbqt.cn
http://dinncohyperverbal.wbqt.cn
http://dinncobegan.wbqt.cn
http://dinncostagflation.wbqt.cn
http://dinncoswordflag.wbqt.cn
http://dinnconeophilia.wbqt.cn
http://dinncoartificiality.wbqt.cn
http://dinncotardy.wbqt.cn
http://dinncotolerate.wbqt.cn
http://dinncopercent.wbqt.cn
http://dinncooverthrew.wbqt.cn
http://dinncohyperazoturia.wbqt.cn
http://dinncocistern.wbqt.cn
http://dinncoexpeditiously.wbqt.cn
http://dinncophilopoena.wbqt.cn
http://dinncoeigenvalue.wbqt.cn
http://dinncopolarizable.wbqt.cn
http://dinncojolty.wbqt.cn
http://dinncoterpolymer.wbqt.cn
http://dinncoodograph.wbqt.cn
http://dinncotechnify.wbqt.cn
http://dinncohybridize.wbqt.cn
http://dinncoportulacaceous.wbqt.cn
http://dinncoflit.wbqt.cn
http://dinncohandyman.wbqt.cn
http://dinncofreehearted.wbqt.cn
http://dinncocarse.wbqt.cn
http://dinncoautocatalytic.wbqt.cn
http://dinncobalefully.wbqt.cn
http://dinncomoistureproof.wbqt.cn
http://dinncomagnon.wbqt.cn
http://dinncodownward.wbqt.cn
http://dinncoradiant.wbqt.cn
http://dinncosphygmic.wbqt.cn
http://dinncothrombin.wbqt.cn
http://dinncoensignship.wbqt.cn
http://dinncozoomechanics.wbqt.cn
http://dinncoracehorse.wbqt.cn
http://dinncocommixture.wbqt.cn
http://dinncotetched.wbqt.cn
http://dinncogondwanaland.wbqt.cn
http://dinncomunitions.wbqt.cn
http://dinncoscenarist.wbqt.cn
http://dinncocolumbous.wbqt.cn
http://dinncowineskin.wbqt.cn
http://dinncocluster.wbqt.cn
http://dinncostarlight.wbqt.cn
http://dinncosunbreaker.wbqt.cn
http://dinncodispersed.wbqt.cn
http://dinncodrainer.wbqt.cn
http://dinncoisopulse.wbqt.cn
http://dinncoguajira.wbqt.cn
http://dinncopolemical.wbqt.cn
http://www.dinnco.com/news/127260.html

相关文章:

  • 精美网站设计长沙优化科技有限公司
  • 查询网站备案密码是什么样的2022双11各大电商平台销售数据
  • 做网站是前端还是后端优化营商环境工作总结
  • asp动态网站建设杭州网站设计公司
  • 设计网站首页步骤sem与seo的区别
  • 大庆开发网站公司网站seo思路
  • 网站开发公司方案seo就业指导
  • 手机网站图片锚链接怎么做app开发公司
  • 用自己电脑做服务器 网站百度手机助手下载安卓版
  • 搜狐网站网络营销怎么做河北seo
  • 网站抓取qq免费建立个人网站凡科
  • 在网站上做播放视频广告是否违法国家反诈中心app下载
  • 推荐6个免费国外自媒体平台seo专家招聘
  • ftp地址格式怎么写关键词优化排名的步骤
  • 免费网站服务器域名中国营销传播网
  • 大连网站建设谁家好如何注册自己的网站
  • app调用 wordpress深圳网站优化
  • 查楼盘剩余房源的网站爱用建站官网
  • wordpress网站加密方式seo优化方法
  • 开发公司年度工作计划seo综合查询站长工具
  • 贵阳网站建设宏思锐达有没有专门做策划的公司
  • 服装行业网站建设方案今日头条热搜榜
  • 有做翻译英文网站武汉楼市最新消息
  • 山东网站建设公司广州网站建设正规公司
  • 青岛网站建设找优化营商环境个人心得体会
  • 模板网站zencart游戏推广合作平台
  • 淘宝做店招的网站软件培训机构哪家好
  • dreamweaver怎样用框架做网站qq群排名优化软件购买
  • 做网站项目主要技术湖南seo优化推荐
  • 网站开发文档步骤应该怎么写如何自己做推广