MyBatis学习笔记
mybatis主配置文件
<settings>
<!--默认使用LOG4J输出日志-->
<setting name="logImpl" value="LOG4J"/>
<!-- 自动将以下划线方式命名的数据库列映射到Java对象的驼峰是明明属性中 -->
<setting name="mapUnderscoreToCameCase" value="true" />
</settings>
说明:
logImpl
:配置LOG4J
输出日志。mapUnderscoreToCameCase
:自动将以下划线方式命名的数据库列映射到Java对象的驼峰是明明属性中。
说明:
typeAliases
配置别名。
1.1 可以指定某个包下package
1.2 亦可以指定某个实体类typeAlias
。
说明:
environments
的default
属性引用environment
的id
属性。
1.1id
是当前使用的环境。
1.2 可以配置多个environment
以备使用,比如oracle
,sql server
,mysql
。
mybatis映射文件
<mapper namespace="">
</mapper>
说明:
- 命名级别:
1.1 包级别:namespace
属性中除最后
一个类名。例如:com.chromer.mapper.CountryMapper
中com.chromer.mapper
为包级别。在log4j.properties中log4j.logger后面添加这个包名。
1.2 类级别:就是namespace
属性值,就是类名。
1.3 方法级别:使用namespace
的属性值+标签的id
属性值。
mybatis分页
?
不允许在关键字前后进行数学运算。
需要在java代码中计算好再传到mapper.xml
中。
比如:
int pageSize = 2;// 页码大小。
int pageNumber = 2;// 一页的记录数。
Map<String, Object> map = new HashMap<>();
map.put("pageSize", pageSize);
map.put("pageStart", pageSize * (pageNumber) - 1); // pageStart:每一页的第一条记录数。
在mapper.xml
中:
<select id="page" resultType="map" parameterType="peo">
select * from people limit #{pageStart}, #{pageSize}
</select>
查询select
不叫事务,增insert
删delete
改update
才叫事务。
所以查询不需要提交事务session.commit()
,而增删改需要提交事务。
使用注解的形式加载接口中的方法时:
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sessionFactory.getConfiguration().addMapper(RoleMapper.class);
SqlSession session = sessionFactory.openSession();
RoleMapper roleMapper = session.getMapper(RoleMapper.class);
需要加上:
sessionFactory.getConfiguration().addMapper(RoleMapper.class);
否则报错:
org.apache.ibatis.binding.BindingException: Type interface com.ronybo.inter.RoleMapper is not known to the MapperRegistry.
还没有评论,来说两句吧...