目录
1.Maven
1.1 Maven的概念
Maven 是跨平台的项目管理工具。它主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。
Maven 作为一个构建工具,不仅帮我们自动化构建,还能够抽象构建过程,提供构建任务实现。它是跨平台的,对外提供一致的操作接口。
1.2 Maven的作用
在项目开发过程中,会需要很多第三方jar包,有很多jar包是没有用的但是开发人员不可能花费心思去思考哪些是有用的,哪些没用,maven为我们很好的解决了这个问题。它可以通过pom文件的配置,一小段信息,就可以清晰的构建项目所需要的外部jar文件。让我们更有效的管理项目。
1.3 Maven的使用
1.3.1 Maven目录
HelloMaven----------------------------------工程名
---src--------------------------------------源码
---|---main---------------------------------存放主目录
---|---|---java-----------------------------存放java源文件
---|---|---resource-------------------------存放框架或其他工具的配置文件
---|---test---------------------------------存放测试程序
---|---|---java-----------------------------存放java测试源文件
---|---|---resource-------------------------存放框架或其他工具的配置文件
---pom.xml----------------------------------Maven工程的核心配置文件(Project Object Model)
1.3.2 Maven基本命令
命令 | 描述 |
---|---|
mvn clean | 清理,执行clean会删除target目录及目录下所有内容 |
mvn compile | 编译,将src/main/java下的java源文件编译为class文件并输出到target下的classes目录下 |
mvn test-compile | 编译测试程序 |
mvn test | 测试,会执行src/main/java下的单元测试类 |
mvn package | 打包,对于java工程执行package打包成jar包,对于web工程打包成war包 |
mvn install | 安装,将maven工程打成jar包或war包发布到本地仓库 |
1.3.3 Pom.xml的配置
在生成的pom.xml文件中,IDE自己生成的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>server</groupId>
<artifactId>ma</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ma</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
其中有几个重要的参数:
- groupId
公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade - artifactId
功能模块的名称 - version
本项目目前所处的版本号
1.3.4 Maven的功能演示
首先我们通过IDEA创建一个程序,其中pom.xml信息如下:
<groupId>com.naigelan.mmm</groupId>
<artifactId>mmm</artifactId>
<version>1.0-SNAPSHOT</version>
完后我们必须把该项目利用Maven发布到本地的仓库:
最后我们再利用Maven创建一个webapp,在其pom.xml文件中加载之前的信息,我们可以看到Maven自动帮我们加载了本地的com.naigelan.mmm:mmm:1.0-SNAPSHOT
包
最后我们调用刚才写的方法:
得到的结果是:
1.3.5 Maven常规使用
假如我们需要开发一个web的应用,之前得开发中,必须建立lib目录,且得引入必备的jar包才能完成进一步的开发,但是现在我们只需要在pom.xml中引入对应的jar信息即可,如:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
具体的jar包的信息,可在https://mvnrepository.com这个仓库中查找
2. Mybatis
2.1 定义
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2.2 配置与基本的使用
-
利用Maven引入mybatis的配置文件(除了mybatis还需要引入mysql的包):
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
-
创建mybatis.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> <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://127.0.0.1:3306/mytest"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--映射配置文件的路径--> <mappers> <!--<mapper resource="org/mybatis/example/BlogMapper.xml"/>--> </mappers> </configuration>
-
导入数据库,并根据数据库的结构,创建对应的类
-
创建mapper文件夹,并建立映射的 SQL 语句和在mybatis中引入mapper
-
开启测试并输出.
2.3 在项目中的CRUD
我们建立项目的目录如下:
mysql的结构和数据如下:
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50553
Source Host : localhost:3306
Source Database : mytest
Target Server Type : MYSQL
Target Server Version : 50553
File Encoding : 65001
Date: 2019-04-01 16:35:36
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for address
-- ----------------------------
DROP TABLE IF EXISTS `address`;
CREATE TABLE `address` (
`addressid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`userid` int(11) DEFAULT NULL COMMENT '外键:关联用户表主键',
`defaultAddr` tinyint(1) DEFAULT NULL COMMENT '是否默认地址',
`nation` varchar(20) DEFAULT NULL COMMENT '国家',
`province` varchar(20) DEFAULT NULL COMMENT '省区',
`city` varchar(20) DEFAULT NULL COMMENT '市区',
`country` varchar(20) DEFAULT NULL COMMENT '县区',
`street` varchar(100) DEFAULT NULL COMMENT '街道',
`remark` text COMMENT '备注',
PRIMARY KEY (`addressid`),
KEY `userid` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of address
-- ----------------------------
INSERT INTO `address` VALUES ('1', '1', '1', '中国', '河南', '郑州', '金水区', '二环路', '瑞隆城7号楼601');
INSERT INTO `address` VALUES ('2', '1', '0', '中国', '陕西', '西安', '北城区', '开元路', '文景小区1号楼202');
INSERT INTO `address` VALUES ('3', '1', '0', '中国', '云南', '昆明', '盘龙区', '小康大道', '银河星辰3号楼402');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`nickname` varchar(32) DEFAULT NULL,
`phone` varchar(16) DEFAULT NULL,
`address` varchar(128) DEFAULT NULL,
`sex` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
`createtime` datetime DEFAULT NULL,
`updatetime` datetime DEFAULT NULL,
`lasttime` datetime DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'admin', 'admin', '何腾飞', '15555555555', '山西太原', '1', '20', '60@qq.com', '2019-03-28 17:25:03', '2019-03-05 17:26:20', '2019-03-04 17:26:29', '1', '11');
INSERT INTO `user` VALUES ('2', 'test', 'test', '马欢', '16666666666', '河南', '2', '21', '60@qq.com', '2019-03-28 17:25:05', '2019-03-29 17:26:23', '2019-02-27 17:26:33', '2', '22');
INSERT INTO `user` VALUES ('8', 'mooc', 'mooc', '这笔', '17777777777', '北京', '1', '22', '60@qq.com', '2019-03-13 17:26:17', '2019-03-11 17:26:26', '2019-03-04 17:26:37', '0', '333');
SET FOREIGN_KEY_CHECKS=1;
2.3.1 Mybatis的配置数据库并封装DB连接池
-
建立mybatisconf.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> <!--配置mysql的连接信息--> <!--<properties resource="config"></properties>--> <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://127.0.0.1:3306/mytest"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/Usermapper.xml"></mapper> </mappers> </configuration>
-
在utils文件夹下封装数据库连接池
2.3.2 创建实体类
2.3.3 创建mapper文件
创建mapper文件夹,编写对应的Usermapper.xml配置所有的CRUD信息(核心)
<?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="com.damu.orm.User">
<select id="finduser" resultMap="foruser">
select * from User
<if test="id != null">
where id =#{id}
</if>
</select>
<!-- 自定义映射关系集合:主要包含对于一些自定义操作的配置,如不一致的属性和字段 -->
<resultMap id="foruser" type="com.damu.orm.User">
<!--绑定id-->
<id column="id" property="id"></id>
<!-- result配置,主要配置普通属性,column表示配置的是数据库字段名称 property配置的是实体类的属性名称 -->
<!--<result column="username" property="name"></result>-->
<!--
一对多的关系配置
此时column代表是在user中对应的键值
-->
<collection column="id" property="addresses" select="getaddress"></collection>
</resultMap>
<select id="getaddress" resultType="com.damu.orm.Address">
select * from Address where userid=#{id}
</select>
<!--添加语句,设置主键keyProperty 且允许自动生成的主键返回到刚才认证的主键上useGeneratedKeys-->
<insert id="adduser" keyProperty="id" useGeneratedKeys="true">
insert into User (username,password,nickname,phone,sex,email,age,createtime,updatetime,lasttime,status,remark)
values(#{username},#{password},#{nickname},#{phone},#{sex},#{email},#{age},#{createtime},#{updatetime},#{lasttime},#{status},#{remark})
</insert>
<update id="updateuser">
update User
<set>
<if test="username != null">username =#{username},</if>
<if test="password != null">password =#{password},</if>
<if test="nickname != null">nickname =#{nickname},</if>
<if test="phone != null">phone =#{phone},</if>
<if test="sex != null">sex =#{sex},</if>
<if test="email != null">email =#{email},</if>
<if test="age != null">age =#{age},</if>
<if test="createtime != null">createtime =#{createtime},</if>
<if test="updatetime != null">updatetime =#{updatetime},</if>
<if test="lasttime != null">lasttime =#{lasttime},</if>
<if test="status != null">status =#{status},</if>
<if test="remark != null">remark =#{remark},</if>
</set>
where id=#{id}
</update>
<delete id="deluser">
delete from User where id=#{id}
</delete>
</mapper>