一、了解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. Shortest Path(hdu5636)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  2. IntelliJ IDEA打war包

    1.按ctrl+alt+shift+s键打开Project Structure,点击+号图标,选择"Artifacts->Web Application Archive" 2 ...

  3. Sublime Text 3菜单栏隐藏后怎么显示

    Sublime Text 3如何显示菜单栏 今天在使用Sublime Text 3敲代码的时候不小心就把上侧的菜单栏隐藏了,自己鼓捣了半天才把菜单栏弄出来,下面我就给大家讲解一下我是如何操作的 键盘按 ...

  4. JMeter_事务控制器

    性能测试的结果统计时我们一定会关注TPS,TPS代表的是每秒事务数,每个事务对应的是我们的请求.虽然JMeter能够帮我们把每个请求统计成一个事务,但有时候我们希望把多个操作统计成一个事务,JMete ...

  5. 官方文档粗读 - Tutorial

    参考: https://www.jianshu.com/p/0d234e14b5d3 1.Connecting 我们通过 create_engine() 来链接数据库,假设我们我们采用SQLite. ...

  6. 一次性删除 .svn 文件夹

    方法一 (Windows 7; Python 3.5.2) import os for (p,d,f) in os.walk(r"G:\qycache\test"): if p.f ...

  7. navicat 找不到系统路径 【修改了系统路径中文名称引起的】

    这是我还没修改系统路径中文名称时的路径, 怎么办? 关闭当前用户连接 右键,选择连接属性 把那个改了即可

  8. 第10组 Alpha冲刺 (6/6)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14008187.html ·作业博客:https://edu.cnblogs.co ...

  9. Clickhouse的MergeTree表引擎存储结构

    MergeTree存储的文件结构 一张数据表被分成几个data part,每个data part对应文件系统中的一个目录.通过以下SQL可以查询data parts的信息. select table, ...

  10. 金融云原生漫谈(三)|银行云原生基础设施构建:裸金属VS虚拟机

    在金融行业数字化转型的驱动下,国有银行.股份制银行和各级商业银行也纷纷步入容器化的进程.   如果以容器云上生产为目标,那么整个容器云平台的设计.建设和优化对于银行来说是一个巨大的挑战.如何更好地利用 ...