详细整理分层开发步骤!

不点蓝字,我们哪来故事?

一、创建数据库,在数据库中创建表

二、创建java项目(起名要有意义,eg:petSys)

三、在项目中新建包,包名为:cn.bdqn.petSys.entity

四、在cn.bdqn.petSys.entity包中新建实体类,实体类是根据数据表而来,一个表对应一个实体类,数据库中的字段对应类中的属性

五、选中项目,在项目中新建一个文件夹,起名为lib,将sqlserver的jar文件复制到该目录下面,并且右击该jar文件,选择Build pathadd to build path.

六、新建包cn.bdqn.petSys.utils,在该包中新建一个BaseDao,用来连接数组库,BaseDao的代码如下:

public class BaseDao {//连接数据库public Connection getConn(){Connection conn = null;try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName = petdb","sa","123456");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}//关闭连接public void closeConn(Connection conn,PreparedStatement pre,ResultSet rs){try {if (rs!=null) {rs.close();}if (pre!=null) {pre.close();}if (conn!=null) {conn.close();}} catch (Exception e) {// TODO: handle exception}}}

七、新建包cn.bdqn.petSys.dao,在包中新建接口,一个实体类对应一个接口,例如:ICatDao(起名规范:I+实体类名+Dao),在该接口中写需要实现的功能接口

  1. 增删改,返回类型为int.参数类型为实体,例如:int addCat(Cat cat);

  2. 根据编号查询,返回类型为实体,参数类型为int,例如:Cat findCatById(int cid);

  3. 查询全部,返回类型为泛型集合(List<Cat>),例如:List<Cat> findCatAll();

注意:除增删改外,返回类型取决于查询的结果集,如果返回1条以上的结果集,返回类型为List集合,如果返回1条结果集,返回类型为实体(Cat)

例如:

//根据编号查询Cat findCatById(int cid);//查询全部List<Cat> findCatAll();//根据名称模糊查询List<Cat> findCatByName(String name);//根据姓名和密码查询Cat findCatByNameAndPass(String name,String pass);

八、新建包cn.bdqn.petSys.dao.impl,)(该包为dao层的实现类所在的包),在包内新建实现类,CatDaoImpl,该类需要实现dao层的ICatDao,代码如下:

public class CatDaoImpl implements ICatDao {BaseDao base = new BaseDao();Connection conn = base.getConn();PreparedStatement pre = null;ResultSet rs = null;//添加@Overridepublic int addCat(Cat cat) {String sql = "insert into cat values(?,?,?,?,?);";int rel = 0;try {pre = conn.prepareStatement(sql);pre.setInt(1,cat.getCid());pre.setString(2, cat.getCname());pre.setString(3,cat.getCpass());pre.setInt(4,cat.getClove());pre.setString(5, cat.getCsex());rel = pre.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return rel;}//修改@Overridepublic int updateCat(Cat cat) {String sql = "update cat set cname = ?,cpass = ?,clove = ? csex = ? where cid = ?";int rel = 0;try {pre = conn.prepareStatement(sql);pre.setString(1, cat.getCname());pre.setString(2,cat.getCpass());pre.setInt(3,cat.getClove());pre.setString(4, cat.getCsex());pre.setInt(5,cat.getCid());rel = pre.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return rel;}//删除@Overridepublic int delCat(Cat cat) {String sql = "delete from cat where cid = ?";int rel = 0;try {pre.setInt(1,cat.getCid());rel = pre.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return rel;}//根据编号查询@Overridepublic Cat findCatById(int cid) {// TODO Auto-generated method stubreturn null;}//查询全部@Overridepublic List<Cat> findCatAll() {return null;}//根据名称模糊查询@Overridepublic List<Cat> findCatByName(String name) {String sql = "select * from cat where cname like ?";List<Cat> clist = new ArrayList<Cat>();try {pre = conn.prepareStatement(sql);pre.setString(1, "%"+name+"%");rs = pre.executeQuery();while(rs.next()){Cat cat = new Cat();cat.setCid(rs.getInt(1));cat.setCname(rs.getString(2));cat.setCpass(rs.getString("cpass")); //或者3cat.setCsex(rs.getString("csex"));cat.setClove(rs.getInt("clove"));clist.add(cat);}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return clist;}//根据名称和密码查询@Overridepublic Cat findCatByNameAndPass(String name, String pass) {// TODO Auto-generated method stubreturn null;}}

九、新建包cn.bdqn.petSys.service,在该包中新建接口,ICatService。此包为业务逻辑层的包,其中ICatService接口中的代码如下:

//添加int addCat(Cat cat);//修改int updateCat(Cat cat);//删除int delCat(Cat cat);//根据编号查询Cat findCatById(int cid);//查询全部List<Cat> findCatAll();//根据名称模糊查询List<Cat> findCatByName(String name);//根据姓名和密码查询Cat findCatByNameAndPass(String name,String pass);

十、新建包cn.bdqn.petSys.Service.impl,(该包中的类主要是实现cn.bdqn.petSysService包中的接口),在该包中新建类CatServiceImpl,该类中的代码如下:

public class CatServiceImpl implements ICatService {ICatDao catDao = new CatDaoImpl();@Overridepublic int addCat(Cat cat) {// TODO Auto-generated method stubreturn catDao.addCat(cat);}@Overridepublic int updateCat(Cat cat) {// TODO Auto-generated method stubreturn catDao.updateCat(cat);}@Overridepublic int delCat(Cat cat) {// TODO Auto-generated method stubreturn catDao.delCat(cat);}@Overridepublic Cat findCatById(int cid) {// TODO Auto-generated method stubreturn catDao.findCatById(cid);}@Overridepublic List<Cat> findCatAll() {// TODO Auto-generated method stubreturn catDao.findCatAll();}@Overridepublic List<Cat> findCatByName(String name) {// TODO Auto-generated method stubreturn catDao.findCatByName(name);}@Overridepublic Cat findCatByNameAndPass(String name, String pass) {// TODO Auto-generated method stubreturn catDao.findCatByNameAndPass(name, pass);}}

十一、新建包cn.bdqn.petSys.test包,该包中放置的是测试类,代码如下:

public class TestCat {static ICatService catService = new CatServiceImpl();static Scanner sc = new Scanner(System.in);public static void main(String[] args) {findCatAll();}//添加猫public static void addCat(){System.out.println("请输入编号:");int cid = sc.nextInt();System.out.println("请输入名称:");String cname = sc.next();System.out.println("请输入密码:");String cpass = sc.next();System.out.println("请输入亲密度:");int clove = sc.nextInt();System.out.println("请输入性别:");String csex = sc.next();Cat cat = new Cat();cat.setCid(cid);cat.setCname(cname);cat.setCpass(cpass);cat.setClove(clove);cat.setCsex(csex);int rel = catService.addCat(cat);if(rel>0){System.out.println("添加成功");}else{System.out.println("添加失败");}}//查询全部public static void findCatAll(){List<Cat> clist = catService.findCatAll();System.out.println("编号\t名称\t密码\t亲密度\t性别\t");for(int i = 0;i<clist.size();i++){System.out.print(clist.get(i).getCid()+"\t");System.out.print(clist.get(i).getCname()+"\t");System.out.print(clist.get(i).getCpass()+"\t");System.out.print(clist.get(i).getClove()+"\t");System.out.println(clist.get(i).getCsex());}}}

往期精彩

在操作复杂字符串时推荐使用正则表达式

2020-09-13

字符串的拼接方法我们选哪种合适?

2020-09-11

在String字符串运算过程中,试着换一下字符串的位置看看

2020-09-10

Java中的集合框架(一)

2020-09-06

开源日志工具log4j

2020-09-05

java中的异常(三)

2020-09-04

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 跨平台界面框架和为什么你首先要考虑再三

现在用 C# 来开发跨平台应用已经有很成熟的方案&#xff0c;即共用非界面代码&#xff0c;而每个操作系统搭配特定的用户界面代码。这个方案的好处是可以直接使用操作系统原生的控件和第三方控件&#xff0c;还能够和操作系统深度集成。 这里的深度集成主要是指一些 Windows 专…

seq2seq中的beam search算法过程

转载自 seq2seq中的beam search算法过程 首先说明在sequence2sequence模型中&#xff0c;beam search的方法只用在测试的情况&#xff0c;因为在训练过程中&#xff0c;每一个decoder的输出是有正确答案的&#xff0c;也就不需要beam search去加大输出的准确率。 假设现在我…

Spring的properties属性配置文件和Spring常用注解

Spring的properties属性配置文件 问题: 在学习了Spring的知识后&#xff0c;需要被Spring管理的资源都是通过配置文件的形式来告诉Spring容器对象管理谁以及如何管理。但是随着使用次数的增多&#xff0c;我们发现配置文件中配置的标签越来越多&#xff0c;每次我们创建一个新…

即日起,正式进入编程世界!

点击上方蓝色关注我们&#xff01;从今天开始&#xff0c;正式进入编程世界。首先我们先从堪称“少儿编程”的Scratch开始&#xff0c;简洁的编辑窗口加上可读性较高的Chinese&#xff08;大部分的编程编辑器均为英文版&#xff09;&#xff0c;使得该软件特容易上手。班内总有…

使用领域事件

1.引言 最近刚学习了下DDD中领域事件的理论知识&#xff0c;总的来说领域事件主要有两个作用&#xff0c;一是解耦&#xff0c;二是使用领域事件进行事务的拆分&#xff0c;通过引入事件存储&#xff0c;来实现数据的最终一致性。若想了解DDD中领域事件的概念&#xff0c;可参…

深入浅出讲解语言模型

转载自 深入浅出讲解语言模型 深入浅出讲解语言模型 1、什么是语言模型呢&#xff1f; 简单地说&#xff0c;语言模型就是用来计算一个句子的概率的模型&#xff0c;也就是判断一句话是否是人话的概率&#xff1f; 那么如何计算一个句子的概率呢&#xff1f;给定句子&…

基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

一、前言 至今为止编程开发已经11个年头&#xff0c;从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展&#xff0c;从无畏无知的懵懂少年&#xff0c;到现在的中年大叔&#xff0c;从中的酸甜苦辣也只有本人自知。随着岁月的成长&#xff0c;技术也从原来的三层设计到…

NLP Coursera By Michael Collins - Week1

转载自 NLP Coursera By Michael Collins - Week1 NLP Coursera By Michael Collins - Week1 构建模型框架 - Markov Process 毕竟是机器学习嘛&#xff0c;所以第一步&#xff0c;先要把实际问题转化成数学模型。 在NLP中&#xff0c;一般使用的都是概率模型&#xff0c;…

19级:班级日常分享,一天一瞬间

点击上方蓝色关注我们&#xff01;19级的同学们目前正在做KTV点歌系统项目&#xff0c;截止今日为止&#xff0c;项目已经进展了1天多了&#xff0c;进度还在可控范围内&#xff0c;大部分组的后台都已完成&#xff0c;刘娜小组稍微比较慢了点儿。李磊小组的进度最快&#xff0…

Attentive Sequence to Sequence Networks

转载自 Attentive Sequence to Sequence Networks Attentive Sequence to Sequence Networks 1、Encoder-Decoder 框架 首先我们模型的整体框图如下&#xff1a; Encoder-Decoder 框架可以这么直观地去理解&#xff1a;可以把它看作适合处理由一个句子&#xff08;或篇章&a…

20级四班班级管理规章制度

点击上方蓝色关注我们&#xff01;

完全图解RNN、RNN变体、Seq2Seq、Attention机制

转载自 完全图解RNN、RNN变体、Seq2Seq、Attention机制 完全图解RNN、RNN变体、Seq2Seq、Attention 机制 本文首发于知乎专栏“ai insight”&#xff01; 本文主要是利用图片的形式&#xff0c;详细地介绍了经典的RNN、RNN几个重要变体&#xff0c;以及Seq2Seq模型、Attent…

今天就唠叨唠叨吧……

点击上方蓝色关注我们&#xff01;看书这个爱好是从去年年底开始的。看关于教育教学管理类型的书籍是从今年前半年开始的&#xff0c;有好些书都是王晓春老师写的&#xff0c;例如《做一个专业的班主任》、《问题学生诊疗手册》《今天怎样做教师》&#xff0c;每本书都有不一样…

如何轻松愉快的理解条件随机场(CRF)

转载自 如何轻松愉快的理解条件随机场&#xff08;CRF&#xff09; 如何轻松愉快的理解条件随机场&#xff08;CRF&#xff09;&#xff1f; 理解条件随机场最好的办法就是用一个现实的例子来说明它。 但是目前中文的条件随机场文章鲜有这样干的&#xff0c;可能写文章的人…

ASP.NET Core MVC 控制器创建与依赖注入

在我最后一篇关于 ASP.NET Core 释放IDsiposable对象的文章&#xff08;中文、英文原文&#xff09;中&#xff0c;Mark Rendle 指出&#xff0c;MVC 控制器在请求结束时也会释放资源。乍一看&#xff0c;此范围内的资源在请求结束时会释放似乎是显而易见的&#xff0c;但是 MV…

19级:一天一瞬间

点击上方蓝色关注我们&#xff01;3班的KTV项目周期为两周&#xff0c;目前时间将近一周&#xff0c;除李磊小组进度超出之外&#xff0c;其余四个小组的进度都属正常。上午大致的将每个小组的前台功能过了一遍&#xff0c;刘文瑞小组还剩几个点歌功能未实现&#xff0c;整体的…

拥抱.NET Core系列:依赖注入(2)

上一篇“拥抱.NET Core系列&#xff1a;依赖注入&#xff08;1&#xff09;大体介绍了服务注册、获取和生命周期&#xff0c;这一篇来做一些补充。由于内容跨度大&#xff08;.NET Core、ASP.NET Core&#xff09;&#xff0c;所以文章并不是非常的贯穿&#xff0c;大家可以挑着…

使用Docker 实现微服务并搭建博客,一文全掌握

转载自 使用Docker 实现微服务并搭建博客&#xff0c;一文全掌握 Docker 是一个容器工具&#xff0c;提供虚拟环境。很多人认为&#xff0c;它改变了我们对软件的认识。 本文&#xff0c;通过搭建一个博客的例子&#xff0c;来介绍如何使用Docker实现微服务。 站在 Docker …