Maven&MyBatis高级学习

1 篇文章 0 订阅
1 篇文章 0 订阅

Maven&MyBatis

目标

  • 能够使用Maven进行项目的管理(工具)

    • 怎么配置

    • idea怎么去用你电脑的maven

    • maven 指令了解(创建工程)

  • 能够完成Mybatis代理方式查询数据

  • 能够理解Mybatis核心配置文件的配置

1,Maven

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构

  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

  • 提供了一套依赖管理机制

标准化的项目结构:

项目结构我们都知道,每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我再eclipse中创建的目录,无法在idea中进行使用,这就造成了很大的不方便,如下图:前两个是以后开发经常使用的开发工具

  • 配置阿里云私服

    中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的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>

tips小结:

在java01项目下,cmd输入mvn clean命令====安装成功并且配置成功了!

  1. maven优势:

    • 提供了一套标准化的项目结构

    • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

    • 提供了一套依赖管理机制

  2. maven安装

    • 解压

    • 配置本地仓库文件夹和镜像

    • idea使用maven创建项目、导入jar

    • 了解maven项目目录

    • maven仓库的概念

  3. maven项目管理

    1. maven生命周期插件:compile test package install

    2. maven坐标的定义:域名反写

<?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>com.itgaohe</groupId>
    <!--项目在maven中的名字-->
    <artifactId>maven02</artifactId>
    <!--项目版本-->
    <version>1.0-SNAPSHOT</version>
    <!-- 项目打包方式  jar  java项目(默认)   war  web项目   pom 聚合工程  -->
    <packaging>jar</packaging>
​
    <!--依赖管理-->
    <dependencies>
        <!--具体依赖-->
        <!--mysql文件夹  mysql-connector-java 文件夹 5.1.46 文件夹  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
​
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
​
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
    </dependencies>
​
</project>

课前练习:

idea:创建工程要求:

  1. 创建mybaits-day1项目空间

  2. 创建mbdemo项目模块

  3. 并导入mysql依赖、druid依赖、junit依赖

2.2 Mybatis快速入门

步骤概览:

    1.创建表
    2.创建模块,导入坐标
    3.编写和表对应的实体类
    4.编写 MyBatis 核心配置文件
    5.指定mapper接口和mapper文件相对应
    6.编写 SQL 映射文件
    7.编写测试代码

需求:查询user表中所有的数据

  • 创建user表,添加数据

    create database mybatis;
    use mybatis;
    
    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 配置文件中添加依赖的坐标

    <dependencies>
        <!--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>
    
        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

    tips:注意:需要在项目的 resources 目录下创建logback的配置文件(日志用,如果不用日志可以将日志jar依赖注释掉)

    3.编写和表对应的实体类

    编码

    • com.itgaohe.pojo 包下创建 User类

      public class User {
          private int id;
          private String username;
          private String password;
          private String gender;
          private String addr;
      
          //省略了 setter 和 getter tostring
      }
  • 4.编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题

    在模块下的 resources 目录下创建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">
    <!--6.编写核心配置文件-->
    <!--configuration 配置-->
    <configuration>
        <!--environments 操作环境-->
        <environments default="development">
            <!--environment 单个操作环境-->
            <environment id="development">
                <!--transactionManager 事务管理类型 JDBC-->
                <transactionManager type="JDBC"></transactionManager>
                <!--dataSource 数据库连接池-->
                <dataSource type="POOLED">
                    <!--property 配置信息-->
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/study?characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <!--mappers 将映射文件加载到配置文件中-->
        <mappers>
            <mapper resource="com/itgaohe/mapper/UserMapper.xml"></mapper>
        </mappers>
    </configuration>
  • 5.指定mapper接口和mapper文件相对应

    要先写出 对应java资源目录下的 UserMapper 接口(com.itgaohao.mapper.UserMapper)

    接口中指定要操作的接口方法

    public interface UserMapper {
        public List<User> selectAll();
    }

    在resource资源目录下 创建和java文件中 相对应位置的 UserMapper.xml

    添加的时候写com/itgaohe/mapper/UserMapper.xml 用/分割

    6.编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题

    在模块的 resources 目录下创建映射配置文件 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 namespace="com.itgaohe.mapper.UserMapper">
        <select id="selectAll" resultType="com.itheima.pojo.User">
            select * from user;
        </select>
    </mapper>
  • 7.编写测试代码

    • com.itgaohe 包下编写 MybatisDemo 测试类

      /*7. 测试*/
      public class MybatisTest {
          @Test
          public void findAll() throws IOException {
              //1.加载核心配置文件
              InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
              //2.获取sqlsessionfactory 加载 输入流到 工厂中
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
              //3.打开sqlSessionFactory 拿到单个的sqlsession对象
              SqlSession sqlSession = sqlSessionFactory.openSession();
              List<Object> findAll = sqlSession.selectList("com.bdqn.mapper.UserMapper.findAll");
              for (Object o : findAll) {
                  System.out.println(o);
              }
              //关闭 释放资源
              sqlSession.close();
          }

2.21.事务的自动提交

方法解释
openSession()会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提 交该事务,更新操作数据才会持久化到数据库中
openSession(booleanautoCommit)参数为是否自动提交,如果设置为true,那么不需要手动提交事务
//1.事务自动提交
SqlSession sqlSession = ssf.openSession(true);
//2.手动提交
sqlSession.commit();

操作事务的方法主要有:

void commit()
void rollback()

解决SQL映射文件的警告提示:

在入门案例映射配置文件中存在报红的情况。问题如下:

查询语句中的数据库名 爆红
  • 产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。

  • 解决方式:在Idea中配置MySQL数据库连接。

IDEA中配置MySQL数据库连接

  • 点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

    2.3 Mapper代理开发

    2.3.1 Mapper代理开发概述

    采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接 口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 Mapper 接口开发需要遵循以下规范:

    1.Mapper.xml中的namespace(com.bdqn.mapper.UserMapper)和 mapper包中的 Mapper(UserMapper)接口 一致。
    2.Mapper接口中的方法名和 select/update/insert/delete 标签中 id 的一致。
    3.Mapper接口方法中的参数类型和 映射文件中 paramterType一致。
    4.Mapper接口方法的返回值和 映射文件中 resultType一致。

    之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下:

    步骤:

    1. 创建模块

    2. 导入依赖mysql\mybatis

    3. mybatis-config.xml

    4. UserMapper接口-----UserMapper.xml配置文件

    5. 测试

    2.3.3 案例代码实现
    • com.itgaohe.mapper 包下创建 UserMapper接口,代码如下:

      public interface UserMapper {
          List<User> selectAll();
          User selectById(int id);
      }
    • resources 下创建 com/itgaohe/mapper 目录,并在该目录下创建 UserMapper.xml 映射配置文件

      <!--
          namespace:名称空间。必须是对应接口的全限定名
      -->
      <mapper namespace="com.itheima.mapper.UserMapper">
          <select id="selectAll" resultType="com.itheima.pojo.User">
              select *
              from tb_user;
          </select>
      </mapper>
    • com.itgaohe 包下创建 MybatisDemo2 测试类,代码如下:

      /**
       * Mybatis 代理开发
       */
      public class MyBatisDemo2 {
      
          public static void main(String[] args) throws IOException {
      
              //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
              String resource = "mybatis-config.xml";
              InputStream inputStream = Resources.getResourceAsStream(resource);
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
              //2. 获取SqlSession对象,用它来执行sql
              SqlSession sqlSession = sqlSessionFactory.openSession();
              //3. 执行sql
              //3.1 获取UserMapper接口的代理对象====
              //UserMapper userMapper =  new UserMapperImpl();
              UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
              List<User> users = userMapper.selectAll();
      
              System.out.println(users);
              //4. 释放资源
              sqlSession.close();
          }
      }

    注意:

    如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将核心配置文件的加载映射配置文件的配置修改为

    <mappers>
        <!--加载sql映射文件-->
        <!-- <mapper resource="com/itgaohe/mapper/UserMapper.xml"/>-->
        <!--Mapper代理方式-->
        <package name="com.itgaohe.mapper"/>
    </mappers>

    实现规则 :

    接下来我们先对里面的一些配置进行讲解。

    2.4.1 多环境配置

    在核心配置文件的 environments 标签中其实是可以配置多个 environment ,使用 id 给每段环境起名,在 environments 中使用 default='环境id' 来指定使用哪儿段配置。我们一般就配置一个 environment 即可。

    <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>
    
        <environment id="test">
            <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>
    </environments>
    2.4.2 类型别名

    在映射配置文件中的 resultType 属性需要配置数据封装的类型(类的全限定名)。而每次这样写是特别麻烦的,Mybatis 提供了 类型别名(typeAliases) 可以简化这部分的书写。

    首先需要现在核心配置文件中配置类型别名,也就意味着给pojo包下所有的类起了别名(别名就是类名),不区分大小写。内容如下:

    <typeAliases>
        <!--name属性的值是实体类所在包-->
        <package name="com.itgaohe.pojo"/> 
    </typeAliases>

    通过上述的配置,我们就可以简化映射配置文件中 resultType 属性值的编写

    <mapper namespace="com.itheima.mapper.UserMapper">
        <select id="selectAll" resultType="user">
            select * from tb_user;
        </select>
    </mapper>

    添加模板内容为:

    <?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="">
    
    </mapper>

    模板内容为

    <?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"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="org/mybatis/example/xxx.xml"></mapper>
        </mappers>
    </configuration>

    小结:

    1. 用maven搭建环境(多用,孰能生巧)

    2. mybatis(重点在步骤)

      1. 核心配置文件

      2. 映射配置文件

      3. pojo

      4. 测试类

    <!--
        1.创建模块
        2.导入依赖
        3,核心配置文件
        4,写pojo
        5,映射接口
        6,映射配置文件
        7.测试功能
    
    -->

    能力目标:

    熟练使用mybatis映射方式。

    1. 使用mybatis完成tb_brand表查询全部;tb_brand(id,brand_name,company_name,ordered,description,status)

    2. 使用mybatis完成person表查询全部;

    3. 使用mybatis完成card表查询全部;

    4. 使用mybatis完成classes表查询全部;

    5. 使用mybatis完成student表查询全部;course

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值