Maven&Mybatis
Maven
概念:
Maven是一个项目管理和构建工具,基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档
项目结构(IDEA从上往下)
名称 | 作用 |
---|
maven-project | 项目名称 |
src | 源代码和测试代码目录 |
main | 源代码目录 |
java | 源代码Java文件目录 |
resources | 源代码配置文件目录 |
webapp | Web项目核心目录 |
test | 测试代码目录 |
java | 测试代码Java文件目录 |
resources | 测试代码配置文件目录 |
pom.xml | 项目核心配置文件 |
构建流程
代码整体流程:
编译、测试、打包、发布
Maven提供了一套简单命令:
mvn compile : 编译
mvn test : 测试
mvn package : 打包
mvn install : 安装(运行)(单独执行这一步,以上步骤会自动运行)
mvn clean : 删除当前target目录(更改代码行才可重新编译)
仓库分类:
本地仓库: 本地计算机/服务器的某个目录
中央仓库: 由Maven团队维护的全球唯一的仓库
地址: https://repo1.maven.org/maven2/
远程仓库: 一般由公司团队搭建的私有仓库
中央仓库在国外,下载所需jar包较慢,一般我们选用阿里巴巴公司所提供的远程仓库
修改conf/settings.xml中的<mirrors>标签:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
Maven目录结构
bin : 存放可执行命令,mvn命令重点关注
conf : 存放Maven的配置文件,settings.xml配置文件所在目录
lib : 存放Maven依赖的jar包
依赖管理
正常项目:
1.下载jar包
2.复制jar包到项目
3.将jar包加入工作环境
Maven项目:
mybatis:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
mysql:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
junit:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
log4j:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
依赖范围
依赖范围 | 编译 | 测试 | 运行 | 举例 |
---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储在本地的jar包 |
如果坐标不指定 <scope></scope> 标签, 默认范围是compile值。
Maven坐标
坐标:
Maven中的坐标是资源的唯一标识
使用坐标来定义项目或引入项目中需要的依赖
主要组成:
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.pauper)
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号
注意:
上面所说的资源可以是插件、依赖、当前项目。
我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。
Mybatis
简介:
mybatis 是用来简化JDBC开发的持久层框架
MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github
官网:https://mybatis.org/mybatis-3/zh/index.html
三层架构分为: 表现层、业务层、持久层
持久层:
负责将数据保存到数据库的那一层代码
优化JDBC:
1. 硬编码:
注册驱动、获取链接
SQL语句要随着表结构更改而更改,维护较为困难
2. 操作繁琐
手动设置参数
手动封装结果集
案例演示
1. 数据库中创建user表,添加数据
DROP TABLE
IF EXISTS tb_user;
CREATE TABLE tb_user (
id INT PRIMARY KEY auto_increment,
username VARCHAR (20),
PASSWORD VARCHAR (20),
gender CHAR (1),
addr VARCHAR (30)
);
INSERT INTO tb_user
VALUES
(
1,
'zhangsan',
'123',
'男',
'北京'
);
INSERT INTO tb_user
VALUES
(
2,
'李四',
'234',
'女',
'天津'
);
INSERT INTO tb_user
VALUES
(
3,
'王五',
'11',
'男',
'西安'
);
2. 创建模块,导入坐标,根据上述pom.xml文件配置即可
-- 注意:
-- 如果添加了log4j、logback坐标,需要在resources目录下创建logback.xml配置文件(当前代码块我选用的mysql格式,会导致logback.xml中关键词不突出显示)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="com.itheima" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
, 默认debug
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
3.编写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>
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
4.编写SQL映射文件
<?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 namespace="test">
<select id="selectAll" resultType="com.itheima.pojo.User">
select * from tb_user;
</select>
</mapper>
5. 创建pojo类
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
6. 创建测试类 MyBatisDemo.java
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> users = sqlSession.selectList("test.selectAll");
System.out.println(users);
sqlSession.close();
}
}
Mapper代理开发
优点:
1.解决硬编码
2.简化后期执行SQL
以往sqlSession对象执行SQL语句时,采取的时selectList()方法传递的参数是映射配置文件中的namespace.id值,不利于维护,所以推荐采用Mapper代理方式
要求:
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
设置SQL映射文件的namespace属性为Mapper接口全限定名
例如:
<mapper resource="com\pauper\UserMapper.xml"/>
在Mapper接口中定义方法,方法名是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
例如:
UserMapper.xml:
<select id="selectAll" resultType="User">
select *
from tb_user;
</select>
UserMapper接口:
List<User> selectAll();