Mybatis?ResultMap和分頁操作示例詳解
1. ResultMap
現(xiàn)有數(shù)據庫的字段為:
- id
- name
- pwd
為了其字段的名字,在pojo中的User的字段名和其一樣:
@Data @AllArgsConstructor @NoArgsConstructor public class User { int id; String name; String pwd; }
UserMapper.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="com.dao.UserMapper"> <select id="getAllUser" resultType="com.pojo.User"> select * from user </select> </mapp
這樣能保證不會出錯。若是將User的“pwd”改為“password”,則對應的password結果就會為空。
解決該問題,
方法一:"as"
<select id="getAllUser" resultType="com.pojo.User"> select id, name, pwd as password from user </select>
User字段的為“password”,數(shù)據庫字段為“pwd”,那就使用Sql的原生語句as,就可以將查詢字段和User中字段相對應。
方法二:resultMap(結果映射)
可以使用 <ResultMap>標簽將數(shù)據庫中的字段和User中的字段相對應:
<?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="com.dao.UserMapper"> <resultMap id="UserMapper" type="com.pojo.User"> <!-- column是數(shù)據庫表的列名 , property是對應實體類的屬性名 --> <result column="id" property="id"/> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap> <select id="getAllUser" resultMap="UserMapper"> select * from user </select> </mapper>
其中,單獨設置resultMap標簽,來使數(shù)據庫中的字段和User對應上。 resultMap中的id 對應著 <select>標簽中的resultMap (原來為resultType)
2. 日志
日志工廠
思考:我們在測試SQL的時候,要是能夠在控制臺輸出 SQL 的話,是不是就能夠有更快的排錯效率?
如果一個 數(shù)據庫相關的操作出現(xiàn)了問題,我們可以根據輸出的SQL語句快速排查問題。
對于以往的開發(fā)過程,我們會經常使用到debug模式來調節(jié),跟蹤我們的代碼執(zhí)行過程。但是現(xiàn)在使用Mybatis是基于接口,配置文件的源代碼執(zhí)行過程。因此,我們必須選擇日志工具來作為我們開發(fā),調節(jié)程序的工具。
使用方法:
在 mybatis-config.xml 中添加。
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
注意:日志功能的開啟是 name = "logImpl", value的值就是各種類型的日志。
注意:
- value="STDOUT_LOGGING"中不能出現(xiàn)空格,例如 value="STDOUT_LOGGING "就是錯誤的。
- STDOUT_LOGGING是標準輸出日志
Log4j
- Log4j是Apache的一個開源項目
- 通過使用Log4j,我們可以控制日志信息輸送的目的地:控制臺,文本,GUI組件....
- 我們也可以控制每一條日志的輸出格式;
- 通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
- 要使用 Log4j首先導入相關的包:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
- 創(chuàng)建 log4j.properties 配置文件:
#將等級為DEBUG的日志信息輸出到console和file這兩個目的地,console和file的定義在下面的代碼 log4j.rootLogger=DEBUG,console,file #控制臺輸出的相關設置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #文件輸出的相關設置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日志輸出級別 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
- 配置 log4j的實現(xiàn):
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
- log4j簡單使用:
- 導入的包是org.apache.log4j.Logger
一個配置完整的 settings 元素的示例如下:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>
3. 分頁
在學習mybatis等持久層框架的時候,會經常對數(shù)據進行增刪改查操作,使用最多的是對數(shù)據庫進行查詢操作,如果查詢大量數(shù)據的時候,我們往往使用分頁進行查詢,也就是每次處理小部分數(shù)據,這樣對數(shù)據庫壓力就在可控范圍內。
Limit 分頁
#語法 SELECT * FROM table LIMIT stratIndex,pageSize SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15 #為了檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數(shù)為 -1: SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last. #如果只給定一個參數(shù),它表示返回最大的記錄行數(shù)目: SELECT * FROM table LIMIT 5; //檢索前 5 個記錄行 #換句話說,LIMIT n 等價于 LIMIT 0,n。
步驟:
- UserMapper接口中添加:
//選擇全部用戶實現(xiàn)分頁 List<User> selectUser(Map<String,Integer> map);
- UserMapp.xml中添加:
<select id="selectUser" parameterType="map" resultType="com.pojo.user"> select * from user limit #{startIndex},#{pageSize} </select>
- Test:
@Test public void testLimitUser(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String,Integer> map = new HashMap<String,Integer>(); map.put("indexPage",0); map.put("endPage",2); List<User> userList = userMapper.getLimitByUser(map); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
4. 注解開發(fā)
mybatis最初配置信息是基于 XML ,映射語句(SQL)也是定義在 XML 中的。而到MyBatis 3提供了新的基于注解的配置。不幸的是,Java 注解的的表達力和靈活性十分有限。最強大的 MyBatis 映射并不能用注解來構建。
sql 類型主要分成 :
- @Select ()
- @Update ()
- @Insert ()
- @Delete ()
注意:利用注解開發(fā)就不需要mapper.xml映射文件了 .
在mybatis-config.xml這樣導入:
<mappers> <mapper class="com.dao.UserMapper" /> </mappers>
區(qū)別于之前的mapper.xml的導入:
<mappers> <mapper resource="com/dao/UserMapper.xml"/> </mappers>
為了實現(xiàn)事務的提交,在MyBatis中:
public class MyBatisUtils { static SqlSessionFactory sqlSessionFactory; static { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
中對sqlSessionFactory.openSession()的參數(shù)設置:
sqlSessionFactory.openSession(true);
就可以實現(xiàn)自動提交事務。
查詢
編寫接口方法注解
//根據id查詢用戶 @Select("select * from user where id = #{id}") User selectUserById(@Param("id") int id);
- 測試
@Test public void testSelectUserById() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); System.out.println(user); session.close(); }
新增
//添加一個用戶 @Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})") int addUser(User user);
Test:
@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(6, "秦疆", "123456"); mapper.addUser(user); session.close(); }
修改
//修改一個用戶 @Update("update user set name=#{name},pwd=#{pwd} where id = #{id}") int updateUser(User user);
刪除
//根據id刪除用 @Delete("delete from user where id = #{id}") int deleteUser(@Param("id")int id);
Test:
@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); mapper.deleteUser(6); session.close(); }
注意:
- 增刪改一定記得對事務的處理
- 注釋的話,一定要把類通過<mappers class="">注冊到 mybatis-config.xml 中去;配置的話,一定要把UserMapper.xml(xxMapper.xml)通過<mappers resouce="">注冊到 mybatis-config.xml 中去
@Param
@Param注解用于給方法參數(shù)起一個名字。以下是總結的使用原則:
- 在方法只接受一個參數(shù)的情況下,可以不使用@Param。
- 在方法接受多個參數(shù)的情況下,建議一定要使用@Param注解給參數(shù)命名。
- 如果參數(shù)是 JavaBean , 則不能使用@Param。
- 不使用@Param注解時,參數(shù)只能有一個,并且是Javabean。
以上就是Mybatis ResultMap和分頁操作示例詳解的詳細內容,更多關于Mybatis ResultMap分頁的資料請關注腳本之家其它相關文章!
相關文章
Java編程一維數(shù)組轉換成二維數(shù)組實例代碼
這篇文章主要介紹了Java編程一維數(shù)組轉換成二維數(shù)組,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動配置原理前,再來了解下兩個注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件給容器注冊bean2022-10-10Spring集成Web環(huán)境與SpringMVC組件的擴展使用詳解
這篇文章主要介紹了Spring集成Web環(huán)境與SpringMVC組件,它是一個MVC架構,用來簡化基于MVC架構的Web應用開發(fā)。SpringMVC最重要的就是五大組件2022-08-08