加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实

发布时间:2020-12-14 18:06:14 所属栏目:大数据 来源:网络整理
导读:原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html ? ??http://www.cnblogs.com/xdp-gacl/p/4264425.html 一、优化MyBatis配置文件中的配置 1、连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis

原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html ? ??http://www.cnblogs.com/xdp-gacl/p/4264425.html

一、优化MyBatis配置文件中的配置

1、连接数据库的配置单独放在一个properties文件中

  之前,我们是直接将数据库的连接配置信息写在了MyBatis的主配置文件conf.xml文件中,如下:

  其实我们完全可以将数据库的连接配置信息写在一个properties文件中,然后在conf.xml文件中引用properties文件,具体做法如下:

  1、在src目录下新建一个db.properties文件,如下图所示:

  

  在db.properties文件编写连接数据库需要使用到的数据库驱动,连接URL地址,用户名,密码,如下:

1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis 3 name=root 4 password=XDP

  2、在MyBatis的主配置文件conf.xml文件中引用db.properties文件,如下:

2、为实体类定义别名,简化sql映射xml文件中的引用

  之前,我们在sql映射xml文件中的引用实体类时,需要写上实体类的全类名(包名+类名),如下:

  parameterType="me.gacl.domain.User"这里写的实体类User的全类名me.gacl.domain.User,每次都写这么一长串内容挺麻烦的,而我们希望能够简写成下面的形式

  parameterType="_User"这样写就简单多了,为了达到这种效果,我们需要在conf.xml文件中为实体类="me.gacl.domain.User"定义一个别名为"_User",具体做法如下:  在conf.xml文件中标签中添加如下配置:

  这样就可以为me.gacl.domain.User类定义了一个别名为_User,以后_User就代表了me.gacl.domain.User类,这样sql映射xml文件中的凡是需要引用me.gacl.domain.User类的地方都可以使用_User来代替,这就达到了一个简化实体类引用的目的。

  除了可以使用

<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 引用db.properties配置文件 </span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;properties </span><span style="color: #ff0000"&gt;resource</span><span style="color: #0000ff"&gt;="db.properties"</span><span style="color: #0000ff"&gt;/></span>
<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 
    development : 开发模式
    work : 工作模式
 </span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;environments </span><span style="color: #ff0000"&gt;default</span><span style="color: #0000ff"&gt;="development"</span><span style="color: #0000ff"&gt;></span>
    <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;environment </span><span style="color: #ff0000"&gt;id</span><span style="color: #0000ff"&gt;="development"</span><span style="color: #0000ff"&gt;></span>
        <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;transactionManager </span><span style="color: #ff0000"&gt;type</span><span style="color: #0000ff"&gt;="JDBC"</span> <span style="color: #0000ff"&gt;/></span>
        <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 配置数据库连接信息 </span><span style="color: #008000"&gt;--></span>
        <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;dataSource </span><span style="color: #ff0000"&gt;type</span><span style="color: #0000ff"&gt;="POOLED"</span><span style="color: #0000ff"&gt;></span>
            <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; value属性值引用db.properties配置文件中配置的值 </span><span style="color: #008000"&gt;--></span>
            <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;property </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="driver"</span><span style="color: #ff0000"&gt; value</span><span style="color: #0000ff"&gt;="${driver}"</span> <span style="color: #0000ff"&gt;/></span>
            <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;property </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="url"</span><span style="color: #ff0000"&gt; value</span><span style="color: #0000ff"&gt;="${url}"</span> <span style="color: #0000ff"&gt;/></span>
            <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;property </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="username"</span><span style="color: #ff0000"&gt; value</span><span style="color: #0000ff"&gt;="${name}"</span> <span style="color: #0000ff"&gt;/></span>
            <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;property </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="password"</span><span style="color: #ff0000"&gt; value</span><span style="color: #0000ff"&gt;="${password}"</span> <span style="color: #0000ff"&gt;/></span>
        <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;dataSource</span><span style="color: #0000ff"&gt;></span>
    <span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;environment</span><span style="color: #0000ff"&gt;></span>
<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;environments</span><span style="color: #0000ff"&gt;></span>

<span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 配置实体类的别名,配置实体类别名的目的是为了在引用实体类时可以使用实体类的别名来代替实体类,达到简写的目的 </span><span style="color: #008000"&gt;--></span>
<span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;typeAliases</span><span style="color: #0000ff"&gt;></span>
    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 为实体类me.gacl.domain.User配置一个别名_User </span><span style="color: #008000"&gt;--></span>
    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; <typeAlias type="me.gacl.domain.User" alias="_User"/&gt; </span><span style="color: #008000"&gt;--></span>
    <span style="color: #008000"&gt;<!--</span><span style="color: #008000"&gt; 为me.gacl.domain包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
    比如me.gacl.domain.User这个实体类的别名就会被设置成User
     </span><span style="color: #008000"&gt;--></span>
    <span style="color: #0000ff"&gt;<</span><span style="color: #800000"&gt;package </span><span style="color: #ff0000"&gt;name</span><span style="color: #0000ff"&gt;="me.gacl.domain"</span><span style="color: #0000ff"&gt;/></span>
<span style="color: #0000ff"&gt;</</span><span style="color: #800000"&gt;typeAliases</span><span style="color: #0000ff"&gt;></span>

<span style="color: #0000ff"></<span style="color: #800000">configuration<span style="color: #0000ff">>

  

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

在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。

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);

id; order_id String orderNo; order_no price; order_price setId( .id = .orderNo = setPrice( .price = "Order [id=" + id + ",orderNo=" + orderNo + ",price=" + price+ "]" }

  1、创建一个orderMapper.xml文件,orderMapper.xml的内容如下:

映射实体类属性名和表的字段名一一对应关系 映射实体类属性名和表的字段名对应关系

  2、在conf.xml文件中注册orderMapper.xml映射文件

SqlSession sqlSession = String statement = "me.gacl.mapping.orderMapper.getOrderById"; Order order = sqlSession.selectOne(statement,1); System.out.println(order); SqlSession sqlSession = String statement = "me.gacl.mapping.orderMapper.selectOrder"; Order order = sqlSession.selectOne(statement,1); System.out.println(order); SqlSession sqlSession = String statement = "me.gacl.mapping.orderMapper.selectOrderResultMap"; Order order = sqlSession.selectOne(statement,1); System.out.println(order); }

  执行单元测试的结果:

  1、testGetOrderById方法执行查询后返回一个null。

  2、testGetOrderById2方法和testGetOrderById3方法执行查询后可以正常得到想要的结果。

  上面的测试代码演示当实体类中的属性名和表中的字段名不一致时,使用MyBatis进行查询操作时无法查询出相应的结果的问题以及针对问题采用的两种办法:

  解决办法一:?通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

  解决办法二:?通过来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读