本文共 3073 字,大约阅读时间需要 10 分钟。
记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容:
运行测试类一直报错:
然后查看报错信息: 这一行刚好是注释所在行,于是删掉注释 再次运行成功了;(类型处理器 插件 对象工厂暂时不用了解)
之前只有mybatis-config.xml,现在新建db.properties:
#第一步优化:引入外部配置文件driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3308/data1?useSSL=true&userUnicode=true&characterEncoding=UTF-8username=heziyipassword=123456
xml文件部分修改如下
类型别名是JAVA类型配置设置的一个短的名字,它只和XML配置有关,它存在的意义在于减少类完全限定名的冗余。如:
现在在自己的项目中加上:
resultMap 中的id 和result 标签包含的属性相同,不同的地方在于, id 代表的是主键(或唯一值)的字段(可以有多个),它们的属性值是通过setter 方法注入的。id 和result 标签包含的属性。
column : 从数据库中得到的列名, 或者是列的别名。 property :映射到列结果的属性。可以映射简单的如“ username ”这样的属性,也可以映射一些复杂对象中的属性, 例如“ address.street.number ”,这会通过“ .”方式的属性嵌套赋值。 javaType : 一个Java 类的完全限定名,或一个类型别名(通过typeAlias 配置或者默认的类型)。如果映射到一个JavaB ean, MyB at is 通常可以自动判断属性的类型。如果映射到HashMap ,则需要明确地指定java Type 属性。 jdbcType : 列对应的数据库类型。JDBC 类型仅仅需要对插入、更新、删除操作可能 为空的列进行处理。这是JDBC j dbcType 的需要,而不是MyBatis 的需要。 **接口中定义的返回值类型必须和xml中配置的resultType 类型一致,否则就会因为类型 不一致而抛出异常。**返回值类型是由XML 中的resul tType (或resultMap 中的type )决定的,不是由接口中写的返回值类型决定的在UserMapper.xml中修改resultType:(Usera是自定义的别名)
测试类:
@Test public void getUserById(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao dao = sqlSession.getMapper(UserDao.class);//获得接口 User user = dao.getUserById(3); System.out.println(user); sqlSession.close(); }
运行结果:
也可以指定一个包名,在包名下搜索需要的JavaBean扫描实体类的包,它的默认别名就为这个类的类名,首字母小写如果实体类十分多,建议使用扫描实体类的包名,这种方法不能自定义别名,但如果非要改也可以通过在实体上增加注解
property属性或别名要和对象中属性的名字相同,实际匹配时,mybatis会先将两者都转化为大写形式,再判断是否相同
每一个Mapper.xml都需要在Mybatis的核心配置文件中注册!注册的 三种方式
方式一:方式二:使用class文件绑定注册
使用class的注意点:
方式三:使用包扫描
<package name=com.kuang.dao"/> 使用包扫描的注意点:问题:数据库中的字段名和实体属性名不一致
pojo.User下面private String password; 而数据库的字段为pwdpublic class User { private int id; private String name; // private String pwd; private String password;} //省略getter setter tostring的方法
测试类:
@Test public void query(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao que = sqlSession.getMapper(UserDao.class); User user = que.query(2); System.out.println(user); sqlSession.close(); }
在不解决问题时输出:
原来的select语句:
(注释掉了)改为:
显示结果发现pwd一项不再是null:(原来的select语句输出时pwd一项为null)
转载地址:http://dvten.baihongyu.com/