zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    python 中多个装饰器的执行顺序:
    Python基础思维导图
    怎样写出靠谱的RESUTful API接口?
    python中yield()的用法详解
    Flask思维导图
    Django的设计模式
    MySQL
    MySQL
    Linux
    zsh oh-my-zsh 插件推荐
  • 原文地址:https://www.cnblogs.com/zyl187110/p/11442180.html
Copyright © 2011-2022 走看看