亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用MyBatis框架實現增刪改查操作

發布時間:2023-05-05 09:54:20 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

今天小編給大家分享一下怎么使用MyBatis框架實現增刪改查操作的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

mybatis 介紹

  • mybatis 本是apache的一個開源項目iBatis,
    2010年這個項目由apache遷移到了googlecode,并且改名為MyBatis,2013年11月遷移到Github。

  • MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。

  • MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。

  • MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(普通的 Java對象)映射成數據庫中的記錄

代碼演示

  • 所需環境

  • jdk1.8.0_91

  • mysql-5.7.29

  • apache-maven-3.6.3

  • 創建數據庫

CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`name`,`pwd`) values (1,'張三','123456'),(2,'李四','abcdef'),(3,'王五','987654');
  • 使用idea創建項目并導入導入mybatis所需jar包

<dependencies>
        <!--mysql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!--mybatis包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--junit 測試包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
  • 編寫mybatis核心配置文件

該配置文件主要是配置連接mysql的基本信息及注冊mapper(具體配置參考官方文檔)

<?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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/xiezhr/Dao/UserMapper.xml"></mapper>
    </mappers>
</configuration>
  • 編寫mybatis工具類

查看官方文檔,我們這里要封裝一個工具類生成SqlSession對象,SqlSession用于后面的執行sql

package com.xiezhr.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MysqlUtil {

    private static SqlSessionFactory sqlSessionFactory;
    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }


}
  • 創建對應數據庫表的實體類

各個屬性得命名必須與數據庫字段一一對應,具體如下所示,數據庫對應字段為id,name,pwd

package com.xiezhr.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public User() {
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}
  • 編寫Mapper接口

該接口對應原來的dao,具體代碼如下

package com.xiezhr.dao;

import com.xiezhr.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}
  • 編寫Mapper.xml 文件

由于我們使用了mybatis,所以這的xml文件相當于我們原來dao得實現類daoimpl。namespace屬性對應著接口,不能寫錯,標簽表示是個查詢語句。id 屬性對應著接口的方法,result Type代表返回得類型,即對應這pojo實體。具體代碼如下

<?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.xiezhr.dao.UserMapper">
    <select id="getUserList" resultType="com.xiezhr.pojo.User">
     select * from mybatis.user;
    </select>
</mapper>
  • 到這一步我們第一個mybatis實現查詢就基本大功告成了,接下來就要編寫測試類測試我們寫得代碼

package com.xiezhr.dao;

import com.xiezhr.pojo.User;
import com.xiezhr.util.MysqlUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class TestUserDao {
    @Test
    public void selectUser(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }

    }
}

經過測試后輸出測試結果

D:\Java\jdk1.8.0_91\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=54576:D:\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar;D:\JetBrains\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit5-rt.jar;D:\JetBrains\IntelliJ IDEA 2019.3.3\plugins\junit\lib\junit-rt.jar;D:\Java\jdk1.8.0_91\jre\lib\charsets.jar;D:\Java\jdk1.8.0_91\jre\lib\deploy.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_91\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_91\jre\lib\javaws.jar;D:\Java\jdk1.8.0_91\jre\lib\jce.jar;D:\Java\jdk1.8.0_91\jre\lib\jfr.jar;D:\Java\jdk1.8.0_91\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_91\jre\lib\jsse.jar;D:\Java\jdk1.8.0_91\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_91\jre\lib\plugin.jar;D:\Java\jdk1.8.0_91\jre\lib\resources.jar;D:\Java\jdk1.8.0_91\jre\lib\rt.jar;F:\workspace_idea\Mybatis-test\mybatis-01\target\test-classes;F:\workspace_idea\Mybatis-test\mybatis-01\target\classes;D:\maven\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar;D:\maven\repository\org\mybatis\mybatis\3.5.2\mybatis-3.5.2.jar;D:\maven\repository\junit\junit\4.12\junit-4.12.jar;D:\maven\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.xiezhr.dao.TestUserDao,selectUser
Tue Apr 14 22:54:48 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}
User{id=2, name='李四', pwd='123456'}
User{id=3, name='王五', pwd='123456'}

擴展

  • 根據id查詢用戶

  • 1.在UserMapper接口中添加相應的方法selectUserById(id)

public interface UserMapper {
    //根據ID查詢用戶
    User selectUserById(int id);
}
  • 2.在UserMapper.xml 中添加相應select 語句

<mapper namespace="com.xiezhr.dao.UserMapper">
    <select id="selectUserById" parameterType="int" resultType="com.xiezhr.pojo.User">
        select * from mybatis.user where id = #{id}
    </select>
</mapper>
  • 3.添加測試類

@Test
    public void selectUserByid(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectUserById(1);
        System.out.println(user);
    }

測試通過

Wed Apr 15 23:08:00 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}
  • 根據用戶姓名密碼查詢用戶信息

  • 1.在UserMapper接口中添加方法

public interface UserMapper {
    //根據用戶名密碼查詢用戶信息
    User selectUserByNP(@Param("name") String name,@Param("pwd") String pwd);
}
  • 2.在UserMapper.xml 中添加select語句

<mapper namespace="com.xiezhr.dao.UserMapper">
    <select id="selectUserByNP" resultType="com.xiezhr.pojo.User">
        select * from mybatis.user where name=#{name} and pwd=#{pwd}
    </select>
</mapper>
  • 3.添加測試類

    @Test
    public void selectUserByNP(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectUserByNP("張三","322334");
        System.out.println(user);
    }

測試成功

Wed Apr 15 23:24:02 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
User{id=1, name='張三', pwd='322334'}

以上通過用戶名和密碼查詢用戶,傳參還可以通過萬能的map實現,具體代碼如下

  • 1.向UserMapper接口中添加方法

public interface UserMapper {
    //根據用戶名和密碼查詢用戶信息
    User queryUserByNP(Map<String,Object> map);
}
  • 2.向UserMapper.xml 中添加select語句,其中參數類型為map

<mapper namespace="com.xiezhr.dao.UserMapper">
    <select id="queryUserByNP" parameterType="map" resultType="com.xiezhr.pojo.User">
        select * from mybatis.user where name=#{name} and pwd=#{pwd}
    </select>
</mapper>
  • 添加測試,在使用過程中,map的key對應著UserMapper.xml中取值,map在put值時候沒有先后順序

 @Test
    public void queryUserByNp(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name","張三");
        map.put("pwd","322334");
        User user = mapper.queryUserByNP(map);
        System.out.println(user);
    }
  • 模糊查詢實現

  • 1.在Java代碼中添加sql通配符

string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
  • 2.在sql語句中拼接通配符,會引起sql注入

string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
    select * from foo where bar like "%"#{value}"%"
</select>

接下來我們分別來實現insert、update、delete

insert

  • 在之前編寫的UserMapper 接口中添加增加方法

public interface UserMapper {
    //添加一條用戶信息
    int addUser(User user);
}

2.在UserMapper.xml 中寫insert 語句

<insert id="addUser" parameterType="com.xiezhr.pojo.User">
        insert into mybatis.user values(#{id},#{name},#{pwd})
</insert>
  • 添加測試類
    insert、update、delete 一定要提交事務,千萬千萬不能忘記了

@Test
    public void addUser(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(4, "大頭兒子", "123456");
        mapper.addUser(user);
        sqlSession.commit();  //增刪改一定要提交事務
        sqlSession.close();
    }

update

  • 在之前編寫的UserMapper 接口中添加update方法

public interface UserMapper {
    //修改一條記錄
    int updateUserById(int id);
}

2.在UserMapper.xml 中寫insert 語句

<update id="updateUserById" parameterType="int">
        update mybatis.user set name='小頭爸爸' where id=#{id}
</update>
  • 添加測試類
    insert、update、delete 一定要提交事務,千萬千萬不能忘記了

    @Test
    public void updateUserById(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUserById(4);
        sqlSession.commit();  //增刪改一定要提交事務
        sqlSession.close();
    }

delete

  • 在之前編寫的UserMapper 接口中添加delete方法

public interface UserMapper {
    //根據ID刪除一條記錄
    int deleteUserById(int id);
}
}

2.在UserMapper.xml 中寫insert 語句

<delete id="deleteUserById" parameterType="int">
        delete from mybatis.user where id=#{id}
</delete>
  • 添加測試類
    insert、update、delete 一定要提交事務,千萬千萬不能忘記了

    @Test
    public void deletUserById(){
        SqlSession sqlSession = MysqlUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUserById(4);
        sqlSession.commit();  //增刪改一定要提交事務
        sqlSession.close();
    }

注意

  • 所有的insert、update、delete 必須要提交事務

  • 接口中所有的普通參數盡量寫上@Param 參數,尤其是多個參數的時候一定要寫上

  • 有些時候由于業務需要需要可通過map傳值

  • 為了規范在sql配置文件中即本例的UserMapper.xml 中select inset delete update 盡量寫上Parameter參數和resultType

可能出現問題說明:Maven靜態資源過濾問題

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

在靜態資源的過濾中,基本的元素有三種:

  • directory:指定資源所在的目錄,這個目錄的路徑是相對于pom.xml文件;

  • includes:指定要包含哪些文件,其中包括inlcude子節點來指定匹配的模式;

  • excludes:指定要排除哪些文件,其中包括exclude子節點來指定匹配的模式;

  • filtering:指定哪些文件需要過濾,這個過濾的目的是為了替換其中的占位符${},其中的占位符屬性在pom.xml文件中的中指定。

以上就是“怎么使用MyBatis框架實現增刪改查操作”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝| 阿瓦提县| 介休市| 成安县| 屏南县| 姜堰市| 肥东县| 疏附县| 民勤县| 凤翔县| 霍邱县| 陇南市| 锡林浩特市| 株洲县| 古浪县| 南京市| 湖南省| 华亭县| 鄂托克旗| 雅江县| 乌鲁木齐县| 长汀县| 乌什县| 赞皇县| 青浦区| 尉氏县| 怀化市| 林州市| 龙岩市| 甘南县| 芮城县| 玉树县| 崇州市| 章丘市| 叶城县| 普定县| 宁城县| 贡觉县| 克什克腾旗| 吴忠市| 嘉善县|