Javaweb-Maven和MyBatis入门

目录

一、Maven

1.Maven简介

2.Maven安装配置

3.Maven的基本使用

Maven常用命令

Maven生命周期

4.IDEA配置Maven

IDEA配置Maven环境

Maven坐标详解

IDEA创建Maven项目

IDEA导入Maven项目

5.依赖管理

使用坐标导入jar包

使用坐标导入jar包 -快捷方式

依赖范围

二、MyBatis 

1.MyBatis快速入门

1.创建user表,添加数据

2.创建模块,导入坐标

3.编写MyBatis核心配置文件 -->替换连接信息 解决硬编码问题

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

5.编码

2.Mapper代理开发

使用Mapper代理方式完成入门案例

3.MyBatis核心配置文件

4.查询结果映射

5.参数占位符

6.SQL语句设置多个参数的几种方式

1.散装参数

2.实体类封装参数

3.map集合

7.动态SQL

1.多条件动态查询

2.单条件动态查询

 3.返回添加数据的主键

8.MyBatis参数传递

单个参数

多个参数

9.注解开发


一、Maven

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

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

->提供了一套标准化的建构流程(编译、测试、打包、发布....)

->提供了一套依赖管理机制

依赖管理

->依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件....)

1.Maven使用标准的坐标配置来管理各种依赖

2.只需要简单的配置就可以完成依赖管理

1.Maven简介

->Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档

->官网:http://maven.apache.org/

 仓库分类

->本地仓库:自己计算机上的一个目录

->中央仓库:由Maven团队维护的全球唯一仓库 地址:https://repo1.maven.org/maven2/

->远程仓库(私服):一般由公司团队搭建的私有仓库

当项目中使用坐标引入对应依赖的jar包后,首先会查找本地仓库中是否有对应的jar包

如果有,则在项目中直接引用

如果没有,则去中央仓库下载对应的jar包到本地仓库

还可以搭建远程仓库,将来jar包的查找顺序则变为

本地仓库->远程仓库->中央仓库

2.Maven安装配置

1.解压apache-maven-3.6.1.rar即完成安装

2.配置环境变量MAVEN-HOME为安装路径的bin目录

cmd命令窗口输入:mvn -version 测试是否配置成功

3.配置本地仓库:修改conf/setting.xml中的为一个指定目录

Javaweb-Maven和MyBatis入门_第1张图片

4.配置阿里云私服:修改conf/setting.xml中的标签,为其添加如下子标签

        aliyunmaven

        *

        阿里云公共仓库

        https://maven.aliyun.com/repository/public

3.Maven的基本使用

Maven常用命令

1.compile:编译

2.clean:清理

3.test:测试

4.package:打包

5.install:安装

Maven生命周期

Maven构建项目生命周期描述的是一次构架过程经历了多少个事件

Maven对项目构建的生命周期分为三套

->clean:清理工作

->default:核心工作,例如编译,测试,打包,安装等

->site:产生报告,发布站点等

Javaweb-Maven和MyBatis入门_第2张图片

4.IDEA配置Maven

IDEA配置Maven环境

1.选择IDEA中File--->Settings

Javaweb-Maven和MyBatis入门_第3张图片

2.搜索Maven

Javaweb-Maven和MyBatis入门_第4张图片

3.设置IDEA使用本地安装的Maven,并修改配置文件路径

Javaweb-Maven和MyBatis入门_第5张图片

 Javaweb-Maven和MyBatis入门_第6张图片

Maven坐标详解

什么是坐标?

Maven中的坐标是资源的唯一标识

使用坐标来定义项目或引入项目中需要的依赖

Maven坐标主要组成

groupld:定义当前Maven项目隶属于组织名称(通常是域名反写,例如:com.ui)

artifactld:定义当前Maven项目名称(通常是模块名称,例如order-service)

version:定义当前项目版本号

IDEA创建Maven项目

1.创建模块,选择Maven,点击Next

2.填写模块名称,坐标信息,点击finish,创建完成

3.编写,运行

IDEA导入Maven项目

1.选择maven面板,点击+

2.选择对应项目的pom.xml文件,双击

3.如果没有Maven面板,选择View->Appearance->Tool Windows Bars

5.依赖管理

使用坐标导入jar包

1.在pom.xml中编写标签

2.在标签中使用引入坐标

3.定义坐标的groupld,artifactld,version

4.点击刷新按钮,使坐标生效

    
    
        
            mysql
            mysql-connector-java
            8.0.30
        
    

使用坐标导入jar包 -快捷方式

1.在pom.xml中按alt+insert,选择Dependency

2.在弹出的面板中搜索对应选项,然后双击选中对应坐标

3.点击刷新按钮,使其生效

依赖范围

通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境,测试环境,运行环境


    junit
    junit
    4.13
    test

Javaweb-Maven和MyBatis入门_第7张图片

默认值:compile

二、MyBatis 

MyBatis入门学习:https://mybatis.net.cn/

什么是MyBatis?

->MyBatis是一款优秀的持久层框架,用于简化JDBC开发

->MyBatis本事Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Giuhub

->官网:https://mybatis.org/mybatis-3/zh/index.html

持久层

负责将数据到保存到数据库的那一层代码

JavaEE三层架构:表现层、业务层、持久层

框架

框架就是一个半成品软件,是一套可重用,通用的,软件基础代码模型

在框架的基础之上构建软件编写更加高效,规范,通用,可扩展

1.MyBatis快速入门

1.创建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.创建模块,导入坐标


        
        
            org.mybatis
            mybatis
            3.5.5
        
        
        
            mysql
            mysql-connector-java
            8.0.30
        
        
        
            junit
            junit
            4.13
            test
        
        
        
            org.slf4j
            slf4j-api
            2.0.5
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            ch.qos.logback
            logback-core
            1.2.3
        
    

导入logback.xml文件



    
    
        
            [%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n
        
    

    
        
    


    
    
        
    

3.编写MyBatis核心配置文件 -->替换连接信息 解决硬编码问题

新建mybatis-config.xml文件




    
        
            
            
                
                
                
                
                
            
        
    
    
        
        
    

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

新建UserMapper.xml





    

5.编码

        1.定义POJO类

        2.加载核心配置文件,获取SqlSessionFactory

        3.获取SqlSession对象,执行sql语句

        4.释放资源

package com.itheima;

import com.itheima.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo {
    /*
    MyBatia快速入门
     */
    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对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.执行sql语句
        List users = sqlSession.selectList("test.selectAll");
        System.out.println(users);
        //4.释放资源
        sqlSession.close();

    }
}

2.Mapper代理开发

目的:解决原生方式中的硬编码 简化后期执行SQL

使用Mapper代理方式完成入门案例

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

Javaweb-Maven和MyBatis入门_第8张图片

2.设置SQL映射文件的namespace属性为Mapper接口全限定名

修改UserMapper.xml中的namespace

3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

package com.itheima.Mapper;

import com.itheima.pojo.User;

import java.util.List;

public interface UserMapper {
    List selectAll();
}

修改mybatis-config.xml中加载sql映射文件的路径 


        
        

4.编码

        1.通过SqlSession的getMapper方法获取Mapper接口代理对象

        2.调用对应方法完成sql执行

细节:如果Mapper接口名称和SQL映射文件名称相同,并且在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

       

package com.itheima;

import com.itheima.Mapper.UserMapper;
import com.itheima.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo2 {
    /*
    MyBatia代理开发
     */
    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对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.执行sql语句
        //List users = sqlSession.selectList("test.selectAll");
        //3.1获取UserMapper接口代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List users = userMapper.selectAll();
        System.out.println(users);
        //4.释放资源
        sqlSession.close();

    }
}

3.MyBatis核心配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

类型别名

       

细节:配置各个标签时,需要遵守前后顺序

4.查询结果映射







        
        


5.参数占位符

1.#{}:会将其替换为?,为了防止sql注入

2.${}:拼sql,会存在sql注入问题

3.使用时机:

        *参数传递时:#{}

        *表名或列名不固定的情况下:${}会存在sql注入问题

参数类型:parameterType 可省略

*特殊字符处理

        1.转义字符

        2.CDATA区

例如小于号:<




6.SQL语句设置多个参数的几种方式

1.散装参数

需要使用@Param("SQL中的参数占位符名称")

2.实体类封装参数

只需要保证SQL中的参数名和实体类属性名对应即可

3.map集合

只需要保证SQL中的参数名和map集合的键的名称对应即可

7.动态SQL

https://mybatis.net.cn/dynamic-sql.html

SQL语句会随着用户的输入或外部条件的变化而变化,我们称为动态SQL

MyBatis对动态SQL有很强大的支撑

->if

->choose(when,otherwise)

->trim(where,set)

->foreach

1.多条件动态查询

if:用于判断参数是否有值,使用set属性进行条件判断

        存在的问题:第一个条件不需要逻辑运算符

        解决方案:

                1)使用恒等式让所有条件格式都一样 1=1

                2)标签替换where关键字

2.单条件动态查询

从多个条件中选择一个

choose(when,otherwise)选择,类似于Java中的Switch语句

 
    select *
    from tb_brand
    
    
         
            status = #{status}
        
            company_name like #{companyName}
        
            brand name like #{brandName}
         
            1= 1
        
    
    

 3.返回添加数据的主键

8.MyBatis参数传递

MyBatis接口方法中可以接受各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式

单个参数

1.POJO类型:直接使用,实体类属性名和参数占位符名称一致

2.Map集合:直接使用,键名和参数占位符一致

3.Collection:封装为Map集合

map.put("collection",collection集合);

map.put("arg0",collection集合);

4.List:封装为Map集合

map.put("collection",list集合);

map.put("list",list集合);

map.put("arg0",list集合);

5.Array:封装为Map集合

map.put("array",数组);

map.put("arg0",数组);

 6.其他类型:直接使用

多个参数

封装为Map集合

map.put("arg0",参数值1);

map.put("parm1",参数值1);

map.put("arg1",参数值2);

map.put("parm2",参数值2);

建议:将来都使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样可读性更高

9.注解开发

使用注解开发会比配置文件开发更加方便

@Select("select * from tb_user where id = #{id}")
public User selectById(int id);

查询:@Select

添加:@Insert

修改:@Update

删除:@Update

提示:

        ->注解完成简单功能

        ->配置文件完成复杂功能

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。

mybatis-demo源码:https://download.csdn.net/download/m0_71119554/87356135

你可能感兴趣的:(javaweb,mybatis,maven,java)