你不得不知道的Maven基础(2)

目录

1、maven与idea的结合

2、Maven如何连接mysql

3、Maven的生命周期

4、创建一个maven-archetype-quickstart项目

①、数据表对象层

②、服务层

③、工具类

④、App.java

5、java框架中的controller层、dao层、domain层、service层、view层

①、Controller层:接口层,用户访问请求时对接

②、dao层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此

③、domain层:通常就是用于放置这个系统中,与数据库中的表,一一对应起来的JavaBean的

④、service层:Service层主要负责业务模块的逻辑应用设计。

⑤、view视图层:此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示。


1、maven与idea的结合

 

进入Setting直接搜索框搜索 Maven

 

  • Maven home directory:一般我们会将其修改成我们自定义安装Maven的目录
  • User setting file:在这里我们指定.m2目录下的settings.xml文件,就会自动查找到settings.xml中的指定的本地库

 

  • maven-archetype-quickstart - 专门建立不是web的工程   默认的Archetype,基本内容包括:
    • 一个包含junit依赖声明的pom.xml
    • src/main/java主代码目录及一个名为App的类
    • src/test/java测试代码目录及一个名为AppTest的测试用例
  • maven-archetype-webapp - 专门建立web工程    一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:
    • 一个packaging为war且带有junit依赖声明的pom.xml
    • src/main/webapp/目录
    • src/main/webapp/index.jsp文件
    • src/main/webapp/WEB-INF/web.xml文件

 

2、Maven如何连接mysql

登录https://mvnrepository.com/,搜索mysql

 

选择自己已有的版本号

 

添加mysql依赖

 

测试是否可以连接mysql

 

3、Maven的生命周期

 

引入新的包的时候 习惯性的先clean 再 compile

 

4、创建一个maven-archetype-quickstart项目

GroupId:公司名

ArtifactId:项目名

 

这里我们做了一个简单的查询用户操作实例:

 

①、数据表对象层

// domain.Users
package com.lazy.domain;

import javax.jws.soap.SOAPBinding;
import java.util.Date;

public class Users {
    private int uid = 0;
    private String uname = "";
    private String upwd = "";
    private Date time;

    public Users(){}

    public Users(int uid, String uname, String upwd, Date time) {
        this.uid = uid;
        this.uname = uname;
        this.upwd = upwd;
        this.time = time;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }
}

 

②、服务层

// service.UsersService
package com.lazy.service;

public class UsersService {
    public boolean register(){

        return false;
    }
    public boolean login(){
        return false;
    }
}

 

③、工具类

// tools.DBHelper
package com.lazy.tools;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DBHelper {

    private static Connection connection = null;
    private static Statement statement = null;
    private static ResultSet resultSet = null;
    private static String url= "jdbc:mysql://localhost:3306/skdb";

    // 创建连接
    private static Connection getConn(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url,"root","123456");
        }catch (Exception e){
            e.printStackTrace();
        }
        return connection;
    }

    // 关闭
    private static void closeAll(){
        try{
            if (resultSet != null){
                resultSet.close();
            }
            if (statement != null){
                statement.close();;
            }
            if (connection != null){
                connection.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    // 查询 List<Map<key,value>> 一切皆对象
    public static List<Map<String,Object>> query(String sql){
        try{
            connection = getConn();
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);
            List<Map<String,Object>> data = new ArrayList<>();
            while(resultSet.next()){
                // 获取各个列名
                ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
                int columnCount = resultSetMetaData.getColumnCount();
                HashMap<String,Object> row = new HashMap<>();
                for (int i = 1; i <= columnCount; i++){
                    // 列索引从1开始
                    String columnName = resultSetMetaData.getColumnName(i);
                    row.put(columnName,resultSet.getObject(i));
                }
                data.add(row);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            closeAll();
        }

        return null;
    }
    // 非查询
    public static int execute(String sql){
        try{
            connection = getConn();
            statement = connection.createStatement();
            int flag = statement.executeUpdate(sql);
            return flag;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
           closeAll();
        }
        return 0;
    }
}

 

④、App.java

package com.lazy;

import com.lazy.tools.DBHelper;

import java.util.List;
import java.util.Map;

/**
 * mysql select 
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        List<Map<String,Object>> data = DBHelper.query("select * from Users");
        for (Map<String,Object> row : data){
            System.out.println(row.get("uname"));
        }
    }
}

 

5、java框架中的controller层、dao层、domain层、service层、view层

 

①、Controller层:接口层,用户访问请求时对接

 

Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。

 

②、dao层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此

 

DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

 

③、domain层:通常就是用于放置这个系统中,与数据库中的表,一一对应起来的JavaBean的

 

domain的概念,通常会分很多层,比如经典的三层架构,控制层、业务层、数据访问层(DAO),此外,还有一个层,就是domain层。

 

model层和domain区别:可能都是javaBean,但用途不同,domain通常就代表了与数据库表--一一对应的javaBean,model通常代表了不与数据库一一对应的javaBean,但是封装的数据是前端的JS脚本,需要使用的数据

 

④、service层:Service层主要负责业务模块的逻辑应用设计。

 

同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。

 

service层存在的意义:解耦,便于扩展

Service被称作业务层。顾名思义,它处理逻辑上的业务,而不去考虑具体的实现。

对于MVC模式,MVC本身并不属于设计模式的一种,它是一种设计结构,这种结构的最终目的是为了解耦,也就是不同逻辑层的代码自身改变的时候,你别影响其他层。在写项目的时候,不同的逻辑上的代码之间的解耦是很重要的。那很显然,为了使得我们在写代码的时候,不同的逻辑层内的代码之间的关联降低到最小,我们需要在不同的逻辑层之间加一些缓冲的层来达到一些解耦的效果。

比如,你在视图层,不会直接去调用Dao层。

那么对于Service,就是 Servlet 和 Dao 层之间缓冲的层。通过这一层来进行解耦,使得 Dao 层内的变化不会直接影响到 Servlet 层。

例如一个 sql 语句如果需要拼接,比如说是模糊查询, 则 sql 语句需要根据用户选择的条件来进行拼接。那么,拼接这个 sql 语句的逻辑部分,就放在 service 层进行。而 Dao 层,只负责接收拼接之后的最终的 sql 语句。

最后,service 也不是就非他不可。对于极小的项目而言,加了service层,反而增加了代码量,而且Dao层种以及预见了可能出现的情况,并进行了相应的扩展。

 

⑤、view视图层:此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值