MyBatis快速入门

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。
负责将数据保存到数据库的那一层代码叫做持久层

mybatis快速入门

在pom文件中导入坐标

    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>

    <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>

</dependencies>

在resources中创建xml文件
一个logback.xml 一个mybatis-config.xml 一个xxxMapper.xml

编写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">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <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="已经定义的文件Mapper.xml"/>
  </mappers>
</configuration>

编写SQL映射文件mapper.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="对应的类">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

定义pojo类
并写使用类
用alt+鼠标左键 整列编辑从sql中复制的代码,形成定义变量,格式化完成后alt+insert选中所有属性完成get set的方法,然后自动添加一个tostring方法

在文件同级写一个类Mybatis_demo
在main中写此代码 加载mybatis核心配置文件,并获得sqlsessionfactory

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);

获取sqlsession对象,用它来执行SQL语句
SqlSession sqlSession=sqlSessionFactory.openSession();
执行SQL
执行语句:类 对象 = sqlsession.方法;
释放资源;

Mapper代理开发

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

方式:

1定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
其实就是现在java中创建Mapper接口,再在resources中创建同名的Mapper文件,将resources中和Mapper接口同名的映射文件加入这个文件。

2设置SQL映射文件的namespace属性为Mapper接口全限定名
就是将上述映射文件的xml中的namespace值改写成Mapper接口的目录文件名。

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

4编码:通过sqlsession的getMapper方法获取Mapper接口的代理对象,调用对应方法完成SQL的执行。

Mybatis核心配置文件

再pojo中配置要使用的表的类格式化为驼峰命名
配置mybatisxml文件

配置文件完成增删改查

完成Mybatis功能的三个步骤:
1、编写接口方法 编写Mapper接口
参数:???
结果:List< Brand > 对象
2、通过插件生成sql映射文件,并编写语句
3、执行方法

查询所有功能

ps:brand类已经在pojo中使用驼峰命名格式完成

1、`package com.itheima.mapper;

import java.util.List;

public interface BrandMapper {

 public List<Brand> selectAll();

}
`

2、`<?xml version="1.0" encoding="UTF-8" ?>

<select id="selectAll" resultType="brand">
    select *
    from stu;
</select>

`

3、`package com.itheima.test;

import com.itheima.mapper.BrandMapper;
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 org.testng.annotations.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {

@Test
public void testSelectAll() throws IOException {

	//获取参数

	//封装参数

    //获取sqlsession
    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    //获取sqlsession对象
    SqlSession sqlSession=sqlSessionFactory.openSession();

    //获取mapper接口代理对象
    BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);

    //执行方法
     List<BrandMapper> brands = BrandMapper.selectAll();

    System.out.println(brands);

    //释放资源
    sqlSession.close();

}

}
`

当我们测试了测试类以后,发现使用驼峰命名的行列字段与数据表的命名有出入,因此打印出的东西的值变成了null。
为了解决这个问题,我们手动设置,第一个方案是对不一样的类名起别名sth as sth,第二个方案是在外面设置SQL片段日后可以引用。然而这两者都有比较大的局限性,因此我们使用resultmap来解决,
在这里插入图片描述

查看详情

流程与上述类似
不过在Mapper接口中返回的类型变成了brand,增加参数id,
在映射文件中参数传递使用#{} id=占位符#{id}。防止sql注入。
parameterType:用于设置参数类型
SQL语句中特殊字符处理:1、转义字符2、cdata

条件查询

三种不同的参数接受方式
1、散装参数: 多参数要注解@param(“字段名”) 类型 字段名,
2、实体类封装的参数 类名 对象
3、map集合参数 new一个hashmap ,对每一个键值进行打印排列

编写SQL语句:使用=等值连接,模糊查询时使用like,并且所有参数都使用#{}连接。

动态条件查询(条件查询的优化)

SQL语句会随着外部输入的变化而变化,我们称之为动态SQL
动态SQL书写语法表
多条件sql动态
使用多条件if的时候在前面添加where 1=1可以防止报错,或者使用< where >将if包裹起来

单条件sql动态
使用choose when
为了保底也就是用户一个都不选的时候使用otherwise。

添加

在这里插入图片描述
在这里插入图片描述
在释放资源之前需要提交事务
sqlSession.commit();

主键返回:
在数据获取成功后需要获取添加的主键的值。
在这里插入图片描述
在insert中添加属性值即可。

修改

1、修改全部字段

与添加测试语法相似

2、修改动态字段

需要改写映射文件中的sql语句,使用< if >包裹对应传值

删除

删除一个使用标准代码进行void deleteById(id)
批量删除void deleteByIds(@param(“ids”) int[]ids)

注解开发

(适合简单的功能)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值