MyBatis基础 –使用配置文件完成CRUD【上】

导读:本篇文章讲解 MyBatis基础 –使用配置文件完成CRUD【上】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

也许你感觉自己的努力总是徒劳无功,但不必怀疑,你每天都离顶点更进一步。今天的你离顶点还遥遥无期。但你通过今天的努力,积蓄了明天勇攀高峰的力量。加油!

MyBatisX

  • MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。

  • 主要功能

    • XML映射配置文件 和 接口方法 间相互跳转
    • 根据接口方法生成 statement

statement就是映射文件里面的sql语句

  • 安装方式

    点击 file ,选择 settings ,就能看到如下图所示界面

    在这里插入图片描述

注意:安装完毕后需要重启IDEA

  • 插件效果
    在这里插入图片描述
    红色头绳的表示映射配置文件,蓝色头绳的表示mapper接口。在mapper接口点击红色头绳的小鸟图标会自动跳转到对应的映射配置文件,在映射配置文件中点击蓝色头绳的小鸟图标会自动跳转到对应的mapper接口。也可以在mapper接口中定义方法,自动生成映射配置文件中的 statement ,如图所示:
    在这里插入图片描述

配置文件完成增删改查

我们以如下的表作为例子:
在这里插入图片描述

核心思想套路:

  • 如何写对应的sql语句
  • 完成这个功能要不要参数
  • 完成之后返回什么样的结果

查询所有数据

步骤:
在这里插入图片描述

步骤详解:

编写接口方法

在这之前先要创建好映射文件,并且这个映射文件在resources文件夹中的位置,要跟java中的保持一致。并且最好映射文件的名字和接口名一样(不区分大小写),这样就可以不用在mybatis配置文件中重新定义映射文件路径(直接包扫描简化SQL映射文件的加载)。

接口方法:

public interface BrandMapper {
    List<Brand> selectAll();
}

在sql映射文件中编写SQL语句

直接运用插件的跳转来到sql映射文件中。

<?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="com.zyb.mapper.BrandMapper">


<!--    <select id="selectAll" resultType="com.zyb.mybatis.Brand">-->
<!--        select * from tb_brand;-->
<!--    </select>-->

<!--    解决有些值封装之后为null的情况-->


    <select id="selectAll" resultType="com.zyb.mybatis.Brand">
        select
             id, brand_name brandName, company_name companyName, ordered, description, status
        from
             mybatis.tb_brand;
    </select>
</mapper>

这个地方有几个注意点:

  • 如果想要在写sql语句的时候有提示。先要在设置中设置MySQL方言,再在右侧连接数据库
  • 在实体类属性名和数据库表列名不一样的时候,会出现不能自动封装数据的情况。

不能自动封装数据的三种解决办法
①起别名

<select id="selectAll" resultType="com.zyb.mybatis.Brand">
        select
             id, brand_name brandName, company_name companyName, ordered, description, status
        from
             mybatis.tb_brand;
    </select>

缺点:每次查询都要定义一次别名

②sql片段

    <!--sql片段-->

     <sql id="brand_column">
         id, brand_name as brandName, company_name as companyName, ordered, description, status
     </sql>

     <select id="selectAll" resultType="brand">
         select
             <include refid="brand_column" />
         from tb_brand;
     </select>

缺点:不灵活

③resultMap创建映射关系

resultMap:
1. 定义<resultMap>标签
2. 在<select>标签中,使用resultMap属性替换 resultType属性

    <!--
        id:唯一标识
        type:映射的类型,支持别名
    -->
    <resultMap id="brandResultMap" type="brand">
        <!--
            id:完成主键字段的映射
                column:表的列名
                property:实体类的属性名
            result:完成一般字段的映射
                column:表的列名
                property:实体类的属性名
        -->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>



    <select id="selectAll" resultMap="brandResultMap">
        select *
        from tb_brand;
    </select>

执行方法测试

public class Try1 {
    public static void main(String[] args) throws Exception {
        //获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";  //此处填写相对于resources的路径
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //用SqlSessionFactory对象制造SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

//        //用SqlSession对象来执行sql语句
//        List<User> users = sqlSession.selectList("test.selectAll");
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        List<Brand> brands = mapper.selectAll();

        for (Brand brand : brands) {
            System.out.print(brand.getId());
            System.out.print("  " + brand.getBrandName());
            System.out.print("  " + brand.getCompanyName() + "  ");
            System.out.print(brand.getOrdered());
            System.out.print("  " + brand.getDescription());
            System.out.println(brand.getStatus());
        }
        sqlSession.close();

    }
}

查询某一条数据

使用场景:接收一条id,将这条数据的详细信息返回。

步骤:
①编写接口方法

public interface BrandMapper {
    List<Brand> selectAll();

    Brand selectOne(int id);
}

②在sql映射文件中编写SQL语句

<?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="com.zyb.mapper.BrandMapper">


<!--    <select id="selectAll" resultType="com.zyb.mybatis.Brand">-->
<!--        select * from tb_brand;-->
<!--    </select>-->

<!--    解决有些值封装之后为null的情况-->

<!--    创建映射关系-->
    <resultMap id="brandResultMap" type="com.zyb.mybatis.Brand">
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>


    <select id="selectAll" resultType="com.zyb.mybatis.Brand">
        select
             id, brand_name brandName, company_name companyName, ordered, description, status
        from
             mybatis.tb_brand;
    </select>
    <select id="selectOne" resultMap="brandResultMap">
        select
            *
        from
            mybatis.tb_brand
        where
            id = #{id};

    </select>
</mapper>

此处我们要了解三个知识点:

参数占位符

mybatis提供了两种参数占位符:

  • #{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。

  • ${} :拼接SQL。底层使用的是 Statement,因为是直接替换,会存在SQL注入问题。

使用时机:

  • 参数传递,都是用#{}
  • 如果要对表名、列名进行动态设置,只能使用${}进行sql拼接

parameterType使用

对于有参数的mapper接口方法,我们在映射配置文件中应该配置 ParameterType 来指定参数类型。只不过该属性都可以省略。如下图:

<select id="selectById" parameterType="int" resultMap="brandResultMap">
    select *
    from tb_brand where id = ${id};
</select>

SQL语句中特殊字段处理

此问题不一定发生视情况而定

以后肯定会在SQL语句中写一下特殊字符,比如某一个字段大于某个值,如下图

在这里插入图片描述

可以看出报错了,因为映射配置文件是xml类型的问题,而 > < 等这些字符在xml中有特殊含义,所以此时我们需要将这些符号进行转义,可以使用以下两种方式进行转义

  • 转义字符(特殊字符较少时使用)

    下图的 &lt; 就是 < 的转义字符。

在这里插入图片描述

  • <![CDATA[内容]]>(特殊字符较多时使用)

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/122165.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!