核心基础
MyBaits获取参数的两种方法
#{ }和${ }方式
在平常状态下兼顾安全性和开发效率,通常使用#{ }方法获取参数
极少的情况下使用${ }的方式,例如动态获取表名,依据字段排序等。
增删改查标签
属性 | 用途 |
---|---|
id | namespace中标签的唯一标识 |
parameterType | 指定执行SQL语句时所需参数的全限定类名或别名 |
resultType | 指定SQL语句执行后返回值的全限定类名或别名 |
resultMap | 表示外部resultMap的命名引用。请注意,resultMap和resultType不能同时使用 |
flushCache | 指定是否需要清空MyBatis本地缓存和二级缓存 |
useCache | 设置二级缓存的开启和关闭 |
id | 命名空间中标签的唯一标识 |
---|---|
parameterType | 指定执行SQL语句时所需参数的全限定类名或别名 |
keyProperty | 指定POJO类的某个属性接收自动生成的主键 |
useGeneratedKeys | 表示执行添加记录之后是否获取到数据库自动生成的主键 |
MyBaits全局配置文件
configuration(配置)
properties(属性) 引入外部properties文件对项目进行动态配置,例如数据库文件db.properties
settings(设置)极为重要的被指
配置 | 作用 | 可选配置 | 默认配置 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭缓存 | true | false | true |
lazyLoadingEnabled | 全局性地开启或关闭延迟加载 | true | false | false |
aggressiveLazyLoading | 延迟加载和按需加载的开关 | true | false | false |
useGeneratedKeys | 允许JDBC支持自动生成主键 | true | false | false |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射 | true | false | false |
defaultStatementTimeout | 设置数据库响应的超时时间 | 任意值 | 无 |
typeAliases(类型别名)多用于为java类型设置简短的名字,从而减少全限定类名的冗余 typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置)标签常用于配置数据源。在
MyBaits关键API
在MyBatis应用层开发中涉及到两个核心接口SqlSessionFactory和SqlSession及其实现类
- SqlSessionFactoryBuilder的主要作用就是通过build( )方法创建SqlSessionFactory。
- SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其核心作用就是创建SqlSession。SqlSessionFactory一旦被创建就应伴随应用程序的运行而长期一直存在,我们没有任何理由对它进行清除或重建,多次重建 SqlSessionFactory被视为一种代码“坏味道(bad smell)”。为避免资源的浪费和过度开销,在项目中最好使用单例模式创建和获取SqlSessionFactory。SqlSessionFactory使用openSession( )方法创建SqlSession实例.
- SqlSession是MyBatis框架中极其重要的接口。SqlSession类似于JDBC中的Connection,它代表MyBatis和数据库的一次会话,主要用于执行持久化操作。SqlSession对象底层封装了JDBC连接,所以可以直接使用SqlSession对象执行已映射的SQL语句。SqlSession中包含了所有执行SQL语句的方法、提交或回滚事务的方法、获取映射器实例的方法。SqlSession不是线程安全的,每个线程都应有一个属于自己的SqlSession实例并且该实例不能够被共享。在使用SqlSession执行相关操作后应将其关闭,释放资源。
标签
<select id="queryUserWithIf" resultType="User">
select * from user where 1=1
<if test="username!=null and username!=''">
and username =#{username}
</if>
<if test="password!= null and password!= ''">
and password =#{password}
</if>
</select>
1.例如上面这个例子如果username或password属性其输入属性满足test中的条件,则不会进行该语句的执行
2."and" username =#{username}
标签
在
通常情况下,
- 如果
满足条件,那么 标签将自动添加where关键字并自动删除查询条件中最前方多余的and或or关键字 - 如果
不满足条件,那么 标签失效而且不添加and或or关键字 - 如果没有where子句则不生成where关键字
<select id="queryUserWithWhere" resultType="User">
select * from user
<where>
<if test="username!=null and username!=''">
and username =#{username}
</if>
<if test="password!= null and password!= ''">
and password =#{password}
</if>
</where>
</select>