当前位置: 代码迷 >> 综合 >> mybatis学习-----day03(配置文件中-------别名的优化,结果集的映射,一一对应关系处理)
  详细解决方案

mybatis学习-----day03(配置文件中-------别名的优化,结果集的映射,一一对应关系处理)

热度:20   发布时间:2023-11-24 17:48:45.0

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

 

  相关解决方案