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的过程。