学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作
一、了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题]
(1)SqlSessionFactoryBuilder
[ 作用:仅仅是用来创建SqlSessionFactory,作用域:方法作用域(局部变量) ]
(2)SqlSessionFactory(类似连接池)
[ 生命周期:一旦被创建就应该在应用的运行期间一直存在,作用域:应用作用域变量(使 用单例模式/静态单例模式) ]
(3)SqlSession(类似连接对象)
[ 特点:非线程安全,不能共享,作用域:请求或方法作用域(局部变量) ]
二、抽取MyBatis工具类[用来创建Sqlsession]
✿ 在理解myBatis的作用域和生命周期基础上,抽取MyBatis工具类:
public class MyBatisUtil {
//创建一个sqlSessionFactory对象【应用对象(静态单例模式)】
private static SqlSessionFactory factory = null;
static {
try {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
//返回sqlSession对象
public static SqlSession getSession() {
return factory.openSession();
}
}
通过factory.openSession() 默认是不提交事务的方式,当修改了对象的属性之后,发现数据库的表的记录的列值没有改变----因为默认是不提交事务,需要
手动提交事务://手动提交事务
session.commit();
三、mybatis执行增删改查操作:
1、mybatis的映射文件[UserMapper.xml] 编写增删改查sql
【 把sql存放到insert|update|delete|select 元素中去】
<mapper namespace="com.shan.hello.UserMapper">
<!-- 保存操作 -->
<insert id="insert">
insert into t_user (name, salary) values (#{name}, #{salary});
</insert>
<!-- 保存操作,并设置返回自动生成的主键【useGeneratedKeys、keyProperty】
useGeneratedKeys:是否需要返回自动生成的主键 keyProperty:把自动生成的主键设置到对象的哪个属性(OID)
-->
<insert id="keyInsert" useGeneratedKeys="true" keyProperty="id">
insert into t_user (name, salary) values (#{name}, #{salary});
</insert>
<!-- 删除操作 -->
<delete id="delete">
delete from t_user where id = #{id};
</delete>
<!-- 更改操作 -->
<update id="update">
update t_user set name = #{name}, salary = #{salary} where id = #{aid};
</update>
<!-- 查询操作 -->
<select id="get" parameterType="java.lang.Long" resultType="com.shan.hello.User">
select * from t_user where id = #{id}
</select>
<select id="getList" parameterType="java.lang.Long" resultType="com.shan.hello.User">
select * from t_user;
</select>
</mapper>
2、测试mybatis的增删改查:
/* 测试查询 */
@Test
public void testGetList3() {
//jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
try(SqlSession session = MyBatisUtil.getSession();){
//4、进行数据库操作(CRUD)
User user = session.selectOne("com.shan.hello.UserMapper.get", 2L);
}
}
/* 测试更改 */
@Test
public void testUpdate() {
User user = new User();
user.setId(4L);
user.setName("好贱");
user.setSalary(new BigDecimal(100));
//jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
try(SqlSession session = MyBatisUtil.getSession();){
//4、进行数据库操作(CRUD)
int rows = session.update("com.shan.hello.UserMapper.update", user);
session.commit();
}
}
/* 测试删除 */
@Test
public void testDelete() {
//jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
try(SqlSession session = MyBatisUtil.getSession();){
//4、进行数据库操作(CRUD)
int rows = session.delete("com.shan.hello.UserMapper.delete", 4L);
session.commit();
}
}
/* 测试保存 */
@Test
public void testInsert() {
User user = new User();
user.setName("就是贱");
user.setSalary(new BigDecimal(1));
//jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
try(SqlSession session = MyBatisUtil.getSession();){
//4、进行数据库操作(CRUD)
int rows = session.insert("com.shan.hello.UserMapper.insert", user);
session.commit();
System.out.println(user);
}
}
/* 测试保存(获取自动生成的主键) */
@Test
public void testKeyInsert() {
User user = new User();
user.setName("贱");
user.setSalary(new BigDecimal(1));
//jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
try(SqlSession session = MyBatisUtil.getSession();){
//4、进行数据库操作(CRUD)
int rows = session.insert("com.shan.hello.UserMapper.keyInsert", user);
session.commit();
System.out.println(user);
}
}
✿ 获取主键的作用
---注册时,一次性填写过多信息,不友好,分成两次填写呗【获取主键,将其传递给第二个填写注册信息界面】
学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作的更多相关文章
- MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...
- MyBatis批量增删改查操作
前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...
- mybatis中的增删改查操作
在这一个部分,主要进行增删改查的示例书写. 增删改查可以基于xml的,也可以基于注解的方式. 一:对单条数据的查询 1.目录结构 这个使得目录更加清晰 2.User.java 这个使用以前的user表 ...
- 【Mybatis】mybatis开启Log4j日志、增删改查操作
Mybatis日志(最常用的Log4j) 官方网站http://www.mybatis.org/mybatis-3/zh/logging.html 1.在src目录下创建一个log4j.propert ...
- Mybatis学习(二) - CRUD操作(增删改查操作)
直接上例子: 1.项目结构: 2.具体代码及配置 User.java package com.mybatis.bean; public class User { private int id; pri ...
- Mybatis select、insert、update、delete 增删改查操作
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简单的XML ...
- Mybatis之增删改查操作
准备工作 建立整体项目目录 新建一个java工程,创建如下工程目录 其中com.kang.pojo中存放pojo类,com.kang.test中存放测试类. 源码目录config中存放Mybatis的 ...
- MyBatis的增删改查操作
搭建好mybatis之后 进行对数据库的操作 添加语句 在映射文件中添加语句 insert into student(name,age,score) values(#{name},#{age},#{s ...
- MyBatis对数据库的增删改查操作,简单演示样例
之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...
随机推荐
- 【LeetCode】859. Buddy Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
- 从零搭建react hooks项目(github有源代码)
前言 首先这是一个react17的项目,包含项目中常用的路由.状态管理.less及全局变量配置.UI等等一系列的功能,开箱即用,是为了以后启动项目方便,特地做的基础框架,在这里分享出来. 这里写一下背 ...
- [炼丹术]YOLOv5目标检测学习总结
Yolov5目标检测训练模型学习总结 一.YOLOv5介绍 YOLOv5是一系列在 COCO 数据集上预训练的对象检测架构和模型,代表Ultralytics 对未来视觉 AI 方法的开源研究,结合了在 ...
- 【优雅代码】04-1行代码完成多线程,别再写runnable了
[优雅代码]04-1行代码完成多线程,别再写runnable了 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮 ...
- .NET6 微服务——CI/CD(1):搭建Jenkins并实现自动构建
CI/CD 它的意思是 持续集成/持续部署,这也不是新概念.那些八股文就不写了,说话的方式简单点:如果成功搭建CI/CD环境,当你需要迭代线上程序时,只需通过git提交代码就可以,其他什么都不用做.是 ...
- 日志分析系统 - k8s部署ElasticSearch集群
K8s部署ElasticSearch集群 1.前提准备工作 1.1 创建elastic的命名空间 namespace编排文件如下: elastic.namespace.yaml --- apiVers ...
- Oracle的dbf文件迁移
1.背景说明 在Oracle数据库中插入了1.5亿条数据, 并且创建了主键索引, 又插入了1.5亿条数据到另外一张表, 导致数据库表空间暴涨到28G, 由于根目录下只有50G的空间, 数据库文件所在磁 ...
- CSS基础-4 定位
CSS定位和浮动 css定位:改变页面的位置 定位机制有以下三种 普通流 浮动 绝对布局 定位的属性: position:把元素放在一个静态的.相对的.绝对的.或固定的位置中 top ...
- Docker_镜像(image)使用(3)
查找docker镜像 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 我们也可以使用 docker search 命令 ...
- Java 递归 常见24道题目 总结
1.N个台阶的走法递归[这里设为10个台阶] /** * N个台阶的走法递归 * <p> * 有个楼梯,台阶有10个,每次可以跳上1阶 或者 2阶 ,那么台阶的走法一共有多少种 */ @T ...