java中的maven、mybatis、spring的技术总结

194 阅读6分钟

maven

安装与下载

官网下载zip的包。

解压后,把bin目录添加到环境变量下。

然后再到cmd的窗口下使用命令:mvn -V 是否显示版本,如果有,则说明可以了。

maven的初步使用

新建一个项目文件夹。然后新建src目录,在里边新建main目录和test目录,在两个目录下都新建java和resource目录。

注意:一定要在src的同级目录下放一个pom.xml

运行java项目命令是: mvn compile 这个命令是在src的目录下操作的。

第一次运行会比较慢,会下载很多的东西,以后再用就快了。

运行后会生成target目录。

maven下载jar包

到maven的仓库中。找到需要的jar包的配置文件。

把配置文件配置到pom.xml中。执行 mvn package 命令就会下载。

当然也可以通过 mvn compile的命令也是会下载相关的jar包的。

mvn下载的jar包的位置在:C:\Users\Administrator.m2\repository

这里以下载c3p0为例:

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>

完整的pom.xml的代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.imooc.app</groupId>
  <artifactId>hellomaven</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hellomaven</name>
  <url>http://maven.apache.org</url>


  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>4.0.0</version>
		<scope>provided</scope>
	</dependency>

	<!-- <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>-->
	
	<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>


  </dependencies>


</project>


idea 创建maven

新建项目--maven。选中quickstart。

如图:

一个普通的maven项目就建成了。

maven的在iedea中窗口命令的一些含义

pacage表示打包 clear 表示清楚 install 打包后发布到本地仓库中。本地仓库就是c盘的那个。上边有说到的仓库下载下来的地址的那个位置。

我们用install发布到本地仓库后,在idea看到的jar包到本地仓库也是能够看到的,如下两图:

本地仓库图:

新的项目引用本地仓库的jar包

新建一个项目。这时新建一个项目选的archetype 不是之前的quickstart了,是webapp,是因为quickstart是空的骨架。这里我们要添加一些内容。所以 如下图:

在创建项目的时候有两个英语单词需要记一下:

groupId:包的命令, artifactld:类的命名

如果我们在maven中新建一个目录是无法直接用来创建class文件的。

需要对目录进行源文件目录的操作。

目录--->右键---mark Directory as---> resources root

这个操作后目录就是源文件目录。

引入别的项目的jar包

别的项目的jar包只要是通过maven工具的install操作就会保存在仓库的。

如果引用别的jar包其实只要把别的文件中的pom.xml中的坐标拿过来就可以了。

archetypeCatalog 值是internal

maven在引入本地仓库包时pom.xml无法加载的问题

浪费了很长的时间,网上说什么的都有。

最后是,其实只要在maven的工具栏上刷新下就可以了。

如下图:

想哭。无泪。

mybatis

mybatis的优点:代替传统的jdbc的模式,防止sql注入、并且适合频繁改动需求的项目所需要的。

maven对mybatis的安装。以及mysql-connect模块的安装。

mybatis的基础案例说明基础语法

在main的文件夹下的resources下新建一个mybatis.xml的配置文件。 这个配置文件是mybatis的基础配置,也可以理解为是中间配置。

初次配置的内容是关于链接数据库的内容,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--    项目类型为:开发-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/><!-- 单独使用时配置成MANAGED没有事务 -->
            <!--配置jdbc-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatistest"/>
                <property name="username" value="root"/>
                <property name="password" value="xxxxxxx"/>
            </dataSource>
        </environment>
    </environments>

   
   <!--    映射关系-->
    <mappers>
        <mapper resource="mapper/userMapper.xml"></mapper>
    </mappers>

</configuration>

数据库与类之间的映射文件

我们如果要把一个数据库的表和我们的类进行映射的话,就需要一个映射的文件。 在main-->resources-->mapper-->userMapper.xml 这个userMapper.xml是映射文件。

基础的实现:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper会设置命名的空间,这个命名空间就是与之对应的java的类的路径-->
<mapper namespace="com.test.User">
<!--    设置查询的sql以及索引 id表示的是类用的时候的索引,而resultType是返回值的类型-->
    <select id="userList" resultType="com.test.User">
        select * from user
    </select>
</mapper>

初次实现mybatis

 @Test
    public void testDemo1() throws IOException {

        String resource="mybatis.xml";
        //获取上边文件的流。总体来说是配置mybatis的环境
        InputStream is= Resources.getResourceAsStream(resource);
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);

        //打开和数据库之间的对话
        SqlSession session=factory.openSession();
        List<User> uList=session.selectList("userList");
        for (User user:uList
             ) {
            System.out.println(user);
        }
    }

mybatis的案例

如果是web项目需要在pom.xml中设置。<packaging>war</packaging>用war的方式进行打包。

新建项目的时候最好是新建webapp项目,这样的话,会省去很多的麻烦。

配置文件的说明

mybatis的配置文件取名为mybatis-config.xml。是对mybatis进行配置的。

mybatis-config.xml的说明:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--    引入properties后可以直接使用properties里边的内容-->
    <properties resource="db.properties"></properties>


    <!--
        environments:主要用于数据源的配置。因为项目开发会有多个数据源,有些数据源是开发用的,有些是线上用的,有些是
        测试用的。default的值可以是test(测试) development product(线上)
    -->
    <environments default="development">
        <!--
         environment用于配置一个具体的独立的数据源。
         id属性用于给当前数据源定义一个名称,方便我们项目的指定。
         -->
        <environment id="development">
            <!--
                transactionManager:用于事务管理的配置,默认是jdbc事务管理。
            -->
            <transactionManager type="JDBC"/><!-- 单独使用时配置成MANAGED没有事务 -->
            <!--
                dataSource具体的数据源的配置信息。type属性用于指定是否使用连接池。pooled表示的是连接池。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${root}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>


    <!--
        mappers主要用于配置我们外部的映射配置文件
        在主配置文件中需要引入加载映射配置文件
        mapper 主要配置引入具体的配置文件
        resource 具体的路径地址
    -->
    <mappers>
        <mapper resource="mapper/userMapper.xml"></mapper>
    </mappers>

</configuration>

db.properties是对配置文件修改的文件。它与配置文件mybatis-config.xml的关系非常密切,只需要引入后即可直接使用。 db.properties的说明:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisCase1
root=root
password=xxxxxx

SessionFactory工厂的工具方法的新建


package com.hu.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtils {
    private static String RESOURCE="mybatis-config.xml";

    private static SqlSessionFactory sqlSessionFactory;

    //这个是一个本地的缓存
    private static ThreadLocal<SqlSession>threadLocal=new ThreadLocal<SqlSession>();

    /*
    * 创建一个方法 这个方法是初始化SqlSessionFactory的方法
    * */
    public static void initSqlSessionFactory(){
        try {
            InputStream is= Resources.getResourceAsStream(RESOURCE);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
        获取工厂对象的方法
     * */
    public SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }

    /*
    * 关闭工厂对象的方法
    * */
    public static void close(){
        //会把session对话存储到本地的一个缓存中
        SqlSession session=threadLocal.get();
        if(session!=null){
            session.close();
        }

    }

}


这个新建的工厂工具方法是用来开始工厂流和关闭流的作用。

监听器监听SqlSessionFactory的创建和关闭

这个是web的监听器。

监听器的使用和代码如下:

package com.hu.listener;

import com.hu.utils.SqlSessionFactoryUtils;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/*
* @WebListener 是注册这个监听器。
* 监听器里边的那两函数是web项目初始和结束后执行的两个操作。
* */

@WebListener
public class InitSqlSessionListener implements ServletContextListener {


    public void contextInitialized(ServletContextEvent sce) {
        //初始化我们的SqlSessionFactory对象
        System.out.println("factory start");
        SqlSessionFactoryUtils.initSqlSessionFactory();
    }

    public void contextDestroyed(ServletContextEvent sce) {
        //关闭SqlSession对象
        System.out.println("factory stop");
        SqlSessionFactoryUtils.close();
    }
}



创建UserDAOlei类

DAO类一般是获取数据的类。

获取到数据的类的实现:

package com.hu.dao;

import com.hu.entity.User;
import com.hu.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDAO {
    private SqlSession sqlSession
            = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
    private List<User> list;
    public List<User> findAll(){
        try{
            list = sqlSession.selectList("findAll");

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
        return list;
    }

}


servlet把数据传递给jsp页面

具体的代码如下:

@WebServlet("/index")
public class UserFindServlet extends HttpServlet {
    private UserDAO userDAO=new UserDAO();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
            IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<User> list=userDAO.findAll();
        req.setAttribute("userList",list);
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}


设置主页:在web.xml里边设是可以设置主页的:

  <welcome-file-list>
    <welcome-file>home.jsp</welcome-file>
  </welcome-file-list>

使用jstl在页面上渲染

jstl的使用:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

如果jstl不生效的话,就在页面的最上边加上如下标签:

<%@ page isELIgnored="false" %>

jstl的语法:

<c:set var="user" value="${userData}" ></c:set>

这个语法就是把reqeust中的变量${userData}保存到user这变量象中。所以之后可以在页面直接使用${user}语法。

jstl语法在当前页面获取当前项目名称的使用 ${pageContext.request.contextPath}

mybatis中sqlSession传递参数和接收参数

传递参数的方法:

这里传递的参数居然接收是在userMapper.xml中select标签里边的变量。太神奇了。

user = sqlSession.selectOne("findById",id);

接收参数的代码:

#{id}表示是传进来的id的值

 <select id="findById" resultType="com.hu.entity.User">
        select * from user where id=#{id}
</select>

传入语句的操作

<insert id="addUser" parameterType="com.hu.entity.User"
            useGeneratedKeys="true"
            keyProperty="id">
       insert into user(username,
       password,nickname,age,gender,phone,email,remark,userStatus,createTime
       )values(#{username}, #{password},#{nickname},#{age},#{gender},#{phone},#{email},#{remark},#{userStatus},#{createTime})
    </insert>

插入语句的使用:

//添加数据的操作
    public int addUserFn(User user){
        int _id=0;
        try{
            sqlSession=sqlSession=getSqlSessionFn();
            _id=sqlSession.insert("addUser",user);
            sqlSession.commit();
            System.out.println("_id"+_id);
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            sqlSession.close();
        }
        return _id;
    }


spring

spring概述

ocp原则,设计程序时,一个好的程序需要符合ocp原则标准。opc 指 open close 原则: 就是open就是可以扩展,close是指扩展时是不修改源码的。

spring底层的实现原理

工厂模式+反射+配置文件。

工厂模式的方法获取的id后,通过id到配置文件中寻找id所对应的类的路径,找到后通过反射的方式获取这个类。

这个过程就是spring的过程。

spring 的下载和核心包