MyBatis笔记——配置文件完成增删改查

l 完成品牌数据的增删改查操作

		§ 要完成的功能列表清单:□ 查询® 查询所有数据® 查看详情® 条件查询□ 添加□ 修改® 修改全部字段® 修改动态字段□ 删除® 删除一个® 批量删除准备环境:§ 数据库表tb_brand
drop table if exists tb_brand;CREATE TABLE tb_brand(-- id主键id 						int	PRIMARY KEY auto_increment,-- 品牌名称brand_name		varchar(20),-- 企业名称company_name 	varchar(20),-- 排序字段ordered				int,-- 描述信息description		varchar(100),-- 状态:0:禁用  1:启用status				int
);-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status) values
('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火',0),
('华为', '华为技术有限公司', 100, '华为致力于构建万物互联的智能世界',1),
('小米', '小米科技有限公司', 50, 'are you ok',1);select * from tb_brand;
		§ 实体类Brand§ 测试用例§ 安装MybatisX插件□ MybatisX是一款基于IDEA的快速开发插件,为效率而生。□ 主要功能:® XML和接口方法相互跳转® 根据接口方法生成statrment□ 安装:

在这里插入图片描述
接口:BrandMapper.java


import com.itheima.Pojo.Brand;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;public interface BrandMapper {/*** 查询所有* @return*/List<Brand> selectAll();/*** 查看详情:根据id查询*/Brand selectById(int id);//使用${}占位符时要加入注解
//    Brand selectById(@Param("id") int id);/****查询-多条件查询*  *参数接收*      1.散装参数:如果方法有多个参数,需要@Param("SQL参数占位符名称")*      2.Brand对象参数:对象的属性名称要和参数占位符名称一致*      3.map集合参数:map集合的键名称要和参数占位符名称保持一致** @param status* @param companyName* @param brandName* @return*///参数包含所有的查询条件//当存在多个参数时,方法有多个参数,需要@Param注解标注一下,参数需要传递给谁/*List<Brand> selectByCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);*///List<Brand> selectByCondition(Brand brand);List<Brand> selectByCondition(Map map);/*** 单条件动态查询* @param brand* @return*/List<Brand> selectByConditionSingle(Brand brand);/*** 添加*/void add(Brand brand);/*** 修改*/int update(Brand brand);/*** 根据id删除一行*/int deleteById(int id);/*** 根据id批量删除*/int deleteByIds(@Param("ids")int[] ids);
}
BrandMapper.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"><!--namespace:名称空间
-->
<mapper namespace="com.itheima.mapper.BrandMapper"><!--数据库表的字段名称  和  实体类的属性名称不一样,则不能自动封装*起别名:给不一样的列名起别名,让列名和实体类的属性名一样*缺点:每次查询都要定义一次别名*<使用sql片段可以解决>*缺点:不灵活*resultMap:1.定义<resultMap>标签2.<select>标签中,使用resultMap属性替换resultType--><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><!--根据id查看详情--><!--*参数占位符:1.#{}: 会将其替换成?2.${}: 拼sql,会存在sql注入问题3.使用时机*参数传递的时候:#{}*表名或者列名不固定的情况下:${}*参数类型:parameterType可以省略*特殊字符处理:1.转义字符(&lt;)转义"<"符号2.CDATA区--><select id="selectById" resultMap="brandResultMap">select *from tb_brand where id = #{id};</select><!--<select id="selectById" resultMap="brandResultMap">select *
&#45;&#45;         from tb_brand where id &lt; #{id};<![CDATA[<]]></select>--><!--查询-多条件查询--><!--<select id="selectByCondition" resultMap="brandResultMap">select *from tb_brandwhere status = #{status}and company_name like #{companyName}and brand_name like #{brandName};</select>--><!--动态条件查询,动态SQL*if 条件判断:*test:逻辑表达式*有个问题就是当第一个条件不成立并且后面条件成立时sql语句就变成了where后面加and xxx*解决方案:1.恒等式,在where后面加一个恒等式,并且在第一个条件的执行语句前加and2.<where>替换掉sql中的where关键字--><select id="selectByCondition" resultMap="brandResultMap">select *from tb_brand/*where 1 = 1*/<where><if test="status != null">and status = #{status}</if><if test="companyName != null and companyName != ''">and company_name like #{companyName}</if><if test="brandName != null and brandName != ''">and brand_name like #{brandName};</if></where></select><!--单条件动态查询--><select id="selectByConditionSingle" resultMap="brandResultMap">select *from tb_brandwhere<choose>    <!--相当于switch--><when test="status != null">/*相当于case*/status = #{status}</when><when test="companyName != null and companyName != ''">/*相当于case*/company_name like #{companyName}</when><when test="brandName != null and brandName != ''">/*相当于case*/brand_name like #{brandName}</when><otherwise> <!--相当于default-->1=1</otherwise></choose></select><!--添加--><insert id="add" useGeneratedKeys="true" keyProperty="id">insert into tb_brand(brand_name, company_name, ordered, description, status)value (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});</insert><!--修改--><!--<update id="update">update tb_brandset brand_name = #{brandName},company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status}where id = #{id};</update>--><!--动态修改--><update id="update">update tb_brand<set><if test="brandName != null and brandName != ''">brand_name = #{brandName},</if><if test="companyName != null and companyName != ''">company_name = #{companyName},</if><if test="ordered != null">ordered = #{ordered},</if><if test="description != null and description != ''">description = #{description},</if><if test="status != null">status = #{status}</if></set>where id = #{id};</update><!--删除一个--><delete id="deleteById">delete from tb_brand where id = #{id};</delete><!--批量删除--><delete id="deleteByIds">delete from tb_brand where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete><!--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>&lt;!&ndash;statement&ndash;&gt;<select id="selectAll" resultType="Brand">select *from tb_brand;</select>--></mapper>
测试代码:
import com.itheima.Pojo.Brand;
import com.itheima.mapper.BrandMapper;
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 org.junit.Test;import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MybatisTest {/*** 测试练习:查询所有数据** @throws Exception*/@Testpublic void testSelectAll() throws Exception {//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句List<Brand> brands = brandMapper.selectAll();System.out.println(brands);//5.释放资源sqlSession.close();}/*** 测试练习:查看详情,根据id查询** @throws Exception*/@Testpublic void testSelectById() throws Exception {//定义局部变量接收参数int id = 1;//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句Brand brand = brandMapper.selectById(id);System.out.println(brand);//5.释放资源sqlSession.close();}/*** 查询-多条件查询** @throws Exception*/@Testpublic void testSelectByCondition() throws Exception {//定义局部变量接收参数int status = 1;String companyName = "华为";String brandName = "华为";//处理参数//采用模糊查询需要对输入的参数进行处理companyName = "%" + companyName + "%";brandName = "%" + brandName + "%";//封装对象/*Brand brand = new Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);*///创建map集合,将map集合作为参数传入Map<Object, Object> map = new HashMap<Object, Object>();map.put("status", status);
//        map.put("companyName", companyName);
//        map.put("brandName", brandName);//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句//散装参数//List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);//Brand对象参数//List<Brand> brands = brandMapper.selectByCondition(brand);//Map集合参数List<Brand> brands = brandMapper.selectByCondition(map);System.out.println(brands);//5.释放资源sqlSession.close();}/*** 查询-单条件查询** @throws Exception*/@Testpublic void testSelectByConditionSingle() throws Exception {//定义局部变量接收参数int status = 1;String companyName = "华为";String brandName = "华为";//处理参数//采用模糊查询需要对输入的参数进行处理companyName = "%" + companyName + "%";brandName = "%" + brandName + "%";//封装对象Brand brand = new Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句//散装参数//List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);//Brand对象参数List<Brand> brands = brandMapper.selectByConditionSingle(brand);System.out.println(brands);//5.释放资源sqlSession.close();}/*** 添加** @throws Exception*/@Testpublic void testAdd() throws Exception {//定义局部变量接收参数int status = 1;String companyName = "香飘飘食品有限公司";String brandName = "香飘飘";int ordered = 100;String description = "一年销量绕地球三圈";//        //处理参数
//        //采用模糊查询需要对输入的参数进行处理
//        companyName = "%" + companyName + "%";
//        brandName = "%" + brandName + "%";//封装对象Brand brand = new Brand();brand.setBrandName(brandName);brand.setCompanyName(companyName);brand.setOrdered(ordered);brand.setDescription(description);brand.setStatus(status);//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession(true);//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句brandMapper.add(brand);Integer i = brand.getId();System.out.println(i);//提交事务
//       sqlSession.commit(true);//5.释放资源sqlSession.close();}/*** 修改** @throws Exception*/@Testpublic void testUpdate() throws Exception {//定义局部变量接收参数int id = 11;int status = 1;String companyName = "香飘飘食品有限公司";String brandName = "香飘飘";int ordered = 200;String description = "香飘飘超好喝,一年销量绕地球三圈";//        //处理参数
//        //采用模糊查询需要对输入的参数进行处理
//        companyName = "%" + companyName + "%";
//        brandName = "%" + brandName + "%";//封装对象Brand brand = new Brand();brand.setId(id);
//        brand.setBrandName(brandName);
//        brand.setCompanyName(companyName);brand.setOrdered(ordered);
//        brand.setDescription(description);
//        brand.setStatus(status);//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession(true);//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句int count = brandMapper.update(brand);System.out.println(count);//提交事务
//       sqlSession.commit(true);//5.释放资源sqlSession.close();}/*** 根据id删除** @throws Exception*/@Testpublic void testDeleteById() throws Exception {//定义局部变量接收参数int id = 11;//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession(true);//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句int count = brandMapper.deleteById(id);System.out.println(count);//提交事务
//       sqlSession.commit(true);//5.释放资源sqlSession.close();}/*** 根据id批量删除** @throws Exception*/@Testpublic void testDeleteByIds() throws Exception {//定义局部变量接收参数int[] ids = {1, 2};//1.加载mybatis核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,用它执行sqlSqlSession sqlSession = sqlSessionFactory.openSession(true);//3.获取接口代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法即执行sql语句int count = brandMapper.deleteByIds(ids);System.out.println(count);//提交事务
//       sqlSession.commit(true);//5.释放资源sqlSession.close();}
}

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

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

相关文章

web——Tomcat Maven插件及Servlet入门

• IDEA中使用Tomcat-Tomcat Maven插件 ○ Pom.xml添加Tomcat插件<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--&…

外架小横杆外露长度规范要求_安全文明施工规范

分类规范内容内外架安全1、扫地杆离地0.2米&#xff0c;立杆间距1.5米&#xff0c;外大横杆上下间距1米&#xff0c;内大横杆上下间距1.8米&#xff0c;步距1.8米2、立杆着落点不得悬空&#xff0c;垫块面积&#xff1e;240240mm3、外架和支模架不得连接、固定在一起4、外架操作…

java 邮件模板_Spring Boot 2发送邮件手把手图文教程

点击上方 IT牧场 &#xff0c;选择 置顶或者星标技术干货每日送达&#xff01;本文基于&#xff1a;Spring Boot 2.1.3&#xff0c;理论支持Spring Boot 2.x所有版本。最近有童鞋问到笔者如何用Spring Boot发送邮件&#xff0c;故而整理下Spring Boot发送邮件的各种姿势。说到邮…

Web——Request请求

•Request通用方式获取请求参数 ○ 请求参数获取方式&#xff1a; GET方式&#xff1a;□ String getQueryString() POST方式&#xff1a;□ BufferedReader getReader()○ 通用方式&#xff1a; Map<String, String[]> getParameterMap()//获取所有参数Map集合 String[]…

mfc点击按钮让对话框关闭_WinXP系统开始菜单中关机按钮消失的恢复教程

WinXP系统开始菜单里面的关机按钮不见了怎么办&#xff1f;最近有用户反映&#xff0c;打开WinXP系统的开始菜单准备关机时&#xff0c;却发现无法关机了&#xff0c;开始菜单里面没有关机按钮&#xff0c;这是怎么回事&#xff1f;本文就为大家介绍XP系统恢复开始菜单关机按钮…

马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前&#xff0c;S3 对象操作都是遵循 “最终一致性”原则&#xff0c;对象存储服务本身就是一个复杂的分布式系统&#xff0c;但对用户暴露简单的 API 服务接口&#xff0c;无限扩展存储大小&#xff0c;极…

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…

怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤

大侠好&#xff0c;欢迎来到FPGA技术江湖&#xff0c;江湖偌大&#xff0c;相见即是缘分。大侠可以关注FPGA技术江湖&#xff0c;在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源&#xff0c;或者一起煮酒言欢。今天和大侠简单聊聊使用LativeLink时&#xff0c;…

Spring笔记——数据源配置

常见的数据源&#xff08;连接池&#xff09;包括&#xff1a;DBCP、C3P0、BoneCP、Druid等接下来以C3P0为例讲述一下spring配置数据源的过程数据源的开发步骤 ①导入数据源的坐标和数据库驱动坐标 ②设置数据源的基本连接数据&#xff0c;将其放入jdbc.properties文件中 ③app…