您好,登錄后才能下訂單哦!
這篇文章主要介紹了MyBatis注解CRUD與執行流程是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇MyBatis注解CRUD與執行流程是什么文章都會有所收獲,下面我們一起來看看吧。
引入resultMap–MyBatis中最強大的元素
數據庫字段名::
實體類字段名:
public class User { private int id; private String name; private String password;
如上所示,當sql的字段名與實體類沖突時測試結果:
User{id=1, name='張三', password='null'} User{id=2, name='李四', password='null'} User{id=3, name='王五', password='null'}
解決方案一:在sql語句中為字段起別名
select id,name,pwd as password from mybatis.user;
解決方案二:結果集映射ReaultMap
<resultMap id="UserMap" type="User" > <result column="pwd" property="password"/> </resultMap> <select id="getUserList" resultMap="UserMap"> select * from mybatis.user; </select>
resultMap中的id對應具體的sql操作的resultMap屬性,在映射時只需設置子標簽result的column(sql的列、字段名)映射到實體類的名稱屬性property便可以成功操作
概括來講就是:將數據庫中的列映射到實體類具體的某一字段
MyBatis 會在幕后自動創建一個 ResultMap
,再根據屬性名來映射列到 JavaBean 的屬性上 。這就是上述示例代碼中,因為字段名沖突無法正確查詢到password的原因
MyBatis的配置當中settings設置了內置的日志工廠,但需要開發人員在使用時指定具體的日志實現。
MyBatis內置日志工廠: SLF4J | LOG4J(3.5.9 起廢棄) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
STDOUT_LOGGING在settings中配置后直接就可以運行使用,不需要額外的properties等配置文件
配置信息:
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
打印出來一堆日志,我們只用看下面的具體執行信息即可
-- 表示正在創建連接
Created connection 1346201722.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@503d687a]
-- 當前執行的sql
==> Preparing: select * from mybatis.user;
-- 參數
==> Parameters:
-- sql中的字段名
<== Columns: id, name, pwd
-- 所查詢到的數據 三行數據
<== Row: 1, 張三, 123
<== Row: 2, 李四, 234
<== Row: 3, 王五, 345
-- 數據總數
<== Total: 3
-- 打印結果
User{id=1, name='張三', password='123'}
User{id=2, name='李四', password='234'}
User{id=3, name='王五', password='345'}
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@503d687a]
-- 關閉連接
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@503d687a]
-- 將連接回收
Returned connection 1346201722 to pool.Process finished with exit code 0
配置文件:
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
log4j.properties
# 將等級為DEBUG的日志信息輸出到控制臺(console)、文件(file)兩個目的地
log4j.rootLogger=DEBUG,console,file# 輸出到控制臺的相關設置
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.Target=System.out
log4j.appender.console.Encoding=UTF-8
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%p]%d{yyyy-MM-dd HH:mm:ss} %l - %m%n# 輸出到文件的相關設置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/test.log
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%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
mybatis注解開發通常用于簡單的sql執行,較復雜的sql還是需要用xml文件進行配置。
注解開發示例:
在接口中針對方法配置對應的sql注解
@Select("select * from user") List<User> getUsers();
在mybatis-config.xml中配置
<!-- 注冊接口mapper --> <mappers> <mapper class="com.yuqu.dao.UserMapper"/> </mappers>
CRUD:
// 增 @Insert("insert into user (id,name,pwd) values(#{id},#{name},#{password})") int insertUser(User user); // 刪 @Delete("delete from user where id = #{nb}") int deleteUser(@Param("nb") int id); // 改 @Update("update user set name=#{name},pwd=#{password} where id = #{id}") int updateUser(Map<String,Object> map); // 查詢全部 @Select("select id,name,pwd as password from user") List<User> getUsers();
關于@Param
注解:
基本數據類型或String類型需要加Param注解
引用類型不需要
只有一個基本數據類型可以不加,但建議加上
在sql中引用的變量名就是@Param中命名的參數
如:
@Delete("delete from user where id = #{nb}") int deleteUser(@Param("nb") int id);
Resources加載全局配置文件–> mybatis-config.xml
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource);
實例化SqlSessionFactoryBuilder構造器
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
build解析配置文件流
// 以下為SqlSessionFactoryBuilder源碼 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
可以看到,build方法將輸入流、環境、屬性一一解析到Cconfiguration中
實例化SqlSessionFactory
transactionalCaches事務管理器
創建executor執行器
創建SqlSession實例
public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); }
實現CRUD
判斷是否執行成功
執行成功提交事務
執行失敗則跳轉到事務管理器重新進行
關于“MyBatis注解CRUD與執行流程是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“MyBatis注解CRUD與執行流程是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。