Java学习十五,Maven,Mybatis

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 配置与基本的使用

  1. 利用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>
    
  2. 创建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>
    
  3. 导入数据库,并根据数据库的结构,创建对应的类
    在这里插入图片描述
    在这里插入图片描述

  4. 创建mapper文件夹,并建立映射的 SQL 语句和在mybatis中引入mapper
    在这里插入图片描述
    在这里插入图片描述

  5. 开启测试并输出.
    在这里插入图片描述

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连接池

  1. 建立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>
    
  2. 在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>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值