Mybatis

Mybatis快速入门:

1.mybatis的快速开发(基于maven):

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.8</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

1.1注意:再改完配置文件后需要重新加载依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgDeVS6r-1678723796119)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310175059762.png)]

1.2XML(写在resource里面):

1.2.1 logback.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
    <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>
    <logger name="com.itheima" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>
</configuration>

1.2.2 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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?usesSL=false&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

1.2.3 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="test">
    <select id="selectAll" resultType="com.test">
        select * from tb_user;
    </select>
</mapper>

1.2.4 MybatisDome.java:

package com.test;
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 MybatisDome {
    public static void main(String[] args) throws IOException {
        //加载mybatis的配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取sqlSession对象,用它来执行对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行SQL
        List<User> user = sqlSession.selectList("test.selectAll");
        System.out.println(user);
        //释放资源
        sqlSession.close();
    }
}

1.2.5 User.java:

public class User {
    private int id;
    private String username;
    private String password;
    private char gender;
    private String   addr;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public char getGender() {
        return gender;
    }

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

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender=" + gender +
                ", addr='" + addr + '\'' +
                '}';
    }
}

2 Mapper代理开发:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDEqayZF-1678723796121)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310141432657.png)]

这样的书写格式也出现了硬编码的问题,我们可以解决这个问题:

2.1.11、定义一个mapper接口,要求mapper文件和这个mapper接口在同一个目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTkTkynz-1678723796121)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310143443241.png)]

这样User Mapper接口和xml文件编译后就在同一个包下了

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sI4lxUWW-1678723796122)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310144719322.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgO6CX4k-1678723796122)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310152225676.png)]

2.2执行过程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ns6nnxR8-1678723796123)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310170752224.png)]

3、mybatis核心配置文件(在配置时需要遵守顺序):

3.1mybatis-config.xml:

顺序如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
3.1.1environment:
environments:配置数据库连接环境信息。可以配置多个envinonment,通过default属性切换不同的environment
3.1.2typeAliases:
typeAliases:可以取别名->resultType在取完别名之后可以直接使用相应实体类的名字(不用区分大小写)
修改后重新加载依赖
image-20230310173715090

插件:MybatisX

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-15nI8tOp-1678723796123)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313093303360.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwyPWGex-1678723796124)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313093337975.png)]

4完成增删改查:

4.1:按id查

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XYnBU3j-1678723796124)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313104629139.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tx8kRBTr-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313104500412.png)]

4.2小结:

image-20230313105339144

4.3:模糊查询:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTj5KFni-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313115133901.png)]

4.3.1:@Param的作用是用来和SQL语句中的参数值来进行一 一对应赋值
public List<Brand>  selectCondition(@Param("status") int status,@Param("company_name") String company_name,@Param("brand_name") String brand_name);

4.4:小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8eVraFwm-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313162522615.png)]

5、动态查询

5.1 :官网动态 SQL_MyBatis中文网
  • if
  • choose —类似于switch (when—类似于 , otherwise)
  • trim (where, set)
  • foreach

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wXnsrUd-1678723796126)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313170630762.png)]

6、添加数据:

​ 在添加数据时Mybatis会默认的把事务关闭:可以在获取SqlSession对象时加 true
​ SqlSession sqlSession = sqlSessionFactory.openSession( true);这样可以不用使用sqlSession.commit();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DptBhLGa-1678723796126)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313174509257.png)]

7、修改数据:

7.1:修改整个对象的值

xml:

<update id="updata">
    update tb_brand
    set brand_name = #{brand_name},
        company_name = #{company_name},
        ordered = #{ordered},
        description = #{description},
        status = #{status} where id=#{id};
    ;
</update>

Mapper: 定义一个方法updata

7.2: 动态修改对象的值

和动态查询相似:加判断,但是会有一个问题就是当我们只想修改局部值时,会出现SQL语义错误。解决办法是加 set 标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DavFeZwV-1678723796127)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313202019393.png)]

8、删除数据:

8.1:删除单个数据

xml:

<delete id="delectById">
    delete from tb_brand where id = #{id};
</delete>

mapper:接口

ublic void delectById(int id);
8.2:删除多个数据

mapper接口

   public void delectByIds(int[] id);

xml:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i72WaXrP-1678723796128)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313223635730.png)]

collection:如果不使用 @Param(“ids”) 则需要使用 array 来获取数据

open 是在开始的位置进行拼接 close 是在结束的位置进行拼接 例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7rSzSIke-1678723796128)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313225222292.png)]

9、参数传递:

类:ParamNameResolver进行数据封装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYjUZ04z-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313231504524.png)]

![](C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313230828390.png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cghjtcqQ-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313231518195.png)]

10、注解完成增删改查:

​ 简单的SQL语句 :注解会比写XML的来的更快,更方便。使代码更加的简洁

​ 复杂的SQL语句还是需要使用XML的映射方式进行SQL语句的编写,使得代码更加的简洁,可以统一配置

[外链图片转存中…(img-7rSzSIke-1678723796128)]

9、参数传递:

类:ParamNameResolver进行数据封装

[外链图片转存中…(img-iYjUZ04z-1678723796129)]

![](C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313230828390.png

[外链图片转存中…(img-cghjtcqQ-1678723796129)]

10、注解完成增删改查:

​ 简单的SQL语句 :注解会比写XML的来的更快,更方便。使代码更加的简洁

​ 复杂的SQL语句还是需要使用XML的映射方式进行SQL语句的编写,使得代码更加的简洁,可以统一配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ywj5Tql-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230314000114868.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值