09 mybatis 注解

products.sql


create table products
(
    product_id       int auto_increment comment '产品ID'
        primary key,
    product_name     varchar(100)   null comment '产品名称',
    brand            varchar(50)    null comment '品牌',
    price            decimal(10, 2) null comment '价格',
    color            varchar(20)    null comment '颜色',
    storage_capacity varchar(10)    null comment '存储容量',
    description      text           null comment '描述'
)
    comment '手机产品表';

pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aistat</groupId>
    <artifactId>mybatis_tech</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--打包类型-->
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--所有依赖-->
    <dependencies>

<!--        MySQL驱动-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.31</version>
        </dependency>

<!--        mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.15</version>
        </dependency>

        <!--测试环境-->

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.14.8</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

</project>

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>

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <typeAliases>
        <package name="com.aistart.tech.pojo"/>
    </typeAliases>

<!--    <typeAliases>-->
<!--        <typeAlias alias="Products" type="com.aistart.tech.pojo.Products"/>-->

<!--    </typeAliases>-->
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
                <property name="poolMaximumActiveConnections" value="1"/>
            </dataSource>
        </environment>

        <environment id="testdevelopment">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>

        <mapper class="com.aistart.tech.mapper.ProductsMapper"/>
        <!--        <mapper resource="com/aistart/tech/mapper/ProductsMapper.xml"></mapper>-->
    </mappers>
</configuration>

ProductsMapper.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="com.aistart.tech.mapper.ProductsMapper">
    <sql id="all">
        product_id, product_name, brand, price, color, storage_capacity, description
    </sql>

    <resultMap id="selectOneMap" type="com.aistart.tech.dto.PhoneDto">
        <result column="product_name" property="name"></result>
        <result column="price" property="jg"></result>
    </resultMap>

    <sql id="select">
        select <include refid="all"></include> from products
        where
    </sql>

    <!--
    一个标签中resultmap和resultType只能存在一个
    用到了resultmap就写resultmap


    -->


    <select id="selectOneMap" resultMap="selectOneMap">
        <include refid="select"></include>
         product_id = 1;
    </select>

    <select id="selectOneByNameAndPrice" resultType="Products">

        <include refid="select"></include>
        product_name = #{productName}
        and
        price > #{price}

    </select>


    <!--调用    sqlSession.selectOne("com.aistart.tech.mapper.ProductsMapper.selectOne",products)-->

    <!--id作为这个sql的唯一id,调用也是通过它-->
    <insert id="insertOne" parameterType="Products" >

        <selectKey keyProperty="productId" keyColumn="product_id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into products (product_name,color,price)
        values (#{productName},#{color},#{price})
    </insert>

    <delete id="deleteOneById">
        delete from products where product_id = #{askdksad}
    </delete>

    <update id="updateProductName" parameterType="Products">
        update products set product_name = #{productName} where product_id = #{productId}
    </update>

    <select id="selectOneById" parameterType="int" resultType="com.aistart.tech.pojo.Products">

        /*
        参数名一个时虽然可以随便写,但是不推荐

        */
        select
        <include refid="all"></include>
        from products where product_id = #{productId}

        /*默认调用了get函数,利用反射,根据get+param()的形式找函数并且执行*/

    </select>


    <!--

    JDBC>>>>sql>>>>resultSet>>>获取列并遍历>>>>>>

    -->
    <select id="selectAll" resultType="com.aistart.tech.pojo.Products">
        select
        <include refid="all"></include>
        from products
    </select>

    <select id="selectOneBynName" resultType="Products">
        <include refid="select"></include>
        product_name = #{name}
    </select>
</mapper>

Products.java


package com.aistart.tech.pojo;


import lombok.*;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Products {
  private Integer productId;
  private String productName;
  private String brand;
  private Double price;
  private String color;
  private String storageCapacity;
  private String description;

}

PhoneDto.java


package com.aistart.tech.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;



@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhoneDto {

    private String name;
    private Double jg;
}

ProductsMapper.java


package com.aistart.tech.mapper;

import com.aistart.tech.dto.PhoneDto;
import com.aistart.tech.pojo.Products;
import org.apache.ibatis.annotations.*;

public interface ProductsMapper {


    /*
    * 三种传参数方式
    *
    * 1.直接对象传参
    * 2.map传参
    * 3.参数传参
    *        a.单一传值,不用在乎变量名
    *        b.多值时,必须指明参数
    *
    *
    * */
    public int insertOne(Products products);

    public Products selectOneById(int num);


    /**
     * todo:
     *  重要字段:  id(函数名)  传入类型(参数)  返回类型(返回类型)
     *           sql语句 select标签 @Select   sql语句("")
     *
     *
     *
     * 跟之前用mapper语法一致,传参数有以下几个条件
     * 1.单一值时,随便,自动匹配
     * 2.多参数时
     *       a.多个参数@Param("映射的#{}中的`字段")
     *       b.对象/map,注意映射字段名
     * @param name(mapper中的paramType)
     * @return (resultType)
     */
    @Select("select * from products where product_name = #{name}")
    public Products selectOneByName(String name);

    //在参数前指定映射
//    @Select("select product_name from products where product_name = #{productName} and price > #{price}")
    public Products selectOneByNameAndPrice(@Param("productName") String productName,@Param("price") double price);

    @Results({
            @Result(property = "name", column = "product_name"),
            @Result(property = "jg", column = "price")
    }
    )
    @Select("select product_name,price from products where product_name = #{productName}")
    public PhoneDto selectDtoByName(@Param("productName") String productName);

    /*
    * <select id = "selectDtoByName" paramType ="String" resultType = "PhoneDto" >

    *       select product_name from products where product_name = #{productName}
    *
    * </select>
    * */
}

DButil.java


package com.aistart.tech.utils;

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;


public class DButil {

    private static SqlSessionFactory sqlSessionFactory = null;
    //测试环境下的工厂
    private static SqlSessionFactory sqlSessionFactoryTest = null;

    static {
        //1.builder  一旦创建了 SqlSessionFactory,就不再需要它了
//        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =

        //2.获取工厂

        // 获取资源 org.apache.ibatis.io.Resources;
        try {

            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //根据资源文件创建工厂
            sqlSessionFactory  = new SqlSessionFactoryBuilder().build(inputStream);

            //测试环境的创建工厂
//            sqlSessionFactoryTest  = new SqlSessionFactoryBuilder().build(inputStream,"testdevelopment");

        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }

    public static SqlSession getSqlSession(){

        //获得Sqlsession
        return sqlSessionFactory.openSession();

    }

    public static void close(SqlSession session){

        session.close();

    }


}

ProductsMapperTest


package com.aistart.tech.mapper;

import com.aistart.tech.pojo.Products;
import com.aistart.tech.utils.DButil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import static org.junit.Assert.*;

public class ProductsMapperTest {



    @Test
    public void selectOneById() {

        //0.获取sqlSession

        SqlSession sqlSession = null;

        try {
            sqlSession = DButil.getSqlSession();

//            Object selectOne = sqlSession.selectOne("com.aistart.tech.mapper.ProductsMapper", 1);

            // 1.获取mapper

            //传参是class类型

            /*
             * 1.mapper和Java中Mapper接口的全限定名高度保持一致
             * 2.mapper.xml中id和函数名高度保持一致
             * 3.mapper接口名和Mapper.xml文件名应该高度一致
             * 4.别查看config中mappers的路径
             *
             * */
            ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);

            Products products = mapper.selectOneById(2);

            System.out.println(products);

        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            sqlSession.close();
        }



    }

    @Test
    public void selectOneByNameAndPrice() {

        //0.获取sqlSession

        SqlSession sqlSession = null;

        try {
            sqlSession = DButil.getSqlSession();

//            Object selectOne = sqlSession.selectOne("com.aistart.tech.mapper.ProductsMapper", 1);

            // 1.获取mapper

            //传参是class类型

            /*
             * 1.mapper和Java中Mapper接口的全限定名高度保持一致
             * 2.mapper.xml中id和函数名高度保持一致
             * 3.mapper接口名和Mapper.xml文件名应该高度一致
             * 4.别查看config中mappers的路径
             *
             * */
            ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);

            Products products = mapper.selectOneByNameAndPrice("小米",0);

            System.out.println(products);

        }catch (Exception e){
            e.printStackTrace();
        }




    }

    @Test
    public void selectOneByName() {


        SqlSession sqlSession = DButil.getSqlSession();

        ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);

        System.out.println(mapper.selectOneByName("小米"));

        sqlSession.close();


    }

    @Test
    public void selectDtoByName() {

        SqlSession sqlSession = DButil.getSqlSession();


        ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);

        System.out.println(mapper.selectDtoByName("小米"));
        sqlSession.close();
    }
}

相关推荐

  1. 09 mybatis 注解

    2024-03-27 06:42:03       36 阅读
  2. MyBatis --- 常用注解

    2024-03-27 06:42:03       55 阅读
  3. Spring boot注解开发mybatis

    2024-03-27 06:42:03       35 阅读
  4. mybatis快速入门-注解

    2024-03-27 06:42:03       39 阅读
  5. Mybatis SQL注解使用场景

    2024-03-27 06:42:03       20 阅读
  6. Mybatis-plus常用注解

    2024-03-27 06:42:03       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 06:42:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 06:42:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 06:42:03       87 阅读
  4. Python语言-面向对象

    2024-03-27 06:42:03       96 阅读

热门阅读

  1. PgMP考试费用是多少?收费标准详细解析!

    2024-03-27 06:42:03       106 阅读
  2. 1969. 数组元素的最小非零乘积

    2024-03-27 06:42:03       43 阅读
  3. QT学习之UDP

    2024-03-27 06:42:03       43 阅读
  4. spring缓存通用配置

    2024-03-27 06:42:03       44 阅读
  5. sqlite删除数据表

    2024-03-27 06:42:03       40 阅读
  6. GPT大语言模型助力R语言开展数据统计分析

    2024-03-27 06:42:03       28 阅读
  7. torchvision.datasets.ImageFolder

    2024-03-27 06:42:03       38 阅读
  8. 在虚拟机CentOs_7_64环境中安装Docker和Docker-Compose

    2024-03-27 06:42:03       38 阅读
  9. 如何利用nginx在Centos上搭建文件服务器

    2024-03-27 06:42:03       42 阅读
  10. pytorch | tensor转换为float

    2024-03-27 06:42:03       36 阅读