目录
sql配置语法
insert:
<insert id="saveUser" parameterType="com.czy.mvc.model.dict.User">
-- 获取insert后数据id,keyProperty是javabean的属性 keyColumn是数据库表字段名 order="AFTER"表示执行sql语句之后执行这个
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into sys_user(code,emp_code,name)values(#{code},#{emp_code},#{name})
</insert>
update:
delete:
select:循环、模糊查询
select * from sys_user
<where>
<if test="name !=null">
and name like #{name}
</if>
<if test="ids !=null and ids.size()>0">
<foreach collection="ids" open="and id in(" close=")" separator="," index="id">
#{id}
</foreach>
</if>
</where>
resultMap:
<resultMap id="abc" type="com.czy.mvc.model.dict.User">
<id property="id" column="id"/>
<result property="code" column="code"/>
</resultMap>
注解:
别名:
springboot:yml配置:
mybatis:
type-aliases-package: com.czy.springTest1.mvc.model
mybatis配置
<typeAliases>
<!--<typeAlias type="com.czy.mvc.model.dict.User" alias="user"/>-->
<package name="com.czy.mvc.model"/>
</typeAliases>
指定dao(mapper)所在位置:
mybatis:
<mappers>
<!-- <mapper class="com.czy.mvc.dao.IUserDao"/>-->
<!-- <mapper resource="com/czy/mvc/dao/IUserDao.xml"/>-->
<!-- <mapper resource="com/czy/mvc/dao/MyIUserDao.xml"/>-->
<package name="com.czy.mvc.dao"/>
</mappers>
springboot yml
mybatis:
type-aliases-package: com.czy.springTest1.mvc.model
# configuration:
# mapUnderscoreToCamelCase: true # 开启驼峰命名转换法
config-location: classpath:mybatis/MybatisConfig.xml
mapper-locations: classpath:mybatis/mapper/*.xml
# mapper-locations: com.czy.springTest1.mvc.dao
驼峰命名
yml:
mybatis:
configuration:
map-underscore-to-camel-case: true
springboot配置类:
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new ConfigurationCustomizer(){
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
mybatis:
延时加载
<settings>
<!-- 启用延迟加载特性,不配置默认关闭该特性-->
<setting name="lazyLoadingEnabled" value="true"></setting>
<!-- 按需加载: false:使用关联属性,及时加载; true,加载对象,则加载所有属性, -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
延迟加载和按需加载都要开启,不然不会延迟加载。
延迟加载通常是用在一对多的场景:一对多
注解:
一级缓存
一级缓存不需要配置,自动开启。
一级缓存是sqlsession对象的缓存,执行查询时会把结果存入sqlsession中,下次查询会先从sqlsession缓存取。
当sqlsession对象消失,一级缓存就消失了。
调用sqlsession的修改、添加、删除、commit()、close()等方法时,会清空一级缓存。
sqlSession.clearCache();也可以清空缓存
二级缓存
在SqlSessionFactory对象的缓存,使用二级缓存需要三个地方配置
- 主配置文件:
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
- mapper:
<mapper >
<cache/>
- select方法:
<select id="findAll01" resultType="user" useCache="true">
注解:
SpringBoot中默认帮我们全局开启了二级缓存,只需要在mapper上注明。
@CacheNamespace
public interface EmployeeMapper
一对一
<resultMap id="userMap" type="user">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<association property="user" column="id">
<id column="id" property="id"/>
<result column="username" property="username"/>
</association>
</resultMap>
注解:
一对多
<resultMap id="userMap" type="user">
<id column="id" property="Id"></id>
<result column="name" property="Name"></result>
<result column="remark" property="Remark"></result>
<collection property="user" javaType="user" column="id" select="com.czy.mvc.dao.IUserDao.findById"></collection>
</resultMap>
注解: