天天看點

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html

部落格裡面所有紅字均為本部落客為小萌新們解答報錯的地方,如果可以的話盛唐希望親們的點贊呢

【MyBatis介紹】

MyBatis 是支援普通 SQL 查詢,存儲過程和進階映射的優秀持久層架構。
MyBatis 消除 了幾乎所有的 JDBC 代碼和參數的手工設定以及結果集的檢索。
MyBatis 使用簡單的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 對象)映射成資料庫中的記錄。

每個MyBatis應用程式主要都是使用SqlSessionFactory執行個體的,一個SqlSessionFactory執行個體可以通過SqlSessionFactoryBuilder獲得。
SqlSessionFactoryBuilder可以從一個xml配置檔案或者一個預定義的配置類的執行個體獲得。
 
用xml檔案建構SqlSessionFactory執行個體是非常簡單的事情。推薦在這個配置中使用類路徑資源(classpath resource),但你可以使用任何Reader執行個體,包括用檔案路徑或file://開頭的url建立的執行個體。
MyBatis有一個實用類----Resources,它有很多方法,可以友善地從類路徑及其它位置加載資源。
 
MyBatis 最強大的特性之一就是它的動态語句功能。如果您以前有使用JDBC或者類似架構的經曆,您就會明白把SQL語句條件連接配接在一起是多麼的痛苦,
要確定不能忘記空格或者不要在columns列後面省略一個逗号等。動态語句能夠完全解決掉這些痛苦。盡管與動态SQL一起工作不是在開一個party,但是MyBatis确實能通過在任何映射SQL語句中
      

【步驟】

①擷取MyBatis加包(在😁項目基礎上使用MyBatis)

  在https://mvnrepository.com/上搜尋MyBatis可以選擇相應的版本

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

②在pop.xml中添加以下代碼,管理Mybatis加包

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.0</version>
 </dependency>
           

🌂在Java Resources中建立conf.xml

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

  

④配置資料庫連接配接資訊(盛唐友情提示:下面驅動"com.mysql.cj.Driver"是mysql驅動在10版本以上的驅動名稱,10以下為"com.mysql.jdbc.Driver",同時記得根據自己的mysql版本提前在pom.xml裡面加入mysql驅動的依賴哦,這裡就不做贅述了。)

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             <!-- 配置資料庫連接配接資訊 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                 <property name="url" value="jdbc:mysql://伺服器位址:端口号/資料庫名稱?serverTimezone=GMT%2B8" />
                 <property name="username" value="資料庫使用者名" />
                 <property name="password" value="資料庫密碼" />
             </dataSource>
         </environment>
     </environments>     
     
 </configuration>
           

😭查詢資料庫中S_User表資料----建立對應的實體類

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

  

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】
package com.springdemo.model;
 
 public class User {
 
     public User(String userId, String userName, String userPwd, String userPower) {
         super();
         this.userId = userId;
         this.userName = userName;
         this.userPwd = userPwd;
         this.userPower = userPower;
     }
     
     public User() {
         super();        
     }
 
     private int _key;
     private String userId;
     private String userName;
     private String userPwd;
     private String userPower;
     
     public int get_key() {
         return _key;
     }
 
     public void set_key(int _key) {
         this._key = _key;
     }
 
     public String getUserId() {
         return userId;
     }
 
     public void setUserId(String userId) {
         this.userId = userId;
     }
 
     public String getUserName() {
         return userName;
     }
 
     public void setUserName(String userName) {
         this.userName = userName;
     }
 
     public String getUserPwd() {
         return userPwd;
     }
 
     public void setUserPwd(String userPwd) {
         this.userPwd = userPwd;
     }
 
     public String getUserPower() {
         return userPower;
     }
 
     public void setUserPower(String userPower) {
         this.userPower = userPower;
     }
 
     @Override
     public String toString() {
         return "User [key=" + _key + ",id="+userId+" name=" + userName + ", power=" + userPower + "]";
     }
 }
           

注:建立get ,set,構造函數快捷鍵(右鍵--> source )

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

⑥建立User表Sql查詢映射檔案userMapper.xml

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】
<?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,namespace的值習慣上設定成包名+sql映射檔案名,這樣就能夠保證namespace的值是唯一的
 例如namespace="com.springdemo.mapping.userMapper"就是com.springdemo.mapping(包名)+userMapper(userMapper.xml檔案去除字尾)
  -->
 <mapper namespace="com.springdemo.mapping.userMapper">
     <!-- 在select标簽中編寫查詢的SQL語句, 設定select标簽的id屬性為getUser,id屬性值必須是唯一的,不能夠重複
     使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢傳回的結果集類型
     resultType="com.springdemo.model.User"就表示将查詢結果封裝成一個User類的對象傳回
     User類就是users表所對應的實體類
     -->
  
     <!-- 根據_key查詢得到一個user對象-->
     <select id="getUser" parameterType="int" 
         resultType="com.springdemo.model.User"> <!-- 建立對應user實體類的位置 -->
         select * from S_USER where _key=#{id}
     </select> 
 </mapper>
           

⑦在conf.xml檔案中注冊userMapper.(<configuration>标簽内)

<mappers>
         <!-- 注冊userMapper.xml檔案, 
         userMapper.xml位于com.springdemo.mapping這個包下,是以resource寫成com/springdemo/mapping/userMapper.xml-->
         <mapper resource="com/springdemo/mapping/userMapper.xml"/>
   </mappers>
           

⑧使用Test.java 檔案添加測試

package com.springdemo.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
 import java.util.List;
 
 import com.springdemo.model.User;
 import com.springdemo.tools.DBTools;
 
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
 public class Test {
 
     public static void main(String[] args) throws IOException {
     
         //mybatis的配置檔案
         String resource = "conf.xml";
         //使用類加載器加載mybatis的配置檔案(它也加載關聯的映射檔案)
         
         InputStream is = Resources.getResourceAsStream(resource);
         //建構sqlSession的工廠
        
         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
         //使用MyBatis提供的Resources類加載mybatis的配置檔案(它也加載關聯的映射檔案)
         //Reader reader = Resources.getResourceAsReader(resource); 
         //建構sqlSession的工廠
         //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
         //建立能執行映射檔案中sql的sqlSession
         SqlSession session = sessionFactory.openSession();
         /**
          * 映射sql的辨別字元串,
          * me.gacl.mapping.userMapper是userMapper.xml檔案中mapper标簽的namespace屬性的值,
          * getUser是select标簽的id屬性值,通過select标簽的id屬性值就可以找到要執行的SQL
          */
         
     /* 根據——key查找 */
         String statement = "com.springdemo.mapping.userMapper.getUser";
         //映射sql的辨別字元串,getUser與映射檔案中配置select标簽id一緻
         //執行查詢傳回一個唯一user對象的sql
         User user = session.selectOne(statement,2);
         System.out.println(user);
         
 }
           

盛唐友情提供:sql腳本如下

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for s_user
-- ----------------------------
DROP TABLE IF EXISTS `s_user`;
CREATE TABLE `s_user`  (
  `userId` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `userPwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `userPower` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `_key` int(255) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`_key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;

-- ----------------------------
-- Records of User
-- ----------------------------
INSERT INTO `s_user` VALUES ('1', '1', '1', '1', 1);
INSERT INTO `s_user` VALUES ('2', '2', '2', '2', 2);
INSERT INTO `s_user` VALUES ('wll', 'wll', '123456', '7000', 3);

SET FOREIGN_KEY_CHECKS = 1;
           

⑨執行結果

  

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

盛唐友情提示:這裡如果不了解maven的運作機制的同學會出現如下問題

【轉載】java Mybatis學習---連接配接MySQL資料庫本文轉載自https://www.cnblogs.com/xqz0618/p/javaweb03.html【MyBatis介紹】【步驟】【增删改查】

這個問題是maven項目預設是沒有将未放在resources的檔案com/mapping/userMapper.xml加入項目當中,在pom.xml裡面引用即可

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>com/springdemo/mapping/userMapper.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
           

【增删改查】

  修改userMapper.xml統一管理傳回類型

<resultMap id="userMap" type="com.springdemo.model.User">
         <id property="_key" column="_key" javaType="java.lang.Integer"></id>
         <result property="userId" column="userId" javaType="java.lang.String"></result>
         <result property="userName" column="userName" javaType="java.lang.String"></result>
         <result property="userPwd" column="userPwd" javaType="java.lang.String"></result>
         <result property="userPower" column="userPower" javaType="java.lang.String"> 
 </result>
</resultMap>
           

  resultMap設定對應的實體類

①查詢所有user記錄

   🍕userMapper.xml配置

<select id="selectUser" resultMap="userMap"> 
     select * from s_user 
  </select>
           

  resultMap設定傳回的ReusltMap

  🍔測試java代碼

String stateselect = "com.springdemo.mapping.userMapper.selectUser";
  List<User> userList = session.selectList(stateselect);
  for(int i=0;i<userList.size();i++) {
      System.out.println(userList.get(i));
  }
           

②删除指定user記錄

  🍟userMapper.xml配置

<delete id="deleteUser" parameterType="int">
     delete from S_user where _key=#{_key}  
 </delete>
           

  🌭測試java代碼

String statementdl = "com.springdemo.mapping.userMapper.deleteUser";    
    try {         
        session.delete(statementdl,4);        
        session.commit();
     } catch (Exception e) {
        e.printStackTrace();
        session.rollback();
     }
           

🌂更新user表記錄

  🍿userMapper.xml配置

<update id="updateUser" >
      update S_user set userPwd=#{userName},userPwd=#{userPwd},userPower=#{userPower} where _key=#{_key}
</update>
           

  🥓測試java代碼

String statementup = "com.springdemo.mapping.userMapper.updateUser";
     User userup = new User("wqyx","wqyx", "hhh","超級");
     userup.set_key(2);
     try {         
         session.update(statementup, userup);        
         session.commit();
     } catch (Exception e) {
         e.printStackTrace();
         session.rollback();
     }
           

④新增user表記錄

  🍿userMapper.xml配置

<insert id="insertUser" useGeneratedKeys="true" keyProperty="_key">
        insert into S_USER (userId,userName,userPwd,userPower) values (#{userId},#{userName},#{userPwd},#{userPower})
</insert>
           

  🥓測試java代碼

String statementIn = "com.springdemo.mapping.userMapper.insertUser";
  User userin = new User("wll","wll", "123456","7000");
  try {         
       session.insert(statementIn,userin);        
       session.commit();
  } catch (Exception e) {
       e.printStackTrace();
       session.rollback();
  }