当前位置:网站首页>如何操作数据库
如何操作数据库
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。
边栏推荐
- [R language] Extract all files under a folder to a specific folder
- Excel受保护的工作表怎么操作?
- 中英文说明书丨CalBioreagents ACTH N端单克隆抗体
- 正则表达式-判断字符串是否匹配“AABB”模式
- IQ Products巨细胞病毒CMV感染检测试剂盒的特征和应用
- 22 high mid term paper topics forecast
- 【R语言】把文件夹下的所有文件提取到特定文件夹
- 盒子模型中垂直分布的基本内容
- 直播平台怎么搭建,设置状态栏颜色、沉浸式状态栏
- 半胱氨酸/半乳糖/苝二酰亚胺功能化Fe3O4四氧化三铁纳米材料|科研试剂
猜你喜欢
抗菌药物丨Toronto Research Chemicals 天冬酰胺D
Unity C# 委托——事件,Action,Func的作用和区别
【Feel】Unity Feel插件中,Camera无法正确显示CameraShake
A test engineer with an annual salary of 35W was laid off. Personal experience: advice that you have to listen to
Data center project preliminary summary
harbor企业级镜像仓库搭建
Getting started with kubernetes apparmor
Polyamide-amine (PAMAM) dendrimer-bismuth sulfide composite nanoparticles | bismuth sulfide modified Gd‑DTPA‑OA ligand | for scientific research
list 字符串的输出方法 print(*a) print(““.join(str(c) for c in a) )
Molybdenum disulfide/hafnium dioxide composite nanomaterials (MoS2/HfO2) | tantalum-doped hafnium dioxide nanoparticles (Qi Yue bio)
随机推荐
SiO2-NH2/Fe3O4表面氨基化的Fe3O4/SiO2复合磁性纳米粒子(齐岳试剂)
普罗米修斯原理及节点发布
聚酰胺-胺(PAMAM)树形聚合物-硫化铋复合纳米粒子|硫化铋修饰Gd‑DTPA‑OA配体|科研实验用
uniapp实现防抖搜索
qt发送邮件程序
sqlserver导入数据类型问题
直接用的zip包 缺少很多依赖,pip没有,感觉用anaconda create一个环境会方便点
中英文说明书丨TRC D-阿卓糖(D-Altrose)
kubernetes apparmor 简介
Xray - powerful vulnerability scanning tools
二十四节气之立秋
盒子模型中垂直分布的基本内容
05 多线程与高并发 - ThreadPoolExecutor 源码解析
Fe3O4/SiO2 Composite Magnetic Nanoparticles Aminated on SiO2-NH2/Fe3O4 Surface (Qiyue Reagent)
Regular Expression - Determine if a string matches the "AABB" pattern
中英文说明书丨CalBioreagents ACTH N端单克隆抗体
A day to learn a public company: Sophia
After the VB.net program is closed, the background is still connected to SQL
运算放大器(OPA)超详细参数讲解-运放---以及8个型号的运算放大器分析对比
具有CT造影功能的硫化铋纳米棒|硫化铋-锌原卟啉复合材料(PAMAM/Bi2S3复合纳米粒子)