Mybatis入门2

本文章是下面文章的扩充 

Mybatis入门-CSDN博客文章浏览阅读432次,点赞6次,收藏10次。Mapper接口创建在java代码块中//dao层/*** 功能:查询所有用户数据* @return*/https://blog.csdn.net/luosuss/article/details/138420052

映射配置文件

insert标签:编写insert语句

update标签:编写update语句

delete标签:编写delete语句

select标签:编写select语句      

select标签

属性:

属性名说明是否必须
id这条sql语句的唯一标识,和接口的方法名一致
parameterType入参类型
resultType/resultMap返回值类型

 注意:resultType/resultMap只能存在一个

案例:查询id=1的user的信息

在Mapper中书写方法

public interface UserMapper {/*** 功能:查询所有用户数据* @return*/public List<user1>  findAllUser();/*** 返回id=id的用户信息* @param id 要查询的用户id* @return*/public user1 findUserById(int id);}

在映射文件中添加select标签

<!--利用username把当前映射文件与Mapper接口关联-->
<mapper namespace="com.hhh.dao.UserMapper"><!--编写sql查询语句--><select id="findAllUser" resultType="user1">/*返回的结果封装到user1对象*/select id, name, sex, address from user1</select><select id="findUserById" parameterType="_int"(可以不写) resultType="user1">select id, name, sex, addressfrom user1where id = #{id}  //拿到方法传入的值</select>
</mapper>

测试:
 

 @Testpublic void testFindUserById() throws IOException {//配置核心文件路径String resource="mybatis-config.xml";//基于配置文件路径,创建字节输入流对象InputStream asStream = Resources.getResourceAsStream(resource);//创建工厂类对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);//获取一个SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//利用SqlSession创建一个代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);user1 user = userMapper.findUserById(1);System.out.println(user);}

结果:

insert标签

        属性:

属性说明是否必须
id这条sql语句的唯一标识,和接口的方法名一致

 在Mapper接口中添加方法:

/*** 添加用户* @param user:用户对象* @return 返回受影响的行数*/public int addUser(user1 user);

映射文件:

<!--编写插入语句--><insert id="addUser">insert into user1 (name, sex, address)VALUE (#{name},#{sex},#{address});</insert>

 测试:

  @Testpublic void testAddUser() throws IOException {//配置核心文件路径String resource="mybatis-config.xml";//基于核心文件路径,生成字节输入流对象InputStream asStream = Resources.getResourceAsStream(resource);//创建工厂类对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);//获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//我们也可以把手动提交变成自动提交事务//  SqlSession sqlSession1 = sqlSessionFactory.openSession(true);//创建一个代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//调用方法int i = userMapper.addUser(new user1(null, "象可", "男", "河南"));//注意在mybatis中,事务是手动提交的if(i>0){sqlSession.commit();System.out.println("插入数据成功");}sqlSession.close();}

注意:

在Mybatis中,事务是手动提交的,也可以设置事务为自动提交 

SqlSession sqlSession1 = sqlSSessionFactory.openSession(true);

        update标签

    属性:

属性说明是否必须
id这条sql语句的唯一标识,和接口的方法名一致

 Mapper接口

 /*** 修改用户信息* @param user 用户对象* @return 返回受改变的行数*/public int updateUser(user1 user);

映射文件

 <update id="updateUser">update user1set name=#{name},sex=#{sex},address=#{address}where id=#{id}</update>

测试

   @Testpublic void testUpdateUser() throws IOException {//配置核心文件路径String resource="mybatis-config.xml";//基于核心配置文件路径,生成字节输入流对象InputStream asStream = Resources.getResourceAsStream(resource);//创建工厂类SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);//获取一个对象SqlSession sqlSession = sqlSessionFactory.openSession(true);//设置为自动提交事务//获取代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);user1 user = userMapper.findUserById(1);//根据id查询用户信息user.setName("莱奥");user.setSex("男");user.setAddress("黑龙江");int i = userMapper.updateUser(user);//修改if(i>0){System.out.println("修改成功");}sqlSession.close();}

        delete标签   

  属性:

属性说明是否必须
id这条sql语句的唯一标识,和接口的方法名一致

Mapper接口

 /*** 删除用户通过id* @param id 要删除的用户id* @return 返回受影响的行数*/public int deleteUser(int id);

 映射文件

    <delete id="deleteUser">delete from user1 where id=#{id}</delete>

测试

 @Testpublic void testDeleteUser() throws IOException {//配置核心文件路径String resource="mybatis-config.xml";//基于核心配置文件路径,生成字节输入流对象InputStream asStream = Resources.getResourceAsStream(resource);//创建工厂类SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);//获取一个对象SqlSession sqlSession = sqlSessionFactory.openSession();//获取代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.deleteUser(5);if(i>0){sqlSession.commit();//提交事务System.out.println("删除成功");}sqlSession.close();}

Mybatis工具类的编写

通过上面的代码,我们发现有很多代码是重复的,所以上面可以下一个工具类

//工具类:私有化构造方法和静态代码块
public class MybatisUtil {private MybatisUtil() {}private static SqlSessionFactory sqlSessionFactory = null;static//静态代码块只能访问静态的成员变量{//随着类的加载,只会加载一次InputStream asStream = null;try {asStream = Resources.getResourceAsStream("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);} catch (IOException e) {throw new RuntimeException(e);}}//静态方法:返回一个SqlSession对象public static SqlSession openSession() {return sqlSessionFactory.openSession();//默认是手动事务}public static SqlSession openSession(boolean flag) {return sqlSessionFactory.openSession(flag);//true为自动提交事务}//静态方法:关闭SqlSessionpublic static void closeSqlSession(SqlSession s) {if (s != null) {s.close();}}
}

测试:
 

 @Testpublic void testMybatisUtil(){//直接通过工具类获取SqlSeeion对象SqlSession sqlSession = MybatisUtil.openSession();//获取代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);user1 user = userMapper.findUserById(1);System.out.println(user);//user1{id=1, name='莱奥', sex='男', address='黑龙江'}//关闭sqlSession对象MybatisUtil.closeSqlSession(sqlSession);}

方法传递的参数有两个该怎么办

例如:
 

public int updateUserByName(String name,String address);

方法:使用 Param注解,@Param("key")的方法来绑定一个参数名字(在映射文件中使用)

 public int updateUserByName(@Param("sname") String name,@Param("saddress") String address);

反射文件

<update id="updateUserByName">update user1set  address=#{saddress}where name=#{sname};</update>

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

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

相关文章

【Python可视化】pyecharts

Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#xff0c;pyecharts 诞生了。 需要安…

使用PyTorch从头实现Transformer

前言 本文使用Pytorch从头实现Transformer&#xff0c;原论文Attention is all you need paper&#xff0c;最佳解读博客&#xff0c;学习视频GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文&#xff0c;并对其进行了…

node.js中path模块-路径处理,语法讲解

node中的path 模块是node.js的基础语法&#xff0c;实际开发中&#xff0c;我们通过使用 path 模块来得到绝对路径&#xff0c;避免因为相对路径带来的找不到资源的问题。 具体来说&#xff1a;Node.js 执行 JS 代码时&#xff0c;代码中的路径都是以终端所在文件夹出发查找相…

基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的滑雪场管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

搜好货API接口:快速获取商品列表的利器

搜好货商品列表API接口允许开发者根据关键字搜索并获取相关的商品列表数据。接口支持多种参数配置&#xff0c;可以根据需求灵活调整搜索条件和结果返回格式。 点击获取key和secret API接口请求说明 请求地址&#xff1a;https://api.souhaohuo.com/goods/search请求方法&…

速卖通关键字搜索API接口:快速获取商品列表的利器

速卖通关键字搜索API接口允许开发者根据用户输入的关键字进行商品搜索&#xff0c;并返回与之相关的商品列表。通过调用该接口&#xff0c;您可以快速获取与关键字匹配的商品信息&#xff0c;包括商品标题、价格、图片等&#xff0c;为您的电商业务提供有力支持。 三、API接口…

以信息挖掘为关键技术的智慧校园建设

随着信息技术的快速发展&#xff0c;数据信息资源以井喷的姿态涌现。数据信息的大量涌现给人们带来丰富的数据信息资源&#xff0c;但面对海量的信息资源时&#xff0c;加大了人们对有效信息资源获取的难度&#xff0c;数据挖掘技术正是这一背景下的产物&#xff0c;基于数据挖…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

C语言之详细讲解文件操作(抓住文件操作的奥秘)

什么是文件 与普通文件载体不同&#xff0c;文件是以硬盘为载体存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名&#xff0c;用于指示文件类型&#xff08;例如&#xff0c;图片文件常常以KPEG格式保存并且文件…

一文了解复杂度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、算法效率二、时间复杂度1.定义2.大O的渐进表示法3.一般常见复杂度4.实例 三、空间复杂度1.定义2.空间复杂度计算3.实例 总结 前言 计算复杂性理论&#xf…

Redis的持久化方法,各自优缺点,怎么选择?

持久化&#xff1a; redis基于内存是数据库&#xff0c;内容存到内存中&#xff0c;也可以存到硬盘中&#xff0c;这个过程就叫持久化。有两种方案&#xff0c;RDB和AOP两种。 RDB RDB持久化就是把当前进程数据生成快照保存到硬盘的过程RDB文件是⼀个压缩的二进制文件&#…

VisualGLM-6B微调(V100)

Visualglm-6b-CSDN博客文章浏览阅读1.3k次。【官方教程】XrayGLM微调实践&#xff0c;&#xff08;加强后的GPT-3.5&#xff09;能力媲美4.0&#xff0c;无次数限制。_visualglm-6bhttps://blog.csdn.net/u012193416/article/details/131074962?ops_request_misc%257B%2522req…

【经典论文阅读1】FM模型——搜推算法里的瑞士军刀

全文由『说文科技』原创出品&#xff0c;文章同步更新于公众号『说文科技』。版权所有&#xff0c;翻版必究。 FM模型发表于2010年&#xff0c;它灵活好用且易部署。作者行文极其流畅&#xff0c;作者首先对要处理的问题进行介绍&#xff0c;接着作者提出FM模型&#xff0c;这…

Vue单页面应用和多页面应用的区别

概念&#xff1a; SPA单页面应用&#xff08;SinglePage Web Application&#xff09;&#xff0c;指只有一个主页面的应用&#xff0c;一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面&#xff0c;对每一个功能模块组件化。单页应用跳转&#xff0c;就是切换…

笔试强训-day17_T2 十字爆破

一、题目链接 十字爆破 二、题目描述 牛牛在玩一个游戏&#xff1a; 一共有n行m列共nm个方格&#xff0c;每个方格中有一个整数。 牛牛选择一个方格&#xff0c;可以得到和这个方格同行、同列的所有数之和的得分。 例如&#xff1a;对于一个22的方格&#xff1a; 1 2 3 4 牛牛…

Python字符串常用方法(全网最细,仅此一份)

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 👉Python从入门到精通 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python180G全栈视频教程以及Python相关电子书合集 😊私信未回可以加V:hacker0327 备注P…

文心一言 VS 讯飞星火 VS chatgpt (251)-- 算法导论18.2 4题

四、假设关键字 {1&#xff0c;2&#xff0c;…&#xff0c;n} 被插入一棵最小度数为 2 的空 B 树中&#xff0c;那么最终的B树有多少个结点&#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; B树&#xff08;B-tree&#xff09;是一种自平衡的树&…

商务分析方法与工具(一):Python的趣味快捷-运算符、表达式与内置对象

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

结构体介绍(1)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 结构体&#xff08;1&#xff09; 前言一、struct介绍结构体声明结构体创建和初始化struct 的特殊声明结构体自引用 二、结构体内存对齐2.1.对齐规则 总结 前言 结构体 属于…