博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis错误之配置文件属性配置问题
阅读量:6497 次
发布时间:2019-06-24

本文共 4443 字,大约阅读时间需要 14 分钟。

在mybatis的配置文件SqlMapConfig.xml中,可以在开始的地方先加载一个properties节点,用来定义属性变量。

1 
2
3
4
5

然后可以在后面的节点中引用变量:

db.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.password=value=m

SqlMapConfig

1 
2
3
4
5
6
7
8
9
10
11
12
13
14

但是,这涉及到几个问题,首先就是加载顺序,后者的变量会覆盖先加载的?看教程是这样说的:

properties特性:

  注意:

        MyBatis 将按照下面的顺序来加载属性:

      在 properties 元素体内定义的属性首先被读取。

      然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。

        最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

  建议:

      不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

      在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

 

举例来说:

  1. 在db.properties中定义了value=m
  2. 在mybat配置mapper里,SqlMapConfig.xml中设置mapper文件为:
1     
2
3
4

    3. 编写接口:UserMapper.java

1 package cn.mrf.mybatis.mapper; 2  3  4 import java.util.List; 5  6 import cn.mrf.mybatis.po.User; 7  8 /** 9  * 10 * @ClassName: UserDao 11 * @Description: mapper接口:用户管理 12 * @author mrf13 * @date 2015-9-19 下午05:48:49 14 *15  */16 public interface UserMapper {17     18     19     //根据id查询用户信息20     public User findUserById(int id) throws Exception;21     22     //根据用户名查询用户列表23     public List
findUserByName(String name) throws Exception;24 25 //添加用户信息26 public void insertUser(User user) throws Exception;27 28 //删除用户信息29 public void deleteUser(int id) throws Exception;30 31 //更新用户信息32 public void updateUser(User user) throws Exception;33 34 }

 4. 配置UserMapper.xml

1 
2 5 6
9
10 11
12
13
22
25 26
32
35

 

 5. 编写mapper代理测试用例UserMapperTest.java

1 package cn.mrf.mybatis.mapper; 2  3  4 import java.io.InputStream; 5 import java.util.List; 6  7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory;10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;11 import org.junit.Before;12 import org.junit.Test;13 14 import cn.mrf.mybatis.po.User;15 16 import com.sun.istack.internal.Builder;17 18 public class UserMapperTest {19 20     private SqlSessionFactory sqlSessionFactory;21     22     @Before23     public void setUp() throws Exception {24         // 创建sqlSessionFactory25         // mybatis配置文件26         String resource = "SqlMapConfig.xml";27         // 得到配置文件流28         InputStream inputStream = Resources.getResourceAsStream(resource);29         // 创建会话工厂,传入mybatis的配置文件信息30         sqlSessionFactory = new SqlSessionFactoryBuilder()31                 .build(inputStream);32         33     }34     35     @Test36     public void testFindUserByName() throws Exception{37         SqlSession sqlSession = sqlSessionFactory.openSession();38         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);39         List
users = userMapper.findUserByName("小军");40 System.out.println(users);41 sqlSession.close();42 43 }44 45 }

5.结果:

1 DEBUG [main] - Opening JDBC Connection 2 DEBUG [main] - Created connection 423250256. 3 DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@193a4950] 4 DEBUG [main] - ==>  Preparing: SELECT * FROM USER WHERE username LIKE '%m%'  5 DEBUG [main] - ==> Parameters:  6 DEBUG [main] - <==      Total: 1 7 [User [id=1, username=mrf, sex=男, birthday=Sat Feb 23 00:00:00 CST 1991, address=北京]] 8 DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@193a4950] 9 DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@193a4950]10 DEBUG [main] - Returned connection 423250256 to pool.

6.分析:

  可以看出,本来是根据用户名查找用户,输入了用户名为小军,而实际上,系统读取的用户名为m.

  也就是说,系统没有读取parameterType的值,或者被覆盖。

  那么,问题是,教程说最后读取parameterType并覆盖、如果这样,最后应该读取的小军才对。实际却是m.顺序有疑问了。

  好吧,因为parameterType中并没有这个值,所以没有覆盖。

本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/4828974.html,如需转载请自行联系原作者

你可能感兴趣的文章
USB 2.0 OTG IP Core
查看>>
解读浮动闭合最佳方案:clearfix
查看>>
Charles使用
查看>>
Python GUI编程(Tkinter) windows界面开发
查看>>
P(Y|X) 和 P(X,Y)
查看>>
dynamic关键字的使用
查看>>
iOS 音乐播放器之锁屏效果+歌词解析
查看>>
【转】Google 的眼光
查看>>
android O 蓝牙设备默认名称更改
查看>>
阳台的青椒苗
查看>>
swapper进程【转】
查看>>
跨链技术与通证经济
查看>>
爬虫学习之-xpath
查看>>
js jQuery 右键菜单 清屏
查看>>
深入理解let和var的区别(暂时性死区)!!!
查看>>
dotConnect for Oracle
查看>>
Eclipse下C/C++开发环境搭建
查看>>
Eclipse中设置在创建新类时自动生成注释
查看>>
我的友情链接
查看>>
CoreOS 手动更新
查看>>