MyBatisの標準構成
1.インポートジャーパッケージ
2. 作成 MyBatisのグローバル設定ファイル:MyBatisの-config.xmlが
3. 作成したSQLマッピングファイルインタフェースおよびマッパーのMyBatisのを
要件:
一貫性のあるSQLファイルインタフェースのフルクラス名と名前空間の値のマッピング。
ID値と一貫性のあるインターフェイスメソッド名のSQL文のSQLマッピングファイル。
注:DOはメソッドのオーバーロード・インターフェースを持っていません
4.書き込みテストコード
MyBatisのグローバル・コンフィギュレーション・ファイル[理解]
1.Properties
役割:ロードの特性プロファイル情報
2.Settingsラベル
処置:設定MyBatisのを設定するための設定項目に内部ラベルタグ、各タグ対応する複数の設定を提供することができます
3.typeAliases
エイリアスタイプのプロセッサ:エイリアスへのクラス
補足: MyBatisのは、参照データ型を学び、このような基本データ型Javaの基礎として、いくつかの型の別名が付属しています
4. typeHandlers
処置:データベースのデータ型の変換Javaデータ型
5.環境
処置:複数存在する環境で環境ラベル、それぞれの環境のタグを提供することができる MyBatisの動作環境を。
<環境デフォルト = 「開発」 > <!--1. 配置数据库连接信息 --> <environment id="development"> <!-- transactionManager:事务管理器 type:JDBC|MANAGED JDBC:支持事务 MANAGED:不支持事务 --> <transactionManager type="JDBC" /> <!-- dataSource:数据源 type:UNPOOLED|POOLED|JNDI UNPOOLED:每次使用重新打开或者关闭一个connection连接,不支持数据源,速度有点慢 POOLED:支持数据源,适合并发访问的项目 JNDI:过时的。 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}" /> <property name="url" value="${jdbc.jdbcUrl}" /> <property name="username" value="${jdbc.userName}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
6. databaseIdProvider
作用:为数据库厂商起别名
由于MyBatis支持多种数据库:Oracle、MySQL、SqlServler、Db2
在MyBatis全局配置文件中配置
Sql映射文件
7. Mappers
作用:加载Mapper接口或者SQL映射文件
SQL映射文件
注意点:
1.对于增删改标签,必须提交事务。提交事务的两种方式: 1.1.手动提交:openSession.commit() 1.2.自动提交:sqlSessionFactory.openSession(true); 2.只有select必须指定返回值类型,所有标签的parameterType都可以省略。
往数据表中添加数据的时候获取自增逐渐
要求:
1.接口方法的参数必须是一个pojo对象 2.在insert标签设置两个属性: useGenerateKeys=true,keyProperty=“pojo对象属性”
Sql片段
作用:可以做sql语句重用
MyBatis支持基于注解的sql语句
@Select(value="select * from book where bid = #{bid}") public Book selectOne(int bid); @Insert(value="insert into book(bname,author,price,type) values(#{bname},#{author},#{price},#{type});") public void insert(Book book); @Delete(value="DELETE FROM book WHERE bid=#{bid}") public void delete(int bid);
如何在sql映射文件中取mapper接口中的参数
1.一个普通参数
#{随便写}
2.多个普通参数
#{param注解的value值}
方式一:
方式二:
输出:
3.参数是一个pojo对象
#{pojo对象的属性名}
4.是一个map对象
#{map中键值对的key}
输出:
5.参数是一个List、Collection
#{list[下标]}或者#{collection[下标]}
输出:
6.参数是一个数组
#{array[下标]}
7.复杂参数
输出:
各种各样的返回值类型
#{}与${}的区别【面试】
#{}:采用占位符?,以预编译的方式设置参数的,类似于javaweb部分的preparestatement对象,SQL安全的,不存在sql注入问题。 ${}:直接将参数设置到sql语句中,类似于javaweb部分的statement对象,存在SQL注入问题。 在有些特殊情况下,我们必须使用${}.例如:表名、like模糊查询、排序字段。
ResultMap标签
当数据表的列名和pojo对象的属性名不一致的时候,如何将表的列名映射到pojo对象属性上?
1.起别名
2.mapUnderScoreToCamelCase=true
3.ResultMap标签
ResultMap作用说明:
- 字段映射
- 将表的关联关系直接映射为pojo对象的关联关系【resultType属性不具备的功能】