Mybatis系列1-Mybatis介绍和配置

Mybatis前身是iBatis,本质是一种半自动的ORM框架,除了POJO和映射关系之外,还需要编写SQL语句。

1.mybatis样例

(1)配置文件mybatis-config.xml

<configuration>
	<properties resource="db.properties" />
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true" />
	</settings>
	<!--配置environment环境 -->
	<environments default="development">
		<!-- 环境配置1,每个SqlSessionFactory对应一个环境 -->
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="UNPOOLED">
				<property name="driver" value="${jdbc_driver}" />
				<property name="url" value="${jdbc_url}" />
				<property name="username" value="${jdbc_username}" />
				<property name="password" value="${jdbc_password}" />
			</dataSource>
		</environment>
	</environments>
<!-- 映射文件,mapper的配置文件 -->
<!-- 	<mappers>
		直接映射到相应的mapper文件
		<mapper resource="sqlmapper/TUserMapper.xml" />
	</mappers> -->
	<mappers>
		<mapper class="com.aaa.mybatis.mapper.TUserMapper" />
	</mappers>
</configuration>  

(2)TUserMapper接口

    public interface TUserMapper {
    TUser selectByPrimaryKey(Integer id);
}

(3)TUserMapper.xml文件

<mapper namespace="com.aaa.mybatis.mapper.TUserMapper">

	<select id="selectByPrimaryKey" resultType="com.aaa.mybatis.entity.TUser"	parameterType="java.lang.Integer">
		select
			id, 
			user_name , 
			real_name , 
			sex, 
			mobile, 
			email, 
			note,
			position_id positionId
		from t_user
		where id = #{id,jdbcType=INTEGER}
	</select>

</mapper>

(4)实体类TUser
和普通实体类没有区别
(5)执行查询

		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		// 1.读取mybatis配置文件创SqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 2.获取sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 3.获取对应mapper
		TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);
		// 4.执行查询语句并返回结果
		TUser user = mapper.selectByPrimaryKey(1);

2.mybatis核心类

上述我们执行查询的时候,用到了类,这里介绍下。

  • SqlSessionFactoryBuilder:读取配置信息创建SqlSessionFactory,方法级别生命周期
  • SqlSessionFactory:创建Sqlsession,工厂单例模式,存在于程序的整个生命周期
  • SqlSession:代表一次数据库连接,线程不安全,方法级
  • SQL Mapper:由Java接口和XML文件组成,包含了要执行的SQL语句和结果集映射规则。方法级别生命周期

3.mybatis配置

(1) properties
引用外部properties
(2) settings
设置全局配置

  • cacheEnabled:所有映射器中配置的缓存的全局开关
  • lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态
  • aggressiveLazyLoading:当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载
  • multipleResultSetsEnabled:是否允许单一语句返回多结果集
  • useColumnLabel:使用列标签代替列名
  • useGeneratedKeys:允许JDBC支持自动生成主键
  • autoMappingBehavior:指定MyBatis如何自动映射列到字段或属性。 NONE表示取消自动映射;PARTIAL(默认)只会自动映射没有定义嵌套结果集映射的结果集。 FULL会自动映射任意复杂的结果集
  • defaultExecutorType:配置默认的执行器。SIMPLE就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH执行器将重用语句并执行批量更新。
  • defaultStatementTimeout:超时时间
  • safeRowBoundsEnabled:允许在嵌套语句中使用分页
  • mapUnderscoreToCamelCase:是否开启自动驼峰命名规则映射
  • localCacheScope:本地缓存机制防止循环引用和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据。
  • lazyLoadTriggerMethods:指定哪个对象的方法触发一次延迟加载
  • callSettersOnNulls:指定当结果集中值为null的时候是否调用映射对象的set方法
  • logPrefix:指定 MyBatis 增加到日志名称的前缀
  • logImpl:指定 MyBatis 所用日志的具体实现
  • proxyFactory:指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。

(3)typeAliases
Java类型别名,映射时方便使用。分为系统定义别名和自定义别名。
(4)typeHandlers
用于jdbcType与javaType之间的转换
(5)ObjectFactory
每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建
(6)plugins
插件
(7)environments
用于配置多个数据源,每个数据源分为数据库源和事务的配置。

  • environment:配置数据源,属性id是它的唯一标识
  • transactionManager:配置数据库事务,type属性有三种,(采用jdbc的方式管理事务),managed(采用容器的方式管理事务,JNDI数据源中使用),自定义
  • dataSource :配置数据源连接,type属性是有四种,UNPOOLED (非连接池方式连接),POOLED(使用连接池连接),JNDI (使用JNDI数据源),自定义数据源

(8)mappers
配置引入映射器的方法。可以使用相对于类路径的资源引用、或完全限定资源定位符或类名和包名等等

4.mapper配置

(1)select

  • id:和Mapper的命名空间namespace组合起来是唯一的
  • parameterType:传入参数的类型,基本数据类型(int , String , long , date),
    复杂数据类型(类 、Map)
  • resultType:SQL语句返回类型,如果是类,用类的的完全限定名或别名。如果是集合,用集合包含的类型,不能用集合本身。和resultMap不能同时使用
  • resultMap:外部resultMap的命名引用。和resultType不能同时使用
  • flushCache:在调用SQL后是否清空之前查询的本地缓存和二级缓存
  • useCache:启动二级缓存开关
  • timeout:超时时间
  • fetchSize:获取记录的总条数设定

(2)resultMap

  • id:当前命名空间中的一个唯一标识,用于标识一个resultMap
  • type:类的完全限定名, 或者别名.
  • autoMapping:如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性 autoMappingBehavior
  • constructor:实例化类时,用到构造方法。idArg - ID (标记出作为 ID 的结果)arg (构造方法参数)
  • result : 注入到字段普通结果
  • association :一个复杂类型的关联,可以指定为一个resultMap元素
  • collection :一个复杂类型的集合,可以指定为一个resultMap元素
  • discriminator :使用结果值来决定使用哪个resultMap
  • statementType:STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED

(3)insert、update、delete
这里只说明和select不同的。

  • useGeneratedKeys:仅对 insert 和 update 有用,自动生成主键
  • keyProperty:仅对 insert 和 update 有用。唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表
  • keyColumn:仅对 insert 和 update 有用,通过生成的键值设置表中的列名,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表

(4)selectKey

  • keyProperty:selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表
  • keyColumn:匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表
  • resultType:结果的类型
  • order:这可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty 然后执行插入语句。如果设置为AFTER,那么先执行插入语句,然后是selectKey元素

(5)SQL
sql语句的参数可以写#{},将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,能够很大程度防止sql注入。${}:传入的数据直接显示生成在sql中,无法防止sql注入

  • if:单条件分支判断
  • choose、when、otherwise:多条件分支判断,相当于case when
  • foreach:循环语句
  • Trim、where、set:辅助判断
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值