一、了解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执行增删改查操作的更多相关文章

  1. MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...

  2. MyBatis批量增删改查操作

      前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...

  3. mybatis中的增删改查操作

    在这一个部分,主要进行增删改查的示例书写. 增删改查可以基于xml的,也可以基于注解的方式. 一:对单条数据的查询 1.目录结构 这个使得目录更加清晰 2.User.java 这个使用以前的user表 ...

  4. 【Mybatis】mybatis开启Log4j日志、增删改查操作

    Mybatis日志(最常用的Log4j) 官方网站http://www.mybatis.org/mybatis-3/zh/logging.html 1.在src目录下创建一个log4j.propert ...

  5. Mybatis学习(二) - CRUD操作(增删改查操作)

    直接上例子: 1.项目结构: 2.具体代码及配置 User.java package com.mybatis.bean; public class User { private int id; pri ...

  6. Mybatis select、insert、update、delete 增删改查操作

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简单的XML ...

  7. Mybatis之增删改查操作

    准备工作 建立整体项目目录 新建一个java工程,创建如下工程目录 其中com.kang.pojo中存放pojo类,com.kang.test中存放测试类. 源码目录config中存放Mybatis的 ...

  8. MyBatis的增删改查操作

    搭建好mybatis之后 进行对数据库的操作 添加语句 在映射文件中添加语句 insert into student(name,age,score) values(#{name},#{age},#{s ...

  9. MyBatis对数据库的增删改查操作,简单演示样例

    之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...

随机推荐

  1. iOS提交AppStore审核时:提示有其他支付并隐藏功能被拒的处理办法

    背景提示:数字类产品(比如购买会员等不需要配送实物的商品),Apple规定必须使用苹果IAP应用内支付,给Apple分成30%.打包的时候不要勾选微信或支付宝等其他支付方式.如果你提交的包里包含了微信 ...

  2. 物联网大赛 - Android学习笔记(二)Andriod 应用界面编程

    学习目标: Android的程序界面和View组件 View组件和ViewGroup组件 常见的布局管理器 文本框组件TextView和EditView 按钮组件Button 和ImageButton ...

  3. 关于linux的一点好奇心(一):linux启动过程

    一直很好奇,操作系统是如何工作的?我们知道平时编程,是如何让代码跑起来的,但那些都是比较高层次的东西.越往后,你会越觉得,像是空中楼阁,或者说只是有人帮你铺平了许多道理,而你却对此一无所知. 1. 操 ...

  4. Kafka版本介绍Version2.4.0

    1.说明 Kafka的版本从0.11.0.X到1.0.X, 再到2.0.X大版本, 其实没有经过几个版本, 只是版本号变化较大. 2.最新发布版本 截止本文章2020年2月22号发布时, Kafka ...

  5. Kylin启动步骤

    Kylin本身的启动命令比较简单, 但是由于Kylin依赖的其他组件比较多, 所以把完整的启动步骤整理一下. 1.确保集群时间同步 首先查看集群中的时间是否同步 date 如果时间不一致,需要使用如下 ...

  6. CSS基础 阴影相关属性设置

    一.字体阴影属性名:text-shadow:水平偏移量 垂直偏移量 模糊度 阴影颜色: html代码: <div>农夫山泉有点甜</div>css代码: div{ font-s ...

  7. 【Spring专场】「IOC容器」不看源码就带你认识核心流程以及运作原理

    这是史上最全面的Spring的核心流程以及运作原理的分析指南 [Spring核心专题]「IOC容器篇」不看繁琐的源码就带你浏览Spring的核心流程以及运作原理 [Spring核心专题]「AOP容器篇 ...

  8. unittest_TestSuite测试套件(2)

    在前面一章中演示了unittest如何执行一个简单的测试,但有两个问题: 我们知道测试用例的执行顺序是根据测试用例名称顺序执行的,在不改变用例名称的情况下,我们怎么来控制用例执行的顺序呢? 一个测试文 ...

  9. JMeter_用户自定义变量

    在实际测试过程中,我们经常会碰到脚本开发时与测试执行时的服务地址不一样的情况,为了方便,我们会把访问地址参数化,当访问地址变化了,我们只需要把参数对应的值改动一下就可以了. 一.添加用户自定义变量元件 ...

  10. [ SQLAlchemy ] 自我引用型的多对多关系(Self-Referential Many-to-Many Relationship)理解

    参考: https://www.jianshu.com/p/2c6c76f94b88 https://madmalls.com/blog/post/followers-and-followeds/ 实 ...