MyBatis-----3.优化和解决实体类中属性名和字段名不同的冲突

1.MyBatis的优化

1.1将连接数据库的配置信息单独放在一个properties文件中

  创建db.properties文件,添加内容:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456

  在conf.xml配置文件中:

<properties resource="db.properties"/>   <!-- 存放文件路径-->
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC" />
    
    <dataSource type="POOLED">
        <property name="driver" value="${driver}" />    <!-- 使用${属性} -->
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
    </dataSource>

1.2 为实体类定义别名,使用typeAliases标签

  type: 实体类路径       alias:要起的别名

<typeAliases>
  <typeAlias type="com.zhiyou.zyl.bean.Users" alias="_Users"/>
</typeAliases>

1.3  添加日志jar包,方面查找错误

  添加Log4j的jar包:log4j-1.2.16.jar

  创建log4j.properties文件:

log4j.properties,
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

  结果类似于:

 

2.解决字段名与实体类属性名不相同的冲突

  在创建表的实体类时,需要主动将实体类的属性和数据表中的字段名设置一样,但有时字段名和实体类中的属性不一致时,mybatis将不能解析该属性,这就要处理这种矛盾了。

  测试的表和数据 

CREATE TABLE orders(
order_id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(20),
order_price FLOAT);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

  实体类:

public class Order {
  private int id;
  private String no;
  private float price;
}

  解决冲突的两种方法:

  第一种:在SQL语句中为查询的字段起别名

<select id="getOrder" parameterType="int" resultType="com.zhiyou.zyl.bean.Orders">
  select order_id id, order_no no,order_price price from orders where order_id=#{id}
</select>

  第二中:使用<resultMap>标签

  <select id="getOrder" resultMap="order">     <!-- resulyMap="resultMap标签ID名"-->
        select * from orders where order_id=#{id}
  </select>   <resultMap type="com.zhiyou.zyl.bean.Orders" id="order"> <id column="order_id" property="id"/> <!-- id为主键,result为其他字段,column为字段名,property为实体类属性--> <result column="order_no" property="no"/> <result column="order_price" property="price"/> </resultMap>
原文地址:https://www.cnblogs.com/zyl187110/p/11442180.html