写在前面:
记录自己的MyBatis学习之旅,若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
由于MyBatis快速入门操作里已经详细阐述了怎么进行查询操作,所以这里不再赘述。但对测试代码做一优化,减少冗余性,代码如图
3.4.2 插入操作 3.4.2.1 配置映射文件在UserMapper映射文件中加入插入语句,如下:
3.4.2.2 测试inseert into user values(#{id},#{name},#{password})
在测试类中编写测试代码,如下:
// 插入操作
@Test
public void test2() {
User user = new User();
user.setName("tom");
user.setPassword("456");
sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("userMapper.save",user);
// 注意 Mybatis默认事务是不自动提交的,需要手动来进行提交操作,不然插入数据无效
sqlSession.commit();
sqlSession.close();
}
其中,Mybatis默认事务是不自动提交的,需要手动来进行提交操作,不然插入数据无效
通过查询数据库User表可发现插入成功,如图
- 插入语句用insert标签
- 在映射文件中使用parameterType属性指定要插入的数据类型
- SQL语句中年使用#{实体属性名}方式引入实体中的属性值
- 插入操作使用的API是sqlSession.insert(“mapper命名空间.id”,实体对象)
- 插入操作涉及数据库数据变化,所以要使用SQLSession对象显示提交的事务,即sqlSession.commit()
同样操作,代码如下:
3.4.3.2 编写测试类update user set name = #{name},password = #{password} where id = #{id}
同样操作,代码如下:
public void test3() {
User user = new User();
user.setId(1001);
user.setName("Jerry");
user.setPassword("456");
sqlSession = sqlSessionFactory.openSession();
sqlSession.update("userMapper.update",user);
sqlSession.commit();
sqlSession.close();
}
修改之前数据库表如图
修改后如图
- 修改操作update标签
- 修改操作使用的API是SqlSession.update(“mapper命名空间.id”,实体对象)
- 涉及数据库数据变化,所以要使用SQLSession对象显示提交的事务
同样操作,代码如下:
3.4.4.2 编写测试类delete from user where id = #{id}
同样操作,代码如下:
// 删除操作
public void test4() {
sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("userMapper.delete",1002);
sqlSession.commit();
sqlSession.close();
}
修改之前数据库表如图
修改后如图
- 修改操作delete标签
- 修改操作使用的API是SqlSession.delete(“mapper命名空间.id”,Object)
- 涉及数据库数据变化,所以要使用SQLSession对象显示提交的事务
库厂商表识 - mappers 映射器
核心配置文件中的标签如下所示
- configuration配置
- properties属性
- settings 设置
- typeAliases 类型别名
- typeaHandlers 类型处理器
- ObjectFactory 对象工厂
- plugins 插件
- environments环境
- environment环境变量
- transactionManager事务管理器
- dataSource数据源
- environment环境变量
- databaseIdProvider 数据库厂商表识
- mappers 映射器
数据库环境配置,支持多环境配置
其中:事务管理器(transactionManager)类型有两种方式:
- JDBC:这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域
- MANAGED:这个配置几乎没做什么,它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE的服务器的上下文)。默认情况下它会自动关闭连接,然而一些容器并不希望这样,所以需要将closeConnection属性设置为false来阻止它默认的关闭行为。
数据源(dataSource)也有两种方式:
- UNPOOLED,这个数据源的实现只是每次被请求时打开和关闭连接。
- POOLED,这种数据源的实现利用“池”的概念将JDBC连接对象组织起来。
- JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置以个JNDI上下文的引用。
该标签的作用是加载映射,主要有以下几种方式:
- 使用相对于类路径的引用,例如:
- 使用完全限定资源定位符(URL),例如:
- 使用映射器接口实现类的完全限定类名,例如:
- 将包内的映射器接口实现全部注册为映射器,例如:
目前来时主要用第一种,后三种主要了解即可!
实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件。
类型别名是Java类型设置一个短的名字。
原来类型名称配置如下:
使用typeAliases,为com.demo.entuty.User定义别名为User,如下:
另外,MyBatis已经默提供了一些变量的别名,如下表所示
| 数据类型 | 别名 |
|---|---|
| String | string |
| Integer | int |
| Long | long |
| Boolean | boolean |
| Double | double |



