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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Mybatis使用总结

發布時間:2025/5/22 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • mybatis原理
    • mybatis流程圖
    • MyBatis原理
  • mybatis使用流程
    • 1. 引出依賴
    • 2.配置全局配置文件(mybatis-config.xml)
    • 3.與數據庫表對應pojo類(Class.java)
    • 4.Mapper接口文件(ClassMapper.java)
    • 5.配置與接口文件對應的mapper.xml文件(ClassMapper.xml)
    • 6.在全局配置文件中引入mapper配置文件
    • 7.測試方法的實現
  • mybatis中遇到的問題及解決方法
    • 1.沒有引入mysql依賴
    • 2.配置文件中數據庫操作語言與pojo類中的屬性名大小寫不一致
    • 3.沒有提交事務
    • 4.多組數據傳入無法識別
    • XML形式使用Mybatis需要注意點:
  • 通過注解的方法使用mybatis
    • 創建表對應的pojo類型
    • 給定mapper.xml文件
    • 全局配置文件中引入mapper.xml
    • 在接口文件中通過注解完成CRUD操作
    • 測試方法和xml形式相同
  • 顯示執行細節日志
    • log4j日志
      • 在資源路徑下創建log4j.properties
      • pom.xml中引入log4j依賴
      • 打印細節


前言

在學習Mybatis的使用時,我遇到了各種各樣的坑下面就是我在Mybatis的學習中遇到的問題和自己總結的解決方法,希望能夠幫助到你們。


# mybatis介紹 mybatis介紹 MyBatis 是一款優秀的持久層框架 特征: 1、支持自定義 SQL(非自定義SQL:hebineate)、存儲過程以及高級映射。 2、MyBatis解決JDBC 代碼以及設置參數和獲取結果集的工作。 3、MyBatis通過XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄

mybatis原理

在學習mybatis原理時我不太明白,但通過自己對mybatis使用幾次以后就有了自己的一些理解。如果各位也和我一樣的話建議先自己動手完成以下增刪改查的應用以后在來學習原理:

mybatis流程圖

MyBatis原理

MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源于兩個地方,一處是配置文件,一處是Java代碼的注解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之后關閉SqlSession。

mybatis使用流程

1. 引出依賴

分別引入mybatis和mysql的依賴

<!--mybatis--> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!--mysql-connector-java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency>

導入依賴成功的話會生成mysql和mybatis依賴文件

這兩個依賴是我們使用mybatis的基礎

2.配置全局配置文件(mybatis-config.xml)

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--根標簽--> <configuration><!--配置數據源--><environments default="development"><!--id:環境的唯一標識--><environment id="development"><!--事務管理器--><transactionManager type="JDBC"></transactionManager><!--數據源類型--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/exercise"/><property name="username" value="root"/><property name="password" value="******"/></dataSource></environment></environments></configuration>

需要關注的數據:

username: 賬戶名 password :賬戶密碼 url :使用的數據庫 jdbc:mysql://localhost:3306/庫名/

關于全局配置更詳細的使用:
參考文檔:https://mybatis.org/mybatis-3/zh/configuration.html#

3.與數據庫表對應pojo類(Class.java)

pojo類生成的方式:
方式一:手寫:
對應關系:

類名--表名屬性名--列表名屬性類型--列表類型

還需要 set,get方法
方式二:通過連接數據庫自動生成


需要填寫賬戶名,密碼和需要操作的庫名

右鍵需要導入的表


找到需要導入的位置 ,點擊ok就會給我們自動生成對應數據庫表的類,屬性和get、set方法


修改package為我們文件當前所在路徑
生成的Class類如下所示:

public class Class {private long c_id;private String c_name;public Class() {}public Class(long c_Id, String c_Name) {this.c_id = c_Id;this.c_name = c_Name;}public long getC_Id() {return c_id;}public void setCId(long c_Id) {this.c_id = c_Id;}public String getC_Name() {return c_name;}public void setCName(String c_Name) {this.c_name = c_Name;}}

與之對應的class表

4.Mapper接口文件(ClassMapper.java)

public interface ClassMapper {//增public void insertClass(Class c);//刪public void deleteClass(long id);//改public void updateClass(@Param("c_id") long c_id,@Param("c_name") String c_name); }

5.配置與接口文件對應的mapper.xml文件(ClassMapper.xml)

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--mapper根標簽 namespace,命令空間:保證命名空間唯一,一般是對應的mapper.java的包全路徑--> <mapper namespace="org.example.mapper.ClassMapper"><!--selectStudentByIdselect * from Student where SID = XXX--><!--select標簽:查詢操作id屬性:statement的id,用于表示定義的SQL,在同一個命名空間中id是不允許重復的#{XXX}:輸入參數的占位符,避免SQL注入parameterType:輸入參數類型resultType:指定結果集類型--><insert id="insertClass" parameterType="org.example.pojo.Class">insert into class(c_id,c_name) values (#{c_id},#{c_name})</insert><delete id="deleteClass" parameterType="long">delete from Class where c_id = #{id};</delete><update id="updateClass" >update Class set c_name =#{c_name} where c_id = #{c_id}</update></mapper>

6.在全局配置文件中引入mapper配置文件

<!--引入mapper配置文件--><mappers><mapper resource="mapper/StudentMapper.xml"/><mapper resource="mapper/ClassMapper.xml"/></mappers>

7.測試方法的實現

public static void insert() throws IOException {//拿到全局配置文件String resource = "mybatis-config.xml";//mybbatis提供了Resources類獲取配置文件流try {InputStream resourceAsdept = Resources.getResourceAsStream(resource);//創建會話工廠SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsdept);SqlSession sqlSession = sqlSessionFactory.openSession();//通過反射機制來獲取到mapper實例ClassMapper mapper = sqlSession.getMapper(ClassMapper.class);Class c = new Class(4, "暗影島");mapper.insertClass(c);sqlSession.commit();System.out.println("添加成功");} catch (IOException e) {e.printStackTrace();}}

測試方法的操作流程

1.通過mapper提供的Resources獲取配置文件流 2.創建會話工廠 3.通過反射方法獲取mapper實例 4.實現數據庫操作 5.提交事務


查看mysql是否添加成功

以上全部內容就是一個完整的mybatis的使用過程

mybatis中遇到的問題及解決方法

1.沒有引入mysql依賴

Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: com.mysql.cj.jdbc.Driver

解決方法在pom.xml中引入mysql依賴

2.配置文件中數據庫操作語言與pojo類中的屬性名大小寫不一致

如下我們輸入的參數類型為pojo.Class類型那么我們就需要保證
#{}中內如與我們Class類中屬性名完全一致,大小寫也需要一致

<insert id="insertClass" parameterType="org.example.pojo.Class">insert into class(c_id,c_name) values (#{c_id},#{c_name})</insert>

如果不一致會導致如下異常

3.沒有提交事務


如果我們不在增刪改操作后不進行事務提交的話,那么我們在數據庫中查詢時候沒有我們的操作信息,所以需要我們手動提交事務

4.多組數據傳入無法識別

當我們需要多組數據傳入xml配置文件時,xml無法識別傳入數據類型

public void updateClass(@Param("c_id") long c_id,@Param("c_name") String c_name);

解決方法:

1.添加@Param注解 2.pojo中寫一個傳入多組數據的類 3.兩組數據時,可以采用map的形式傳入

推薦使用第一種

XML形式使用Mybatis需要注意點:

基于xml形式需要遵循一定的規則:

1、xml配置文件中的命名空間和指向接口文件的地址(全路徑) 2、mapper.java接口文件中的方法名和mapper.xml中Statement的id保持一致 3、mapper.java接口中方法參數和mapper.xml中Statement的parameterType或parameterMap的類型一致 4、mapper.java接口中方法返回值類型和mapper.xml中mapper.xml文件中Statement的resultType或resultMap類型一致

通過注解的方法使用mybatis

創建表對應的pojo類型

package org.example.pojo;;import java.util.Date;public class Student {private int s_Id;private String s_Name;private String sex;private Date birthday;private String qq;private long c_Id; public Student(){}public Student(int s_Id, String s_Name, String sex, Date birthday, String qq, long c_Id) {this.s_Id = s_Id;this.s_Name = s_Name;this.sex = sex;this.birthday = birthday;this.qq = qq;this.c_Id = c_Id;}public int getSId() {return s_Id;}public void setSId(int s_Id) {this.s_Id = s_Id;}public String getSName() {return s_Name;}public void setSName(String s_Name) {this.s_Name = s_Name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(java.sql.Date birthday) {this.birthday = birthday;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public long getCId() {return c_Id;}public void setCId(long c_Id) {this.c_Id = c_Id;}@Overridepublic String toString() {return "Student{" +"sId=" + s_Id +", sName='" + s_Name + '\'' +", sex='" + sex + '\'' +", birthday=" + birthday +", qq='" + qq + '\'' +", cId=" + c_Id +'}';} }

給定mapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--mapper根標簽 namespace,命令空間:保證命名空間唯一,一般是對應的mapper.java的包全路徑--> <mapper namespace="org.example.mapper.StudentMapper"> </mapper>

全局配置文件中引入mapper.xml

<mappers><mapper resource="mapper/StudentMapper.xml"/><mapper resource="mapper/ClassMapper.xml"/></mappers>

在接口文件中通過注解完成CRUD操作

/*** @Select 注解即xml配置文件中select標簽** @Results注解和xml 配置文件中ResultMap標簽使用類似*/@Results(id = "studentResult",value = {//column 為數據庫中列明 可以不區分大小寫//property 為pojo中類的屬性 ,需要區分大小寫@Result(column = "s_id" ,property = "s_id"),@Result(column = "s_name",property = "s_name"),@Result(column = "sex", property = "sex"),@Result(column = "birthday", property = "birthday"),@Result(column = "qq",property = "qq"),@Result(column = "c_id",property = "c_id")})//方法上面添加注解注解內容為mysql語句@Select("select * from student where s_id = #{id}")public Student selectUserById(int id);

測試方法和xml形式相同

顯示執行細節日志

log4j日志

在資源路徑下創建log4j.properties

## debug 級別 log4j.rootLogger=DEBUG,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd-HH\:mm\:ss,SSS} [%t] [%c] [%p] - %m%n log4j.logger.com.tulun=DEBUG /##輸出sql 語句 log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG</strong>

pom.xml中引入log4j依賴

<!--日志--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.15</version></dependency>

打印細節

總結

以上是生活随笔為你收集整理的Mybatis使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天天插天天干 | 国产精品无码久久久久一区二区 | 大帝av| 男女被到爽流尿 | 亚洲国产精品无码久久久 | 免费av在线播放 | 欧美日韩国产一区二区三区在线观看 | 亚洲精品一区二区二区 | 可以免费看的av毛片 | 欧美日韩一卡 | 久久精品人妻av一区二区三区 | 中国女人毛片 | 亚洲精品水蜜桃 | 国产成人在线观看免费网站 | 黑人3p波多野结衣在线观看 | 丁香花电影在线观看免费高清 | 一级片视频免费观看 | 国产精选视频 | 婷婷欧美 | 成人av免费网站 | 一本色道久久综合狠狠躁的推荐 | 鲁一鲁av | 国产a视频| 中国无码人妻丰满熟妇啪啪软件 | 亚洲福利在线播放 | 久草中文网 | 国产精品熟女一区二区不卡 | 成人在线激情 | 午夜视频在线 | 国产亚洲欧美一区二区 | 国产97色在线 | 国产 | 一区二区三区在线观看av | 青青草视频污 | 日韩一级免费看 | 最新色网址| 亚洲一二三| 亚洲久久视频 | 欧美性xxxxx| 麻豆亚洲av成人无码久久精品 | 色图综合网 | 国产在线高清 | 黄色91免费版 | 和黑帮大佬的365 | 少妇一区二区三区四区 | 国产高清不卡一区 | 国产第一页精品 | 香蕉人妻av久久久久天天 | 丁香啪啪综合成人亚洲 | 日日日日日日 | 少妇69xx | 亚洲成人99| 人人干人人干人人干 | 亚洲成a人片777777久久 | youjizz.com国产| 午夜寂寞影院在线观看 | 日韩Av无码精品 | 久久国产福利 | 夜夜爱爱 | 亚洲乱妇 | 久久久久久午夜 | 日本网站黄色 | 国产老女人乱淫免费 | 日本中出视频 | 日韩人妻无码精品久久免费 | 亚洲欧美综合在线观看 | 欧洲性生活片 | 中文字幕日韩精品在线观看 | 91日本在线观看 | 好色先生tv官网 | 成人综合一区二区 | 成 人片 黄 色 大 片 | 男女吻胸做爰摸下身 | 亚洲av无码久久精品狠狠爱浪潮 | 亚洲一区二区三区四区在线观看 | 国内成人自拍视频 | 精品国产乱码久久久久久影片 | 精品少妇一区二区三区在线观看 | 久久综合伊人77777麻豆 | 国产又黄又猛的视频 | 麻豆视频免费在线 | 国产自产一区二区 | 影音先锋黄色资源 | 国产精品久久久免费视频 | 欧美a√在线 | 黄色三级视频 | 亚洲视频1 | 国产呻吟av | 蜜臀人妻四季av一区二区不卡 | 日本人六九视频 | 国产又粗又黄视频 | 久久精品一区二区免费播放 | 误杀1电影免费观看高清完整版 | 国产九九久久 | 亚洲wwwwww| 九九久久综合 | 久久777 | 国产夫妻一区 | 伊人55 | 欧美一区二区三区在线观看 |