記事のディレクトリ
Mybatisの基本(7)
ログ(Log4j)
- jarパッケージを構成します。
- log4j-1.2.17.jar
- ログを有効にする:conf.xmlを構成します
<settings>
<!-- 开启日志,并指定所使用的是什么日志 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 其他日志有:SLF4J、Log4j 2等等 -->
</settings>
- 構成ログ出力ファイルを書き込みます。
- ファイルを作成します:log4j.properties(固定書き込み)
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org,apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
日志级别, 输出设备(stdout为控制台)
日志显示方式
日志显示方式为平铺方式
日志显示方式为平铺方式的格式
遅延読み込み
クエリ結果情報に複数の部分がある場合は、1つの部分のみを使用する必要があります(他の部分は必要ありません)。遅延読み込みを使用すると、タイムリーな読み込み部分が読み込まれ、遅延読み込み部分が最初に読み込まれません(システムの改善)速度)。遅延読み込みが適用されていない場合、すべての情報が検出され、システムが非常に遅くなります。
例:Mybatisの1対多の関連付けクエリでは、必要な情報は1つだけで、多くの情報は必要ありません(つまり、外部キークラスの属性が必要であり、を参照する必要はありません。テーブルがなるクラス属性)
按照建表建立实体类规则,一对多建实体类为:将一个类A作为==多个==属性放入另一个类B中。这样这两个类就建立起关系了。
例如:B类为StudentClass类,A类为Student类。
StudentClass拥有属性:classId、className、(List<Student>) students。
Student拥有属性:stuNo、stuName。
必要なのはStudentClassの属性classIdとclassNameですが、学生は必要ありません。
遅延読み込みを構成する
- 構成のためにmapper.xmlファイルのresultMapの情報を変更します:(例として1対1を取り、1対多は同じです)
将一个类A作为属性放入另一个类B中。这样这两个类就建立起关系了。
B类为Student类,A类为StudentCard类。
Studnet类中拥有stuNo、stuName、card字段。
StudentCard类中拥有cardId、cardInfo字段。
元のマッパーファイル:
<select id="" parameterType="" resultMap="student_card_map">
select s.*, c.* from student s
inner join studentCard c
on s.sid = c.cid
</select>
<resultMap type="Student" id="student_card_map">
<id property="stuNo" column="stuNo"/>
<reslut property="stuName" column="stuName"/>
<!--学生证属性,学生证类型的。javaType指定属性的类型。-->
<association proerty="card" javaType="StudentCard">
<!--StudentCard类中还有属性-->
<id property="cardId" column="cardId"/>
<id property="cardInfo" column="cardInfo"/>
</association>
</resultMap>
現在のマッパーファイル:
遅延ロードは、遅延属性タグのクラスの属性に書き込むことができなくなりましたが、、、の新しいマッパーファイルを作成し、遅延属性タグに要素selectとcolumnを追加する必要があります。
<select id="" parameterType="int" resultMap="student_card_map">
select * from student
</select>
<resultMap type="Student" id="student_card_map">
<id property="stuNo" column="stuNo"/>
<reslut property="stuName" column="stuName"/>
<!-- 加一个select属性用于引用外部xml文件;一个column用于表示外键是哪个(将两个查询关联起来) -->
<association proerty="card" javaType="StudentCard" select="StudentCardMapper.selectCardById" column="sid">
<!--
延迟加载不在这列写关联类的属性,写了就是及时加载了
<id property="cardId" column="cardId"/>
<id property="cardInfo" column="cardInfo"/>
-->
</association>
</resultMap>
studentCardMapper.xml:confファイルのマッピングを変更するためにマッパーファイルが追加されていることに注意してください
<mapper namespace="StudentCardMapper">
<select id="selectCardById" parameterType="int" resultType="studentCard">
<!-- 写column就是为这里的#{id}服务的 -->
select * from studentCard where cid = #{id}
</select>
</mapper>
遅延データの読み込み:
// 使用外键类(StudentClass)的get关联属性方法(getCard)
StudentClass student;
.......;
// 加载延迟加载内容
StudentCard c = student.getCard();
- conf.xmlファイルで設定を構成します
<settings>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭立即加载-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>