目录
2.1 xxxMapper.xml在核心文件中的配置,有两种方式,推荐包的形式(就是把xxxMapper.xml全都下载这个包下面)
1、简介
1.1、什么是Mybatis
- MyBatis是一款优秀的持久层框架
- 它支持定制化SQL、存储过程以及高级映射。
- MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
- MyBatis 可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO (Plain Old JavaObjects,普通老式Java对象)为数据库中的记录。
- MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。
- 2013年11月迁移到Github。
1.1.2如何获得Mybatis?
Github : https://github.com/mybatis/mybatis-3
Mybatis入门必看文档: mmybatis – MyBatis 3 | 入门
1.2、持久层
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库(jdbc)io文件持久化
- 生活中:冷藏(吃的时候去解冻)
why? 持久化
- 有一些对象不能让他丢掉
- 内存太贵
1.3、持久层
Dao层,service层,Controller层
- 完成持久化工作的代码块
- 地层界线十分明显
1.4、为啥需要使用Mybatis?
- 帮助程序员将程序存入到数据库中
- 简化传统JDBC,简化框架和自动化
- 不用Mybais也可以,开发简单(Maven依赖+sql映射文件+xml配置文件)
- sql和代码分离,提高可 维护性
- 提供映射表前,支持对象数据库orm字段的关系映射
- 支持对象关系组件映射
- 提供xml标签,支持编写动态sql
2.mabatis 配置问题
2.1 xxxMapper.xml在核心文件中的配置,有两种方式,推荐包的形式(就是把xxxMapper.xml全都下载这个包下面)
2.2、sqlsession 的创建
综上所述:记得利用try catch 在 finally中 执行 sqlsession.close()
2.3 一些注意问题
2.4、使用Map
如果我们操作的数据库字段多,比较容易混淆,可以使用map 来实现 操作如下
// 万能的map 接口 public int addUser2(Map<String,Object> map);
//此时#{} 里面的内容就是 String 所代替的内容 赋值的时候设置好value值与其对应 value的类型与数据库中的 字段类型对应 <insert id="addUser2" parameterType="map"> insert into user(id,passwd) values(#{userId},#{password}) </insert>
@Test public void testMapAddUser(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); UserDaoMapper mapper = sqlSession.getMapper(UserDaoMapper.class); Map<String,Object> map =new HashMap<>(); map.put("userId",7); map.put("password",999999); int i = mapper.addUser2(map); System.out.println(i); sqlSession.commit(); sqlSession.close(); }
3.实现增删改查 crud
4.SqlMapConfig.xml核心配置文件
4.1 configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- Eenvironments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)包含(JDBC 和 MANAGED)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
注意:environments 标签内 可以配置多个环境 也就是数据库 需要哪一个只需要修改DEFAULT属性即可 。
4.2 类型别名
4.3 settings 配置
11.Mybatis核心配置文件之<settings></settings>_羊肉串学爪哇的博客-优快云博客
常用的
4.4映射器(mappers)
MapperRegistry 注册绑定我们的Mapper文件:
4.5生命周期和作用域
生命周期和作用域, 是至关重要的 因为措施的使用会导致严重的后果
SqlsessinFactoryBuilder
- 一旦创建了SqlsessinFactory 就不在需要了
- 局部便令
SqlsessinFactory
- 可以想象为数据库连接池
- SqlsessinFactory一旦被创建就应该在运行期间一直存在,没有理由丢弃他或者穿件另一个实例
- 因此SqlsessinFactory的最佳坐拥数是应用作用域
- 最简单的就是使用单例模式或者静态单例模式
Sqlsessin
- 连接到一个连接池的请求
- Sqlsessin的实力不是线程安全的,因此是不能被 共享的 最佳作用域是请求方法或作用域
- 用完之后需要关闭,否则资源被占用!!! sqlsession.colse() 十分重要的
5.解决属性名和字段名不一致的问题
数据库:
实体类:
查询的password 为null 说明字段名不匹配
解决办法:
- 起别名(能解决问题 但没有意义)
<select id="getUserById" resultType="com.qiku.pojo.User">
select id,username,passwd as password
from user where id=#{id}
</select>
-
resultMap 映射( column 是数据库中的字段 而property 是实体类中的字段 一样的其实可以不用映射比如 id 和name)
<resultMap id="UserMap" type="user"> <id column="id" property="id"></id> <result column="username" property="username"></result> <result column="passwd" property="password"></result> </resultMap> <select id="getUserById" resultMap="UserMap"> select * from user where id=#{id} </select>
6.日志
6.1 日志工厂(核心配置文件中配置)
如果一个数据库操作,出现了日常,日志就是最好的助手 以前用debug 现在就用日志工厂
<settings>
<!-- 日志工厂注意 大小写和 空格 任意出错都用不了-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>