当前位置:网站首页>如何操作数据库

如何操作数据库

2022-08-09 06:21:00 ggaofeng

方式1、不使用任何框架,直接使用原生的jdbc。 特点:代码较多,灵活性最强。

          一般为了复用代码,会写一个DBhelper类来封装数据库的通用操作。

方式2、DAO(Data Access Object)数据存取对象模式。(参考 https://www.runoob.com/note/27029

https://www.cnblogs.com/Believer/p/5282284.html

package DAO;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import tools.DBHelper;
import tools.DBtools;
import entity.User;

public class UserDAO{

    public boolean insert(User u){
        String SQL="INSERT INTO user(userID,userName,password)VALUES(?,?,?)";
        Object[] params=new Object[]{u.getUserID(),u.getUserName(),u.getPassword()};
        int n=DBHelper.ExecSql(SQL,params);
        if(n>0) return true;
        else return false;
    }
    public boolean delete(User u){
           String sql="delete from user where userID=?";
           Object[] obj=new Object[]{u.getUserID()};
           int rs=DBHelper.ExecSql(sql,obj);
           if(rs==1)
          return true;
           else
          return true;
    }
    public boolean update(User u){
           String sql="update  user set username=?,password=? where userID=?";
           Object[] obj=new Object[]{u.getUserName(),u.getPassword(),u.getUserID()};
           int rs=DBHelper.ExecSql(sql,obj);
           if(rs==1)
            return true;
           else
           return false;
       }
    public static List getAllUser(){
        List users=new ArrayList();
        String SQL="SELECT * FROM user";
        ResultSet rs=DBHelper.getResultSet(SQL);
        return DBtools.ResultSettoList(rs, User.class);
        }
}

3、使用ORM框架,比如Mybatis。(参考 https://blog.csdn.net/Miner_Jasber_Yon/article/details/45119603?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

一般有两种开发模式:

模式1.使用Dao 与 DaoImpl 的方法的MyBatis程序

user_mapper.xml 映射文件

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
 
   <select id="findUserByName" parameterType="string"
    resultType="cn.jasberyon.mybatis.pojo.User">
        SELECT * FROM user_ WHERE username=#{id}
   </select>
</mapper>


import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
 
import cn.jasberyon.mybatis.dao.UserDao;
import cn.jasberyon.mybatis.pojo.User;
 
public classUserDaoImpl implements UserDao{
 
   private SqlSessionFactory sqlSessionFactory;
  
   publicUserDaoImpl(SqlSessionFactory sqlSessionFactory) {
      this.sqlSessionFactory= sqlSessionFactory;
   }
  
   @Override
   public UserfindUserByName(String selectId, String username)throwsException {
      // TODO Auto-generated method stub
      //从会话工厂得到会话 SqlSession
      SqlSessionsession= this.sqlSessionFactory.openSession();
      Useruser= session.selectOne(selectId, username);
      session.close();
      return user;
   }
 }

模式2.使用动态代理对象的MyBatis的Dao实现

user_mapper.xml 映射文件

<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
   <select id="findUserByName" parameterType="string"
    resultType="cn.jasberyon.mybatis.pojo.User">
        SELECT * FROM user_ WHERE username=#{id}
   </select>
</mapper>


UserMapper.java (相当于UserDao接口)
public interfaceUserMapper {
   public UserfindUserByName(String username) throwsException;
   public List<User>findUserList() throwsException;
}
 
使用方法
SqlSessionsqlSession= this.sqlSessionFactory.openSession();
      //通过 sqlSession得到UserMapper的代理对象
      UserMapperuserMapper= sqlSession.getMapper(UserMapper.class);
      //调用UserMapper的查询方法
      List<User>list= userMapper.findUserList();

3、Repository VS DAO (参考 https://www.cnblogs.com/xishuai/p/ddd_repository.html

仓储是DDD(领域驱动设计)中的一个层。

他是站在领域的角度看问题,而DAO是站在数据库的角度看问题。

3.1  仓储的两种设计方式:面向集合和面向持久化

面向集合和面向持久化,这两种类型的仓储设计方式,在《实现领域驱动设计》中有很详细的讲解,作者还附带了几个具体的实现,比如 Hibernate 实现、TopLink 实现等等,这个必须赞一个,感兴趣的朋友,可以进行阅读下。这面我简单说明下,这两种设计方式的不同之处,举个最直白的例子。

面向集合方式:

this.UserRepository.Add(user);

面向持久化方式:

this.UserRepository.Save(user);

可能很多朋友看到这,会不以为然,需要明确一点,在领域驱动设计中,不论是变量或是方法的命名规则都非常重要,因为其代码就是代表着一种通用语言,你要让人家可以看懂。在面向集合方式中,新对象的添加使用的是 Add,而在面向持久化方式中,不论是新对象的添加或是修改,都是使用的 Save,如果是基于 Unit Of Work(工作单元),会有 Commit。

原网站

版权声明
本文为[ggaofeng]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ggaofengg/article/details/104588107