1.在mybatis-config.xml中
实体别名的优化,
A.这是以前的别名配置,需要一个就要配置一个
<typeAliases><typeAlias type="com.hx.mybatis.pojo.User" alias="User"/><typeAlias type="com.hx.mybatis.pojo.Item" alias="Item"/><typeAlias type="com.hx.mybatis.pojo.Image" alias="Image"/>
</typeAliases>
B.优化有如下:
<typeAliases><package name="com.hx.mybatis.pojo"/>
</typeAliases>
只需要配置一个实体包pojo,然后mybatis会自动去扫面这个包下面的所有的类,然后自动以类名作为别名
2.在每个实体映射文件中,(例如itemMapper.xml)
当这个实体类中的属性名和对应的数据表中的字段不一致的时候,在查询的时候,返回值需要做一个返回结果集映射,
<resultMap type="Item" id="itemMapper"><id column="id" property="id"/><id column="uid" property="uid"/><result column="item_name" property="itemName"/><result column="item_price" property="itemPrice"/><result column="prod_date" property="prodDate"/>
</resultMap>
以上就是做结果集映射的itemMapper.xml配置文件,其中type指向的是我们的实体别名,id是我们自己取的用在有返回结果集的方法上,例如:
<select id="load" parameterType="int" resultMap="itemMapper">select * from t_item where id=#{id}
</select>
这个select中load方法,其有返回结果集,特别注意的是做了返回结果集的,必须使用resultMap并指向我们配置的返回结果集的id值,不然会报错!!!!!
3.在每个实体映射文件中,(例如itemMapper.xml)
当我们的表中有外键的时候,而且我们需要做一一对应的关系查询的时候,我们需要在我们做的的结果集配置里面添加association标签,用来做一一对应关系查询
<resultMap type="Item" id="itemMapper"><id column="id" property="id"/><id column="uid" property="uid"/><result column="item_name" property="itemName"/><result column="item_price" property="itemPrice"/><result column="prod_date" property="prodDate"/><!--1.property="user" user对应的是一对一的实体中的user --><!--2.autoMapping="true" User实体里面的字段和t_user里面的字段一致就不需要结果集映射,自动映射就可以了 --><!--3.column="uid" 表示的是当前表的列uid列,拿去做userMapper.xml里面的load方法里面的id --><!--4.一定不要忘记的是,在select后面写方法 --><association property="user" column="uid" select="com.hx.mybatis.pojo.User.load" autoMapping="true"></association>
</resultMap>
注意点就在里面的1,2,3,4点。
做了一一对应查询的时候,我们必须在,这个有外键的实体中创建对应实体出来。用于接收我们的结果
4.在每个实体映射文件中,(例如itemMapper.xml)
做多sql的n+1的优化
当我们导入log4j.jar包
并做配置 配置文件log4j.properties的时候,我们可以看到在查询的时候,有多条sql语句在运行,
为了解决这个问题,我们就得在实体映射文件中做优化,就可以用3.的映射文件
主要是解决对结果集的优化,还有sql语句的编写
<resultMap type="Item" id="itemMapper"><id column="id" property="id"/><id column="uid" property="uid"/><result column="item_name" property="itemName"/><result column="item_price" property="itemPrice"/><result column="prod_date" property="prodDate"/><!--property="user" javaType="User" 前面一个参数为 实体中的属性,后一个参数为这个属性的类型 --><!--解决sql的n+1问题 --><!-- column="uid" property="id" 前一个参数为数据库中的字段uid,后一个参数为,User实体中的id属性 --><association property="user" javaType="User"><id column="uid" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="nickname" property="nickname"/><result column="email" property="email"/></association></resultMap>
从以上的结果集映射可以看出,association标签配置变了(对比第3点的结果集映射)
例如我们的load方法中的sql
<select id="load" parameterType="int" resultMap="itemMapper"><!-- select * from t_item where id=#{id} 用于单表查询以及,单表中多sql 关联查询 -->select * from t_item ti LEFT JOIN t_user tuon ti.uid=tu.idwhere ti.id=#{id}
</select>
5.log4j.properties的配置
第一步:导入log4j.jar包
第二步:创建一个文件并命名为log4j.properties
第三步:在log4j.properties文件中写入
log4j.properties\uFF0C
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG