日韩性视频-久久久蜜桃-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网| 一道本在线视频 | 亚洲免费在线视频 | 男女网站视频 | 美女视频一区二区 | 视频在线观看免费 | 精品国产无码一区二区三区 | 在线成人欧美 | 日本黄色特级片 | 8x8ⅹ成人永久免费视频 | 精品人妻一区二区三区日产乱码卜 | 视频成人免费 | 日日摸夜夜添狠狠添欧美 | 91精品国产成人 | 成人在线91 | 国产91国语对白在线 | 性色av一区二区三区四区 | 制服丝袜亚洲 | 国产尤物在线 | 免费成人av在线播放 | 好吊视频一区二区三区四区 | 色黄视频在线观看 | 欧美极品videos精品 | 美女扒开内裤让男人桶 | 91成人免费在线 | 黄色的网站免费观看 | www.蜜臀 | 卡一卡二在线视频 | 美女久久久久久久 | av中文字幕一区二区三区 | 青青草97国产精品免费观看 | 国产精品成人一区二区三区 | 手机看片日韩欧美 | 精品久久久网站 | 午夜av网站| 91国产丝袜播放在线 | 五月天国产在线 | 国产区精品视频 | 女王人厕视频2ⅴk | 国产免费福利视频 | 久久久精品国产sm调教 | 欧美一区二区福利 | 欧美91在线 | 在线观看免费日韩av | 亚洲免费网 | 91精品国自产在线观看 | 伊人222成人综合网 亚洲日本中文 | 最近国语视频在线观看免费播放 | 精品国产乱码久久久久久蜜臀网站 | 亚洲欧美制服丝袜 | 中文亚洲av片不卡在线观看 | 奇米影视第四色888 免费观看a毛片 | 337p粉嫩色噜噜噜大肥臀 | 成人综合婷婷国产精品久久 | 一区二区三区久久久久 | 天天做日日做 | 裸体黄色片 | 色秀视频网| 三级欧美韩日大片在线看 | av男人资源 | 色呦呦在线视频 | 亚洲天堂网站在线 | 中文字幕久久网 | 国产成人精品一区二区三区无码熬 | а√天堂资源在线 | 日本免费色 | 黄页网站免费在线观看 | 麻豆国产精品视频 | 污动漫网站 | 四虎在线播放 | 欧美亚洲视频 | 免费看特级毛片 | 免费观看成人鲁鲁鲁鲁鲁视频 | 在线欧美激情 | 无码人妻久久一区二区三区不卡 | 欧美日韩视频免费 | 国产麻豆精品在线 | 免费簧片在线观看 | 欧美日韩在线播放 | 色噜噜狠狠成人中文 | jizz教师 | 456av| 久久国产经典 | 亚洲视频你懂的 | 88av在线| 国产偷v国产偷v亚洲高清 | 天堂资源中文 | 第四色影音先锋 | 97超碰人人 | 欧美色交 | 尹人av| 国产日韩一区二区三区在线观看 | 青青草小视频 | 热久久亚洲 | 久久精品综合 | 天堂a√在线 | 黄色一区二区三区四区 |