maven
maven安装应用
? 测试maven应用能否使用
DOS窗口cmd指令 mvn-version 如果出现maven版本代表maven配置成功
? 在maven内部集成了很多内置插件 如jdk tomcat 数据库等…
jdk默认版本是1.5,tomcat默认版本是6.0
真是使用时需要手动配置,jdk为1.8/1.7 tomcat配置为7.0/8.0
maven工程目录介绍
前一天有
pom.xml文件 maven项目的核心配置文件
总结标签
<packaging> 项目打包方式 jar war pom(父工程)
jar 纯java工程,不包含web资源
war web工程 java文件和web资源
pom 父工程/父项目 子父工程 父工程里卖弄主要放的是jar包资源,让子工程去依赖使用的
<dependencies> 多个依赖 依赖标签 内部存放的是一个个<dependency>
<dependency> 单个依赖 jar包依赖标签 内部需要有四个标签来实现坐标查找
<groupId> 组织或者是项目名称
<artifactId> 模块或者项目名称
<version> 模块或者是项目的版本
代码:
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
2.2.1 第一个2 代表大版本 有重大变革的
第二个2 代表小版本 修复bug,增加少量功能
第三个1 代表更新
里程碑版本
snapshot 快照版(开发板)
alpha 内部测试版
beta 公开测试版
Release|RC 发布版
GA 正常版本
依赖传递
依赖冲突
<dependencyManagement>
maven常用命令
? mvn complie执行成功 生成target目录 包含编译之后的.class文件和配置文件以及打成的jar包
? mvn test 执行成功 编译测试文件
? mvn package 执行打包命令 会在target目录中生成对应的打包文件
? mvn install 执行发布命令/安装命令 完成以上命令,把打包之后的文件存放到本地仓库中
? mvn tomcat:run 执行内置服务器运行指令
? mvn clean 清楚target目录
? mvn deploy 部署
第一个:src/main/java : 存放项目的java文件(以.java结尾的)
第二个:src/main/resources : 存放项目资源文件,如db.properties,后面用到的框架的配置文件 以 .xml 结尾的 。
第三个:src/main/webapp:web工程的web资源
第四个:src/main/webapp/WEB-INF:存放webx.xml文件
第五个:src/test/java :存放单元测试的 .Java 文件 如Unit测试类
第六个:src/test/resources :存放测试用到的资源文件,如果没有就会从main中查找
第七个:target:项目的输出位置,如编译之后的 .class文件,打成的 jar包文件和war包文件
第八个:pom:项目对象模型
maven工程构建
? 可以自定义按照maven的目录结构去搭建
? 使用开发工具搭建
○ eclipse工具
○ idear工具
§ 使用骨架创建
□ 创建纯java工程
□ 创建web工程
§ 跳过骨架创建
§ 配置完 点击finish即可
添加依赖
在pom.xml文件中添加依赖 使用<dependencies>
在idear中添加依赖有两种方式
? 直接在项目pom文件添加<dependencies>在内部添加单个依赖<dependency>,在artifactId里面输入jar名称
有会提示,没有会报红
如
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
? 本地没有,去maven*仓库查找你需要的jar包资源
*仓库地址:
https://mvnrepository.com
如:
maven的插件配置
? build 项目构建配置 配置编译,运行插件等
? plugins 内部存放的是plugin,是被管理的插件
? plugin 内部配置的是具体的插件,在plugin内部有configuration
如
<!--编译器版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
? configuration 需要配置插件的具体信息
依赖传递
将来我们在开发时,配置一个jar包资源,发现该jar包还依赖于另一个或多个jar煲仔园.此时就出现了依赖传递现象
依赖冲突
由于maven中存在依赖传递现象,会引发以来冲突现象
解决 路径近者优先原则 第一声明原则
mybatis
什么是框架
框架是一整套解决问题的方案,里面并没有具体的业务逻辑,框架是一个半成品软件
mybatis概述
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
mybatis快速入门
? 下载安装
去maven*仓库引入myvatis坐标依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
? 创建mybatis的核心配置文件 文件名字规范点:mybatis-config.xml/SqlMapConfig.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">
<!--mybatis配置信息-->
<configuration>
<!--mybatis的配置环境-->
<environments default="mysql">
<!--mybatis配置的具体的环境信息-->
<environment id="mysql">
<!--事务管理 采用JDBC事务-->
<transactionManager type="JDBC"/>
<!--数据源 采用池子类型-->
<dataSource type="POOLED">
<!--数据源的四大组件-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql//localhost:3306/mybatis01"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--
mapper 映射器
orm object relationship mapping
把实体类和数据库的表产生一一对应(映射)关系
实体类 表
属性 字段
id id
username username
address address
gender gender
在映射时,确保实体类中的属性名称,和表中的字段名称与i及属性的数据类型和字段的数据类型高度保持一致
带来的好处是封装便利
-->
<mappers>
<!--XXXMapper.xml 存放的就是操作数据库表的一些配置信息-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
? 创建dao接口以及pojo实体类
//持久层 dao接口
public interface IUserDao {
//定义查询所有用户信息
List<User> getAllUsers();
}
package com.zhiyou100.pojo;
import java.io.Serializable;
//JavaBean 映射数据库的表user
public class User implements Serializable {
private Integer id;
private String username;
private Integer age;
private String address;
private String gender;
public User() {
}
public User(Integer id, String username, Integer age, String address, String gender) {
this.id = id;
this.username = username;
this.age = age;
this.address = address;
this.gender = gender;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
", address='" + address + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
? 配置mapper信息创建XXXMapper.xml,但是要求和XXXMapper.java路径保持高度一致.
<?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">
<!--
namespace 命名空间 引入对应的Mapper接口文件,形成关联映射
-->
<mapper namespace="com.zhiyou100.dao.IUserDao">
<!--
在mapper.xml文件中
id 映射接口文件中的方法名称
resultType 映射接口文件中方法的返回值类型 没有集合类型 填写的集合当中的泛型类型(全限定类名)
parameterType 映射接口文件中方法参数的数据类型
-->
<select id="getAllUsers" resultType="com.zhiyou100.pojo.User">
<!-- /**/ 不支持 会影响sql语句的运行 -->
<!--查询语句-->
select * from Blog where id = #{id}
</select>
<!--<delete id=""></delete>
<update id=""></update>
<insert id=""></insert>-->
</mapper>
注意事项:
○ mapper.xml文件和mapper.class文件的名称高度保持一致
○ mapper.xml文件和mapper.class文件的路径高度保持一致
? 测试配置信息
○ 加载mybatis核心配置文件
○ 创建SqlSessionFactory工厂对象
○ 通过工厂对象创建SqlSession对象
○ 通过SqlSession对象调用openSession方法建立连接
○ 通过SqlSession进行增删改查
package com.zhiyou100.test;
import com.zhiyou100.dao.IUserDao;
import com.zhiyou100.pojo.User;
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 org.junit.Test;
import sun.nio.cs.US_ASCII;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
//测试mybatis的配置信息
public class UserTest {
//查询用户表中所有用户信息
@Test
public void testGetAllUsers() throws Exception {
/**
* ? 测试配置信息
* ○ 加载mybatis核心配置文件
* ○ 创建SqlSessionFactory工厂对象
* ○ 通过工厂对象创建SqlSession对象
* ○ 通过SqlSession对象调用openSession方法建立连接
* ○ 通过SqlSession进行增删改查
*/
//加载mybatis核心配置文件 使用mybatis内置的Resource IO类
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory工厂对象
//由于SqlSessionFactory是一个接口不能直接new 创建对象
//SqlSessionFactory sqlSessionFactory = new SqlSessionFactory();//不可以
//借助于构建者类SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
//通过构建者类的build方法来构建工厂对象
SqlSessionFactory factory = sfb.build(is);
//通过工厂对象创建SqlSession对象
SqlSession sqlSession = factory.openSession();
//通过getMapper方法
IUserDao mapper = sqlSession.getMapper(IUserDao.class);
//有了IUserDao的实现类对象
List<User> users = mapper.getAllUsers();
for (User user : users) {
System.out.println(user);
}
}
}
? mybatis采用第二种方式:使用接口实现类方式进行开发
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public IUserDaoImpl(SqlSessionFactory factory){
this.factory = factory;
}
@Override
public List<User> getAllUsers(){
SqlSession session = factory.openSession();
List<User> users = session.selectList("com.zhiyou100.dao.IUserDao.getAllUsers");
return users;
}
}
? 创建测试代码
@Test
public void testGetAllUsers2() throws Exception {
//加载mybatis核心配置文件 使用mybatis内置的Resource IO类
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory工厂对象
//由于SqlSessionFactory是一个接口不能直接new 创建对象
//SqlSessionFactory sqlSessionFactory = new SqlSessionFactory();//不可以
//借助于构建者类SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
//通过构建者类的build方法来构建工厂对象
SqlSessionFactory factory = sfb.build(is);
//实例化接口实现类对象
IUserDao userDao = new IUserDaoImpl(factory);
List<User> users = userDao.getAllUsers();
for (User user : users) {
System.out.println(user);
}
}