日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mybatis中實現讓返回值與bean中字段相匹配

瀏覽:30日期:2023-10-22 12:52:30

1. 編寫目的

這個介紹的與那些修改mybatis.xml文件的方法不一樣,目的也不一樣。

當我們需要查詢的數據跟entity的bean完全不匹配的時候(比如說需要統計的時候),我們不可能寫多個dao層的查詢接口,然后一個一個map到xml中去。

我們可以專門寫一個類,根據自己的需要把統計的屬性都寫到里面去,然后一次性查詢,就可以獲得所有需要統計的數據。

2. 重要方法

專門編寫一個實體類。實體類中包含的都是自己需要統計的屬性。

編寫dao層的接口方法的返回值就是這個實體類。

在映射的map.xml中編寫查詢時,使用as …的方法與實體類中的屬性一一對應。

3. 具體案例

需求:需要統計日記表中某個用戶的以下屬性:

總共編寫日記數目

刪除日記數目

心情開心篇數

心情一般篇數

心情差篇數

心情極差篇數

晴朗天氣篇數

陰天篇數

雨天篇數

實體類的編寫

package cn.ailanglang.diary.util;public class StatisticBean { private Integer sum; private Integer mood0; private Integer mood1; private Integer mood2; private Integer mood3; private Integer weather0; private Integer weather1; private Integer weather2; private Integer weather3; private Integer weather4; private Integer weather5; private Integer weather6; private Integer weather7; private Integer unknow_weather; private Integer unknow_mood; public Integer getSum() { return sum; } public void setSum(Integer sum) { this.sum = sum; } public Integer getWeather0() { return weather0; } public void setWeather0(Integer weather0) { this.weather0 = weather0; } public Integer getWeather1() { return weather1; } public void setWeather1(Integer weather1) { this.weather1 = weather1; } public Integer getWeather2() { return weather2; } public void setWeather2(Integer weather2) { this.weather2 = weather2; } public Integer getWeather3() { return weather3; } public void setWeather3(Integer weather3) { this.weather3 = weather3; } public Integer getWeather4() { return weather4; } public void setWeather4(Integer weather4) { this.weather4 = weather4; } public Integer getWeather5() { return weather5; } public void setWeather5(Integer weather5) { this.weather5 = weather5; } public Integer getWeather6() { return weather6; } public void setWeather6(Integer weather6) { this.weather6 = weather6; } public Integer getWeather7() { return weather7; } public void setWeather7(Integer weather7) { this.weather7 = weather7; } public Integer getUnknow_weather() { return unknow_weather; } public void setUnknow_weather(Integer unknow_weather) { this.unknow_weather = unknow_weather; } public Integer getUnknow_mood() { return unknow_mood; } public void setUnknow_mood(Integer unknow_mood) { this.unknow_mood = unknow_mood; } public Integer getMood0() { return mood0; } public void setMood0(Integer mood0) { this.mood0 = mood0; } public Integer getMood1() { return mood1; } public void setMood1(Integer mood1) { this.mood1 = mood1; } public Integer getMood2() { return mood2; } public void setMood2(Integer mood2) { this.mood2 = mood2; } public Integer getMood3() { return mood3; } public void setMood3(Integer mood3) { this.mood3 = mood3; }}

dao層接口方法

/** * 統計 * @param userid * @return */ StatisticBean countMood(Long userid);

mapper.xml的編寫

重點注意as …

<select parameterType='java.lang.Long' resultType='cn.smileyan.diary.util.StatisticBean'> select count(diary.pk_diaryid) as sum, sum(case when diary.mood=’0’ then 1 else 0 end) as mood0, sum(case when diary.mood=’1’ then 1 else 0 end) as mood1, sum(case when diary.mood=’2’ then 1 else 0 end) as mood2, sum(case when diary.mood=’3’ then 1 else 0 end) as mood3, sum(case when diary.weather=’0’ then 1 else 0 end) as weather0, sum(case when diary.weather=’1’ then 1 else 0 end) as weather1, sum(case when diary.weather=’2’ then 1 else 0 end) as weather2, sum(case when diary.weather=’3’ then 1 else 0 end) as weather3, sum(case when diary.weather=’4’ then 1 else 0 end) as weather4, sum(case when diary.weather=’5’ then 1 else 0 end) as weather5, sum(case when diary.weather=’6’ then 1 else 0 end) as weather6, sum(case when diary.weather=’7’ then 1 else 0 end) as weather7 from user_diary,diary where diary.pk_diaryid = user_diary.fk_diaryid and user_diary.fk_userid = #{userid}; </select>

編寫service層就不再介紹了。

測試類方法

@Test public void test6() { StatisticBean statisticBean = diaryService.countMood((long) 25); System.out.println('sum=='+statisticBean.getSum()); System.out.println('mood(0) == '+statisticBean.getMood0()); System.out.println('mood(1) == '+statisticBean.getMood1()); System.out.println('mood(2) == '+statisticBean.getMood2()); System.out.println('mood(3) == '+statisticBean.getMood3()); System.out.println('weather(0) == '+statisticBean.getWeather0()); System.out.println('weather(1) == '+statisticBean.getWeather1()); System.out.println('weather(2) == '+statisticBean.getWeather2()); System.out.println('weather(3) == '+statisticBean.getWeather3()); System.out.println('weather(4) == '+statisticBean.getWeather4()); System.out.println('weather(5) == '+statisticBean.getWeather5()); System.out.println('weather(6) == '+statisticBean.getWeather6()); System.out.println('weather(7) == '+statisticBean.getWeather7()); }

可以成功輸出數據庫中的數據,完成了我們的目的——統計。

4. 總結

重點了解一下as 的用法,as后面跟著的是實體類的屬性名,當然xml文件中一定要指明returnType是那個實體類,注意要寫詳細的class地址。

然后就是理解一下 sum(case when diary.mood=‘3’ then 1 else 0 end) as mood3,中sum和case when的用法。

補充知識:mybatis 學習總結3 表字段與javabean字段的映射

有時候我們封裝的javabean與庫表的字段并不能一一對應,我們需要做一些必要的配置以保證數據能夠正確的獲取。

總的來說,解決庫表與javabean字段不統一的方法有以下幾種。

1.駝峰轉換

我們在封裝實體類的時候,通常將屬性命令為駝峰形式,例如

userName

而庫表的命名則遵循全小寫,多個單詞間使用 ’_’ 下劃線連接的方式, 例如

user_name

這種情況我們可以使用mybatis的駝峰轉換策略 在mybatis 的config.xml配置文件中 添加如下代碼:

<!--設置集標簽--> <settings> <!--設置標簽 === 駝峰轉換--> <setting name='mapUnderscoreToCamelCase' value='true'/> </settings>

添加如下策略后,針對查詢結果集中的字段出現上例中的沖突時則能夠得到解決。

2.sql語句中的 AS 關鍵字 — 起別名

我們在數據庫建一個course表

create table course (id BIGINT KEY AUTO_INCREMENT,course_name VARCHAR(30) NOT NULL,grade SMALLINT NOT NULL,teacher_id BIGINT NOT NULL,add_time TIMESTAMP DEFAULT now(),mod_time TIMESTAMP DEFAULT now())

插入幾條數據

INSERT INTO course (course_name,grade,teacher_id) VALUES (’高等數學’,1,1);INSERT INTO course (course_name,grade,teacher_id) VALUES (’微積分’,2,2);INSERT INTO course (course_name,grade,teacher_id) VALUES (’希臘文學史’,3,3);

建立實體類

@Alias('courseBO')public class CourseBO{private Long courseId; //數據庫-- idprivate String courseName; //數據庫 -- course_nameprivate Integer courseGrade; //數據庫 -- gradeprivate Long courseTeacherId; //數據庫 -- teacher_idprivate Date addTime; //數據庫 -- add_timeprivate Date modTime; //數據庫 -- mod_time/*** 以下為 get set 方法 以及 toString 方法*/}

可以簡單的發現幾個庫表與實體字段的不同

mapper.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd'><mapper namespace='mapping.CourseMapper'> <select resultType='Model.CourseBO'> SELECT * FROM course WHERE id = #{id} </select></mapper>

mapper接口

public interface CourseMapper extends BaseMapper { CourseBO getCourseByPriMaryKey(@Param('id') Long id);}

config.xml 注冊mapper

<!--映射注冊 加載映射文件--> <mappers> <!--第一種即第三種方法使用resource屬性注冊mapper,路徑為xml文件--> <mapper resource='resource/mapper/UserMapper.xml' /> <!--第二種方式即注解方式使用class屬性注冊mapper,路徑為接口class文件--> <!--<mapper />--> <mapper resource='resource/mapper/CourseMapper.xml' /> </mappers>

測試方法

public class FieldMappingDemo { public static void main(String[] args) throws IOException { String resource = 'resource/common/mybatis-config.xml'; InputStream in = Resources.getResourceAsStream(resource); SqlSession sqlSession= new SqlSessionFactoryBuilder().build(in).openSession(); CourseMapper courseMapper = sqlSession.getMapper(CourseMapper.class); CourseBO courseBO = courseMapper.getCourseByPriMaryKey(1L); System.out.println(courseBO); sqlSession.close(); }}

執行結果

mybatis中實現讓返回值與bean中字段相匹配

可以看到由于主鍵映射的失敗,整個結果對象返回為null

我們現在在sql語句中加入字段別名,同時設置駝峰轉換策略

<select resultType='Model.CourseBO'> SELECT id courseId, course_name, grade courseGrade, teacher_id courseTeacherId, add_time, mod_time FROM course WHERE id = #{id}</select>

<!--設置集標簽--> <settings> <!--設置標簽 === 駝峰轉換--> <setting name='mapUnderscoreToCamelCase' value='true'/> </settings>

再次執行,結果:

mybatis中實現讓返回值與bean中字段相匹配

可以看到數據正確的獲取到了。

3.resultMap建立字段映射

我們也可以使用resultMap做字段映射

<!--id:唯一標識 type:JavaBean實體--> <resultMap type='Model.CourseBO'> <!--id標簽為主鍵標簽,resultMap中必須存在一個id標簽--> <id column='id' jdbcType='BIGINT' property='courseId' javaType='Long' /> <!--result標簽為屬性標簽, column屬性指定表字段名,jdbcType為表字段數據類型 property為實體屬性名,javaType為實體屬性數據類型--> <result column='course_name' jdbcType='VARCHAR' property='courseName' javaType='String'/> <result column='grade' jdbcType='SMALLINT' property='courseGrade' javaType='Integer'/> <result column='teacher_id' jdbcType='BIGINT' property='courseTeacherId' javaType='Long'/> <result column='add_time' jdbcType='TIMESTAMP' property='addTime' javaType='Date'/> <result column='mod_time' jdbcType='TIMESTAMP' property='modTime' javaType='Date'/> </resultMap> <!--select標簽的 resultMap 指定resultMap標簽中的id 值--> <!--去掉所有的別名 --> <select resultMap='SqlMap'> SELECT * FROM course WHERE id = #{id} </select>

執行結果

mybatis中實現讓返回值與bean中字段相匹配

以上這篇mybatis中實現讓返回值與bean中字段相匹配就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜av在线| 亚洲国产不卡| 国产亚洲一区在线| 夜夜嗨av一区二区三区网站四季av| 成人福利视频| 久久婷婷一区| 九色精品91| 夜久久久久久| 9久re热视频在线精品| 不卡av一区二区| 日韩专区在线视频| 欧美视频久久| 精品久久电影| 久久国产日本精品| 久久高清国产| 青青草国产精品亚洲专区无| 久久久91麻豆精品国产一区| 亚洲精品**中文毛片| 欧美成人综合| 日本在线成人| 美女国产一区二区三区| 国产亚洲高清在线观看| 精品视频高潮| 亚洲专区在线| 日韩avvvv在线播放| 日韩影院二区| 中文字幕亚洲在线观看| 中文在线а√在线8| 蜜桃视频第一区免费观看| 国产a久久精品一区二区三区| 91成人超碰| 欧美精品导航| 玖玖精品视频| 国产精品亚洲一区二区三区在线观看| 亚洲一区免费| 鲁鲁在线中文| 亚洲精品日韩久久| 香蕉久久99| 精品国产午夜| 蜜臀久久99精品久久久画质超高清 | 国产夫妻在线| 日韩一区精品视频| 久久青青视频| 欧美在线精品一区| 国产农村妇女精品一二区| 国产美女高潮在线| 热久久久久久| 免费欧美一区| yellow在线观看网址| 欧美一区免费| 亚洲精品亚洲人成在线观看| 国产一区观看| 激情综合网址| 亚洲福利国产| 激情欧美丁香| 亚洲h色精品| 日韩国产专区| 国产精品精品| 日韩毛片视频| 国产成人a视频高清在线观看| 红桃视频欧美| aa亚洲婷婷| 宅男在线一区| 亚洲男女av一区二区| 亚洲综合欧美| 国产精品hd| 精品久久免费| 伊人久久视频| 999精品在线| 五月天久久久| 玖玖玖国产精品| 亚洲精品在线国产| 欧美日本二区| 狂野欧美性猛交xxxx| 精品一级视频| 日韩不卡免费高清视频| 久久精品不卡| av亚洲免费| 蜜臀精品久久久久久蜜臀| 日韩精品视频网| 免费亚洲婷婷| 日韩在线中文| 天使萌一区二区三区免费观看| 亚洲欧洲免费| 精品视频黄色| 国产韩日影视精品| 国产专区一区| 91亚洲精品在看在线观看高清| 欧美激情视频一区二区三区在线播放| 精品久久一区| 国产福利一区二区精品秒拍 | 国产成人久久精品一区二区三区| 精品国产中文字幕第一页| 久久国产影院| 日本一区二区三区中文字幕| 欧美激情三区| 日韩午夜高潮| 国产成人精品一区二区免费看京 | 日本成人中文字幕| 日韩在线视频精品| 日日摸夜夜添夜夜添国产精品| 激情久久99| 日韩高清不卡一区| 最新国产拍偷乱拍精品| 欧美91在线|欧美| 亚洲天堂久久| 成人国产精选| 国产精品视频一区二区三区| 亚洲精品1区| 久久要要av| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久99免费视频| 日本欧美大码aⅴ在线播放| 日韩国产一区| 国产精品1区| 亚洲精品乱码| 丝袜诱惑一区二区| 麻豆91在线播放| 亚洲精品系列| 午夜欧美精品| 欧美日韩1区2区3区| 91九色精品国产一区二区| 欧美黄色精品| 日韩精品社区| 日本99精品| 97精品国产99久久久久久免费| 久热re这里精品视频在线6| 欧美日韩在线二区| 国产精品毛片视频| 国产精品亚洲一区二区在线观看 | 国产亚洲网站| 国产一级一区二区| 亚洲综合日本| 视频一区视频二区在线观看| 欧美日韩精品免费观看视欧美高清免费大片| 国产精品高清一区二区| 日韩综合小视频| 青青国产精品| 久久这里只有| 日韩电影二区| 香蕉精品久久| 亚洲精选久久| 国产日产精品_国产精品毛片 | 成人精品动漫一区二区三区| 精品精品久久| 久久久成人网| 免费久久99精品国产| 日本精品久久| 日韩成人免费| 久久精品青草| 亚洲人成高清| 精品欧美日韩精品| 亚洲激情欧美| 久久av电影| 日韩一区二区久久| 国产精品久久免费视频| 午夜国产精品视频| 国产日韩免费| 国产剧情在线观看一区| 婷婷精品久久久久久久久久不卡| 国产激情一区| 伊人久久婷婷| 精品视频国内| 深夜日韩欧美| 精品久久一区| 综合激情在线| 国产超碰精品| 国产精品黄网站| 国产一区成人| 久久男人av资源站| 日韩福利视频网| 在线成人动漫av| 精品一区av| 日韩激情一区二区| 红桃视频国产一区| sm久久捆绑调教精品一区| 亚洲一区二区小说| 久久久久一区| 国产精品白丝久久av网站| 99久久视频| 国产a亚洲精品| 欧美一区免费| 日本中文字幕视频一区| 好吊日精品视频| 91嫩草亚洲精品| 免费在线成人| 国产高清视频一区二区| 欧美在线首页| 欧美日韩91| 99视频+国产日韩欧美| 亚洲精品在线国产| 模特精品在线| 综合一区av| 亚洲三级观看| 久久婷婷丁香| 欧美一级精品| 午夜精品一区二区三区国产| 蜜臀av免费一区二区三区| 亚洲午夜久久久久久尤物| 亚洲婷婷在线|