Mybatis

1、什么是Mybatis

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

Mybatis本是Apache的一个开源项目iBatis,2010年这个项目由apache sfotware foundation 迁移到了google code,并且改名为Mybatis。2013年11月迁移到Github

官网:

https://mybatis.org/mybatis-3/zh/index.html

2、Mybatis入门

快速入门

使用Mybatis查询所有用户数据

步骤:

1.准备工作(创建springboot工程、数据库表user、实体类User)

package com.example.pojo;

public class User {
    private Integer id;
    private String name;
    private String age;
    private String gender;

    public User(){

    }
    public User(Integer id, String name, String age, String gender, String phone) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", gender='" + gender + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    private String phone;
}

2.引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=20031003

3.编写SQL语句(注解/XML)

@Mapper // 在运行时,会自动生成该接口的实现类对象(代理对象),并且将该都西昂交给IOC容器管理
public interface UserMapper {

    // 查询全部用户信息
    @Select("select * from user")
    public List<User> list();
}

4.单元测试

@SpringBootTest
class SpringbootMybatisQuickstartApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testListUser(){

        List<User> userList = userMapper.list();
        userList.stream().forEach(user -> {
            System.out.println(user);
        });
    }

}

配置SQL提示

默认在mybatis中编写SQL语句是不是别的。可以做如下配置

产生原因:Idea和数据库没有建立连接,不识别表信息

解决方式:在idea中配置MySQL数据库连接

JDBC介绍

JDBC:

(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API

本质:

sun公司官方定义的一套操作所有关系型数据库的规范,即接口、、

哥哥数据库厂商去实现这套接口,提供数据库驱动jar包

我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

数据库连接池

数据库连接池

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势

资源重用

提升系统响应速度

避免数据库连接遗漏

标准接口:

DataSource

官方(sun)提供的数据库连接池接口,由第三方组织实现此接口

功能:获取连接

Connection getConnection() throws SQLException;

Druid(德鲁伊)

Druid连接池是阿里巴巴开源的数据库连接池项目

功能强大,性能优秀,是Java语言最好的数据库连接池之一

Hikari(追光者)

springboot默认的连接池

切换Druid数据库连接池

官方地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

方法一:

<dependency>
    <groupld>com.alibaba</groupld>
    <artifactld>druid-spring-boot-starter</artifactld>
    <version>1.2.8</version>
</dependency>

方法二:

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.druid.username=root
spring.datasource.druid.password=20031003

lombok

Lombok是一个使用的Java类库,能通过注解的形式自动生成构造器,getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发,提高效率。

3、Mybatis基础增删改查

删除

SQL语句

delete from emp where id = 17;

接口方法

 @Delete("delete from emp where id = #{id}")
    public void delete(Integer id);

注意:如果mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如:#{id}、#{value}

日志输出

在application.properties中,打开mybatis的日志,并指定输出到控制台

#配置mybatis的日志,指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

预编译SQL

优势

性能更高

更安全(防止SQL注入)

SQL注入:是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法

参数占位符

新增

SQL语句

insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)
values ('Tom', '汤姆',1,'1.jpg',1,'2005-01-01',1,now(),now());

接口方法

@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +
    "values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
    public void insert(Emp emp);

主键返回

更新

SQL语句

接口方法

@Update("update emp set username = #{username}, name = #{name}, gender = #{gender}, image = #{image}, job = #{job}, " +
            "entrydate = #{entrydate}, dept_id = #{deptId}, update_time = #{updateTime} where id = #{id}")
    public void update(Emp emp);

查询

SQL语句

SELECT * from emp where id =20;

接口方法

@Select("select * from emp where id =#{id}")
    public Emp getById(Integer id);

数据封装

实体类属性名和数据库查询返回的字段名一致,mybatis会自动封装

如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装

解决方案

起别名:在SQL语句中,对不一样的列名起别名,别名和实体类shu'xing'm给一样

手动结果映射:通过@Results及@Result进行手动结果映射

开启驼峰命名:如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则

条件查询

SQL语句

接口方法

不是预编译的sql,性能低,不安全,存在sql注入问题

解决方法:用concat

    @Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and " +
            "entrydate between #{begin} and #{end} order by update_time desc")
    public List<Emp> list(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);

参数名说明

在springboot的2.x版本

在springboot的1.x版本/单独使用mybatis

XML映射文件

规范

XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)

XML映射文件的namespace属性为Mapper接口全限定名一致。

XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

MybatisX

一款基于IDEA的快速开发Mybatis的插件,为效率而生

注意:

使用Mybatis的注解,主要是完成一些简单的增删改查功能,如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

4、Mybatis动态SQL

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

<if>

<if>:用于判断条件是否成立,使用test属性进行条件判断,如果条件为true,则拼接SQL

<where>:where元素只会在子元素有内容的情况下才插入where自居,而且会自动去除子句开头的and或or

<set>:动态地在行首插入set关键字,并会删掉额外的逗号(用在update语句中)

<foreach>

SQL语句

接口方法

XML映射文件

<sql><include>

<sql>:定义可重用的SQL片段

<include>:通过属性refid,指定包含的sql片段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值