日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

發布時間:2024/9/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記錄一個發現的小問題,剛剛在UserMapper.xml文件中有一段中文注釋掉的內容:

<!-- <resultMap id="Usermap" type="User">--> <!-- column:數據庫中的字段 property:實體類中的屬性--> <!-- <result column="id" property="id"/>--> <!-- <result column="pwd" property="password"/>--> <!-- </resultMap>--> <!-- <select id="query" resultMap="Usermap">--> <!-- select * from data1.user where id = #{id}--> <!-- </select>-->

運行測試類一直報錯:

然后查看報錯信息:

這一行剛好是注釋所在行,于是刪掉注釋
再次運行成功了;

(類型處理器 插件 對象工廠暫時不用了解)

配置優化

別名

映射器

配置優化

解決屬性名和字段名不一致的問題

之前只有mybatis-config.xml,現在新建db.properties:

#第一步優化:引入外部配置文件 driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3308/data1?useSSL=true&userUnicode=true&characterEncoding=UTF-8 username=heziyi password=123456

xml文件部分修改如下

<configuration><properties resource="db.properties"></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}"/> <!-- <property name="url" value="jdbc:mysql://localhost:3308/data1?useSSL=true&amp;userUnicode=true&amp;--> <!--characterEncoding=UTF-8"/>--><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers> <!-- 每一個mapper.xml都需要在mybatis的核心配置文件中注冊!!--><mapper resource="com/kuang/dao/UserMapper.xml"/></mappers> </configuration>

別名

類型別名是JAVA類型配置設置的一個短的名字,它只和XML配置有關,它存在的意義在于減少類完全限定名的冗余。如:

<typeAliases> <typeAlias alias = "Author" type = "domain.blog.Ahthor"/> </typeAliases>

現在在自己的項目中加上:

<!-- //可以給實體類起別名--><typeAliases><typeAlias type="com.kuang.pojo.User" alias="Usera"/></typeAliases>

關于resultmap

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是自定義的別名)

<select id="getUserById" parameterType="int" resultType="Usera">select * from data1.user where id = #{id}</select>

測試類:

@Testpublic void getUserById(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserDao dao = sqlSession.getMapper(UserDao.class);//獲得接口User user = dao.getUserById(3);System.out.println(user);sqlSession.close();}

運行結果:

也可以指定一個包名,在包名下搜索需要的JavaBean

<typeAliases> <package name = "com.kuang.pojo"/> </typeAliases>

掃描實體類的包,它的默認別名就為這個類的類名,首字母小寫如果實體類十分多,建議使用掃描實體類的包名,這種方法不能自定義別名,但如果非要改也可以通過在實體上增加注解

映射器

名稱映射規則

property屬性或別名要和對象中屬性的名字相同,實際匹配時,mybatis會先將兩者都轉化為大寫形式,再判斷是否相同

每一個Mapper.xml都需要在Mybatis的核心配置文件中注冊!注冊的 三種方式
方式一:

<mappers> <mapper resources = "com/kuang/dao/UserMapper.xml"/> </mappers>

方式二:使用class文件綁定注冊

<mappers> <mapper class = "com.kuang.dao.UserMapper"/> </mappers>

使用class的注意點:

  • 接口和他的Mapper配置文件必須同名
  • 接口和他的Mapper配置文件必須在同一個包下

方式三:使用包掃描
<package name=com.kuang.dao"/>
使用包掃描的注意點:

  • 接口和他的Mapper配置文件必須同名
  • 接口和他的Mapper配置文件必須在同一個包下

解決屬性名和字段名不一致的問題

問題:數據庫中的字段名和實體屬性名不一致
pojo.User下面private String password;
而數據庫的字段為pwd

  • 起別名
  • 利用resultmap(結果集映射)
    查看表的字段:

    實體中的數據名稱:
public class User {private int id;private String name;// private String pwd;private String password;}//省略getter setter tostring的方法

測試類:

@Testpublic void query(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserDao que = sqlSession.getMapper(UserDao.class);User user = que.query(2);System.out.println(user);sqlSession.close();}

在不解決問題時輸出:

原來的select語句:
(注釋掉了)

<!-- <select id="query" resultType="com.kuang.pojo.User">--> <!-- select * from data1.user where id = #{id}--> <!-- </select>-->

改為:

<resultMap id="Usermap" type="com.kuang.pojo.User"><result column="id" property="id"/><result column="pwd" property="password"/><result column="name" property="name"/></resultMap><select id="query" resultMap="Usermap">select * from data1.user where id = #{id}</select>

顯示結果發現pwd一項不再是null:(原來的select語句輸出時pwd一項為null)

  • resultmap是mybatis中最強大的元素
  • Resultmap的設計思想是,對于簡單的語句根本不需要配置顯式的結果映射,而對于復雜一點的語句只需要描述它們的關系
  • Resultmap最優秀的地方在于,雖然你已經對它相當了解了,但是根本不需要顯式地用到它們

總結

以上是生活随笔為你收集整理的mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。