Maven&MyBatis总结

文章介绍了Maven的基本功能,包括项目结构、构建流程和依赖管理,并列举了常用命令。接着讲解了MyBatis框架,如何使用Mapper代理方式完成入门案例,以及MyBatis配置文件的结构。此外,还提到了动态SQL的实现,如if标签和动态修改字段的方法。
摘要由CSDN通过智能技术生成

目录

Maven

Maven常用命令

依赖范围

MyBatis

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

MyBatis核心配置文件的顶层结构如下:

SaL语句设置多个参数有几种方式?

动态SQL

动态修改字段

批量删除


Maven

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

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

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

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

依赖管理

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

Maven常用命令

  • compile:编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

依赖范围

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
    <scope>runtime</scope>
</dependency>
依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储在本地的jar包
import引入DependencyManagement

<scop>默认值:compile

MyBatis

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

持久层

  • 负责将数据保存到数据库的那一层代码
  • JavaE三层架构:表现层、业务层、持久层

框架

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

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

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

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

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

4.编码

  • 通过SqlSession的getMapper方法获取Mapper接口的代理对象
  • 调用对应方法完成sql的执行

MyBatis核心配置文件的顶层结构如下:

数据库表的字段与实体类中不一致时,可以用resultMap映射

<resultMap id="brandResultMap" type="Brand">
    <!--
        id:完成主键字段的映射
        result:完成一般字段的映射
        column:表的列名
        property:实体类的属性名
        最后将resultType替换成resultMap即可
    -->
    <result column="brand_name" property="brandName"/>
    <result column="company_name" property="companyName"/>
</resultMap>

参数占位符
1.#{}:将其替换为?,可以防止sql注入
2.${}:拼参数
3.使用时机
    * 参数传递的时候:#{}
    * 表名或列名不固定的时候:${},会存在sql输入的问题

参数类型
parameterType 可以省略

特殊字符处理
1.转义字符
2.CDATA区 适用于字符较多

SaL语句设置多个参数有几种方式?

1)散装参数:需要使用@Param(“SQL中的参数占位符名称")

2)实体类封装参数
*只需要保证SQL中的参数名和实体类属性名对应上,即可设置成功

3)map集合
*只需要保证SQL中的参数名和map集合的键的名称对应上,即可设置成功

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

动态SQL

if:用于判断参数是否有值,使用test属性进行条件判断
*存在的问题:第一个条件不需要逻辑运算符
*解决方案:
1)使用恒等式让所有条件格式都一样

2)<where>标签替换where关键字

从多个条件中选择一个
choose(when,otherwise):选择,类似于Java中的switch语句

返回添加数据的主键
<insert id="add" useGeneratedKeys="true" keyProperty="id">

动态修改字段

案例:

测试类:

    @Test
    public void update() throws Exception {
        //接受参数
        int status=1;
        String companyName="小米科技有限公司";
        String brandName="小米";
        String description="从不期待米粉的期待";
        int ordered=200;
        int id=3;

        //封装对象
        Brand brand=new Brand();
        brand.setStatus(status);
        brand.setId(id);


        //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.获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        //4.执行方法
        int count = brandMapper.update(brand);
        System.out.println(count);

        //提交事务
        sqlSession.commit();

        //5.释放资源
        sqlSession.close();
    }
sql语句:
   <update id="update">
        update tb_brand
        <set>
            <if test="status != null">
                status=#{status}
            </if>
            <if test="companyName != null and companyName != '' ">
                company_name=#{companyName}
            </if>
            <if test="brandName != null and brandName != '' ">
                brand_name=#{brandName}
            </if>
            <if test="ordered != null">
                ordered=#{ordered}
            </if>
            <if test="description != null and description != '' ">
                description=#{description}
            </if>
        </set>
        where id=#{id};

    </update>

批量删除

mybatis会将数组参数,封装为一个Map集合。
*默认:array=数组
*使用@Param注解改变map集合的默认key的名称

MyBatis参数封装:

单个参数:
1.POJO类型:直接使用,属性名和参数占位符名称一致
2.Map集合:直接使用,键名和参数占位符名称一致
3.ColLection:封装为Map集合
   map.put("arg0",collection集合);
   map.put("colLection",colLection集合);
4.List;封装为Map集合
   map.put("arg0",List集合);
   map.put("colLection",List集合);
   map.put("list",List集合);
5.Array:封装为Map集合
   map.put("arg0",数组);
   map.put("array",数组);
6.其他类型:直接使用

多个参数:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名
   map.put("arg0",参数值1)
   map.put("param1",参数值1)
   map.put("param2",参数值2)
   map.put("agr1",参数值2)
提示:
        注解完成简单功能
        配置文件完成复杂功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值