09 mybatis 注解

文章目录

    • products.sql
    • pom.xml
    • mybatis-config.xml
    • ProductsMapper.xml
    • Products.java
    • PhoneDto.java
    • ProductsMapper.java
    • DButil.java
    • ProductsMapperTest

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 configurationPUBLIC "-//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 mapperPUBLIC "-//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 productswhere</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}andprice > #{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(){//获得Sqlsessionreturn 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 {@Testpublic void selectOneById() {//0.获取sqlSessionSqlSession 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();}}@Testpublic void selectOneByNameAndPrice() {//0.获取sqlSessionSqlSession 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();}}@Testpublic void selectOneByName() {SqlSession sqlSession = DButil.getSqlSession();ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);System.out.println(mapper.selectOneByName("小米"));sqlSession.close();}@Testpublic void selectDtoByName() {SqlSession sqlSession = DButil.getSqlSession();ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);System.out.println(mapper.selectDtoByName("小米"));sqlSession.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java_17 两数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任…

Day35 ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

● 860.柠檬水找零 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:fiveten0for bill in bills:if bill5:five1elif bill10:five-1ten1elif bill20 and ten!0:five-1ten-1else:five-3if five<0:return Falsereturn True ● 406.根据身高重建队列 cl…

光伏百科|分布式光伏电站如何开展运维管理工作?

随着经济的不断发展和生活水平的日益提高&#xff0c;节能环保已经成为全社会的责任和共识&#xff0c;分布式光伏电站作为清洁能源走进了千家万户。然而&#xff0c;在分布式光伏电站运行期间&#xff0c;面临监管困难、系统繁多、火灾隐患和运维不当等困难&#xff0c;该如何…

EasyExcel Converter实现java对象和excel单元格转换

在EasyExcel中&#xff0c;Converter接口用于定义如何在Java对象和Excel单元格之间进行转换。 也就是说EasyExcel可以根据数据库中的值来填充Excel中对应的文本内容。 比如数据库1,2,3可以填充到excel中&#xff1a;男&#xff0c;女&#xff0c;其他 使用easyExcel的之前&a…

推特社交机器人分类

机器人有不同的种类。 cresci-17数据集中的三种不同的机器人类:传统垃圾机器人、社交垃圾机器人和假追随者。 传统的垃圾邮件机器人会生成大量推广产品的内容&#xff0c;并且可以通过频繁使用的形容词来检测; 社交垃圾邮件倾向于攻击或支持政治候选人&#xff0c;因此情绪是一…

leetcode每日一题 2580 统计将重复区间合并成组的方案数

给你一个二维整数数组 ranges &#xff0c;其中 ranges[i] [starti, endi] 表示 starti 到 endi 之间&#xff08;包括二者&#xff09;的所有整数都包含在第 i 个区间中。 你需要将 ranges 分成 两个 组&#xff08;可以为空&#xff09;&#xff0c;满足&#xff1a; 每个区…

变位词,java代码实现

需求 需求&#xff1a;检查两个词是否是“变为词”&#xff08;变位词&#xff1a;两个词是有相同的字母不同的排序组成&#xff0c;例如&#xff1a;earth和heart&#xff0c;python和typhon&#xff09;输入&#xff1a;两个单词输出&#xff1a;0或者1&#xff0c;0&#x…

通俗易懂:描述MySQL中SET和ENUM数据类型的异同。

MySQL中的SET和ENUM数据类型均用于限制字段可接受的值范围&#xff0c;但它们的设计用途和功能特性有所不同&#xff1a; SET类型 - SET是一种集合类型&#xff0c;它可以存储一组预定义的离散值&#xff0c;并且在一个SET字段中可以同时存储多个值。 - SET字段内的值是互斥的…

ES5和ES6的深拷贝问题

深拷贝我们知道是引用值的一个问题&#xff0c;因为在拷贝的时候&#xff0c;拷贝的是在内存中同一个引用。所以当其中的一个应用值发生改变的时候&#xff0c;其他的同一个引用值也会发生变化。那么针对于这种情况&#xff0c;我们需要进行深度拷贝&#xff0c;这样就可以做到…

高效篇02-如何选择适合自己的工作/如何选择offer

前言 你有没有遇到以下3个问题。 1、对当前工作不满意&#xff0c;但是好像不知道具体哪里不满意。 2、有想要换工作的想法&#xff0c;但是不知道该换一个什么样的工作。 3、已经在找工作了&#xff0c;说不定手上也有几份 offer 了&#xff0c;但是不知道该如何选择。 在这篇…

Spring是如何解决循环依赖问题的?

目录 问题介绍什么是Spring中的三级缓存?Spring中的三级缓存是如何解决循环依赖问题的?解决Spring循环依赖问题一定需要第三级缓存吗?解决Spring循环依赖问题一定需要第二级缓存吗?什么场景下的Spring循环依赖问题无法解决?采用了构造器的注入方式相互依赖的bean都是原型b…

读3dsr代码②训练

train_dada 首先初始化权重 def weights_init(m):classname m.__class__.__name__if classname.find(Conv) ! -1:m.weight.data.normal_(0.0, 0.02)elif classname.find(BatchNorm) ! -1:m.weight.data.normal_(1.0, 0.02)m.bias.data.fill_(0)他的训练数据是imagenet的rgb&…

代码随想录算法训练营DAY7| C++哈希表Part.2|LeetCode:454.四数相加II、383.赎金信、15. 三数之和、18.四数之和

文章目录 454.四数相加II思路C代码 383.赎金信C 代码 15. 三数之和排序哈希法思路C代码 排序双指针法思路去重C代码 18.四数之和前言剪枝C代码 454.四数相加II 力扣题目链接 文章链接&#xff1a;454.四数相加II 视频链接&#xff1a;学透哈希表&#xff0c;map使用有技巧&…

工业物联网关的应用及相关产品-天拓四方

随着科技的飞速发展&#xff0c;智能制造业已成为工业领域的转型方向。在这一转变中&#xff0c;工业物联网关发挥着至关重要的作用。作为连接物理世界与数字世界的桥梁&#xff0c;工业物联网关不仅实现了设备与设备、设备与云平台之间的互联互通&#xff0c;更通过实时数据采…

0.96寸OLED屏调试 ----(四)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 继续我们OLED模块的熟悉 &#xff1a; 指令详解 基础指令 1.设置对比度 &#xff08;81HA[7:0]&#xff09;  …

贵金属投资热:为何投资者纷纷涌入黄金、白银市场

在当今复杂多变的市场中&#xff0c;贵金属投资热度居高不下&#xff0c;尤其以黄金、白银为代表的贵金属。那这背后的原因到底是什么呢&#xff0c;跟随金田金业的脚步&#xff0c;我们来一探究竟。 贵金属投资之所以备受瞩目&#xff0c;首先源于其独特的避险属性。在全球经济…

兼顾陪读|本科学历律师自费赴美国加州大学伯克利分校访学

S律师拟陪同孩子赴海外就读&#xff0c;决定以访问学者身份&#xff0c;申请美国J类签证出国以兼顾陪读。因本科学历&#xff0c;无文章且有地域要求&#xff0c;自己申请无果后做了全权委托。为此我们酌情制定了三条申请策略&#xff0c;最终落实加州大学伯克利分校的访学职位…

AI大模型学习——AI领域技术发展

目录 前言 一、AI大模型学习的理论基础 二、AI大模型的训练与优化 三、AI大模型在特定领域的应用 四、AI大模型学习的伦理与社会影响 五、未来发展趋势与挑战 总结 前言 在当前技术环境下&#xff0c;AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力&#xff…

鸿蒙打包so及引用

一、打包so 1. 环境&#xff0c;DevEco Studio3.1 2. 创建c工程 创建完成后&#xff0c;如下图&#xff1a; 3. 打包so 先配置 然后 二、引用so 1. 新建普工项目 2. 在src同一层级下创建libs文件夹&#xff0c;将so文件拷入 3. 将c工程中的侧接口文件及声明文件复制到项目…

手术室智慧管理平台

手术室智慧管理平台 所属领域 数字化手术室智慧管理平台处于医疗信息化和医疗智能化领域的交叉点上。它不仅涉及医疗信息系统的建设和管理&#xff0c;更是医疗智能化的典型应用之一。在医疗信息化方面&#xff0c;该平台利用先进的信息技术和数据管理手段&#xff0c;实现对手…