欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis持久層框架入門(mén)之CRUD實(shí)例代碼詳解

 更新時(shí)間:2022年05月05日 10:28:49   作者:java廠(chǎng)長(zhǎng)  
這篇文章主要介紹了Mybatis持久層框架入門(mén)之CRUD實(shí)例,需要的朋友可以參考下

1、MyBatis第一個(gè)程序

思路流程:搭建環(huán)境–>導(dǎo)入Mybatis—>編寫(xiě)代碼—>測(cè)試

1.1、代碼演示

? 1.搭建實(shí)驗(yàn)數(shù)據(jù)庫(kù)

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,'hhh','123456'),(2,'張
三','abcdef'),(3,'李四','987654');

? 2.導(dǎo)入MyBatis相關(guān) jar 包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

編寫(xiě)MyBatis核心配置文件mybatis-config.xml

<?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核心環(huán)境-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                數(shù)據(jù)庫(kù)8.0以上useSSL=false-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/sxau/dao/UserMapper.xml"/>
    </mappers>
</configuration>

編寫(xiě)MyBatis工具類(lèi)MybatisUtils.java

package com.sxau.utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtils{
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

創(chuàng)建實(shí)體類(lèi)

package com.sxau.pojo;
public class User {
    private int id;
    private String name;
    private String pwd;
    public User() {
    }
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

編寫(xiě)Mapper接口類(lèi)

package com.sxau.dao;
import com.sxau.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
    List<User> getUserList();
}

編寫(xiě)Mapper.xml配置文件

namespace 十分重要,不能寫(xiě)錯(cuò)!

<?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.sxau.dao.UserMapper">
    <select id="getUserList" resultType="com.sxau.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

編寫(xiě)測(cè)試類(lèi)Junit 包測(cè)試

public class MyTest {
    @Test
    public void  test(){
        //第一步: 獲得sqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //方式一:執(zhí)行SQL語(yǔ)句 getmapper
        //        UserDao mapper = sqlSession.getMapper(UserDao.class);
        //        List<User> userList = mapper.getUserList();
        //方式二:
        List<User> userList = sqlSession.selectList("com.sxau.dao.UserMapper.getUserList");
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}

運(yùn)行測(cè)試

image-20220213103037883

1.2、問(wèn)題說(shuō)明

可能出現(xiàn)問(wèn)題說(shuō)明:Maven靜態(tài)資源過(guò)濾問(wèn)題

在pom.xml中加入以下代碼塊

<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>

2、CRUD操作

2.1、namespace

  • 將上面案例中的UserMapper接口改名為 UserDao;
  • 將UserMapper.xml中的namespace改為為UserDao的路徑 .
  • 再次測(cè)試

結(jié)論

配置文件中namespace中的名稱(chēng)為對(duì)應(yīng)Mapper接口或者Dao接口的完整包名,必須一致!

2.2、select

  • select標(biāo)簽是mybatis中最常用的標(biāo)簽之一
  • select語(yǔ)句有很多屬性可以詳細(xì)配置每一條SQL語(yǔ)句
  • id
  • 命名空間中唯一的標(biāo)識(shí)符
  • 接口中的方法名與映射文件中的SQL語(yǔ)句ID 一一對(duì)應(yīng)
  • parameterType
  • 傳入SQL語(yǔ)句的參數(shù)類(lèi)型 ?!救f(wàn)能的Map,可以多嘗試使用】
  • resultType
  • SQL語(yǔ)句返回值類(lèi)型。【完整的類(lèi)名或者別名】

需求:根據(jù)id查詢(xún)用戶(hù)

在UserMapper中添加對(duì)應(yīng)方法

package com.sxau.dao;
import com.sxau.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
    //查詢(xún)?nèi)坑脩?hù)
    List<User> getUserList();
    //根據(jù)id查詢(xún)用戶(hù)
    User getUserById(int id);
}

在UserMapper.xml中添加Select語(yǔ)句

<select id="getUserById" parameterType="int" resultType="com.sxau.pojo.User">
    select * from mybatis.user where id = #{id}
</select>

測(cè)試類(lèi)中進(jìn)行測(cè)試

Test
public void getUserById(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserById(1);
    System.out.println(user);
    sqlSession.close();
}

小練習(xí):根據(jù) 密碼用戶(hù)名 查詢(xún)用戶(hù)信息

思路一:直接在方法中傳遞參數(shù)

  • 在接口方法的參數(shù)前加 @Param屬性
  • Sql語(yǔ)句編寫(xiě)的時(shí)候,直接取@Param中設(shè)置的值即可,不需要單獨(dú)設(shè)置參數(shù)類(lèi)型
//通過(guò)密碼和名字查詢(xún)用戶(hù)
User selectUserByNameAndPwd(@Param("username") String username,@Param("pwd") String pwd);

/*
<select id="selectUserByNameAndPwd" resultType="com.sxau.pojo.User">
	select * from user where name = #{username} and pwd = #{pwd}
</select>
*/

思路二:使用萬(wàn)能的Map

? 1. 在接口方法中,參數(shù)直接傳遞Map;

User selectUserByNP2(Map<String,Object> map);

編寫(xiě)sql語(yǔ)句的時(shí)候,需要傳遞參數(shù)類(lèi)型,參數(shù)類(lèi)型為map

<select id="selectUserByNP2" parameterType="map"
    resultType="com.sxau.pojo.User">
    select * from user where name = #{username} and pwd = #{pwd}
</select>

在使用方法的時(shí)候,Map的 key 為 sql中取的值即可,沒(méi)有順序要求!

@Test
public void selectUserByNP2(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("username","hhh");
    map.put("pwd","123456");
    User user = mapper.selectUserByNP2(map);
    //提交事務(wù)
    sqlSession.commit();
    sqlSession.close();
}

image-20220213110008457

如果參數(shù)過(guò)多,我們可以考慮直接使用Map來(lái)實(shí)現(xiàn)參數(shù)傳遞,如果參數(shù)比較少,直接傳遞參數(shù)即可

2.3、insert

我們一般使用insert標(biāo)簽進(jìn)行插入操作,它的配置和select標(biāo)簽差不多!

需求:給數(shù)據(jù)庫(kù)增加一個(gè)用戶(hù)

在UserMapper接口中添加對(duì)應(yīng)的方法

//添加用戶(hù)
int addUser(User user);

在UserMapper.xml中添加insert語(yǔ)句

<!--對(duì)象中的屬性,可以直接取出來(lái)-->
<insert id="addUser" parameterType="com.sxau.pojo.User">
    insert into mybatis.user(id, name, pwd) VALUES (#{id},#{name},#{pwd});
</insert>

? 3.在測(cè)試類(lèi)中進(jìn)行測(cè)試

//增刪改 需要提交事務(wù)
@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.addUser(new User(4,"hahah","123123"));
    //提交事務(wù)
    sqlSession.commit();
    sqlSession.close();
}

image-20220213105940258

注意點(diǎn):增、刪、改操作需要提交事務(wù)!

2.4、update

我們一般使用update標(biāo)簽進(jìn)行更新操作,它的配置和select標(biāo)簽差不多!

需求:修改用戶(hù)的信息

在UserMapper接口中添加對(duì)應(yīng)的方法

//修改用戶(hù)
int updateUser(User user);

在UserMapper.xml中添加update語(yǔ)句

<update id="updateUser" parameterType="com.sxau.pojo.User">
    update mybatis.user
    set  name=#{name},pwd=#{pwd}
    where id=#{id};
</update>

? 3.在測(cè)試類(lèi)中進(jìn)行測(cè)試

@Test
public void updateUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.updateUser(new User(4,"qqq","123123"));
    sqlSession.commit();
    sqlSession.close();
}

image-20220213115738870

2.5、delete

我們一般使用delete標(biāo)簽進(jìn)行刪除操作,它的配置和select標(biāo)簽差不多!

需求:根據(jù)id刪除一個(gè)用戶(hù)

在UserMapper接口中添加對(duì)應(yīng)的方法

根據(jù)id刪除用戶(hù)
int deleteUser(int id);

在UserMapper.xml中添加delete語(yǔ)句

<delete id="deleteUser" parameterType="int">
    delete from mybatis.user where id=#{id}
</delete>

? 3.在測(cè)試類(lèi)中進(jìn)行測(cè)試

@Test
public void deleteUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.deleteUser(4);
    sqlSession.commit();
    sqlSession.close();
}

image-20220213120024393

小結(jié)

  • 所有的增刪改操作都需要提交事務(wù)!
  • 接口所有的普通參數(shù),盡量都寫(xiě)上@Param參數(shù),尤其是多個(gè)參數(shù)時(shí),必須寫(xiě)上!
  • 根據(jù)業(yè)務(wù)的需求,可以考慮使用map傳遞參數(shù)!
  • 為了規(guī)范操作,在SQL的配置文件中,我們盡量將Parameter參數(shù)和resultType都寫(xiě)上!

2.6、拓展思維

在MyBatis中模糊查詢(xún)like語(yǔ)句該怎么寫(xiě)?

第1種:在Java代碼中添加sql通配符。

//like模糊查詢(xún)
List<User> getUserLike(String value);

<select id="getUserLike" resultType="com.sxau.pojo.User">
    select * from mybatis.user where name like #{value}
</select>
    
@Test
public void getUserLike(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    List<User> userLike = mapper.getUserLike("%李%");
    for (User user : userLike) {
        System.out.println(user);
    }
}

第2種:在sql語(yǔ)句中拼接通配符,會(huì)引起sql注入

//like模糊查詢(xún)
List<User> getUserLike(String value);
<select id=”getUserLike”>
	select * from foo where bar like "%"#{value}"%"
</select>
    
@Test
public void getUserLike(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userLike = mapper.getUserLike("李");
    for (User user : userLike) {
        System.out.println(user);
    }
}

到此這篇關(guān)于Mybatis持久層框架入門(mén)之CRUD實(shí)例的文章就介紹到這了,更多相關(guān)mybatis入門(mén)crud內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線(xiàn)程之等待隊(duì)列DelayQueue詳解

    Java多線(xiàn)程之等待隊(duì)列DelayQueue詳解

    這篇文章主要介紹了Java多線(xiàn)程之等待隊(duì)列DelayQueue詳解,    DelayQueue被稱(chēng)作"等待隊(duì)列"或"JDK延遲隊(duì)列",存放著實(shí)現(xiàn)了Delayed接口的對(duì)象,對(duì)象需要設(shè)置到期時(shí)間,當(dāng)且僅當(dāng)對(duì)象到期,才能夠從隊(duì)列中被取走(并非一定被取走),需要的朋友可以參考下
    2023-12-12
  • Java實(shí)現(xiàn)把文件壓縮成zip文件的示例代碼

    Java實(shí)現(xiàn)把文件壓縮成zip文件的示例代碼

    這篇文章主要為大家介紹了如何通過(guò)Java語(yǔ)言實(shí)現(xiàn)將文件壓縮成zip文件,本文中示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • JDK  keytool證書(shū)工具功能代碼解析

    JDK keytool證書(shū)工具功能代碼解析

    這篇文章主要介紹了JDK keytool證書(shū)工具功能代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Spring IOC 能降低耦合的問(wèn)題分析及解決方法

    Spring IOC 能降低耦合的問(wèn)題分析及解決方法

    這篇文章主要介紹了Spring IOC 為什么能降低耦合,依賴(lài)注入是調(diào)用者僅通過(guò)聲明某個(gè)組件就可以獲得組件的控制權(quán),而對(duì)該組件的依賴(lài)關(guān)系管理、查找、加載由外部完成,需要的朋友可以參考下
    2022-06-06
  • java如何自動(dòng)補(bǔ)齊數(shù)值至指定位數(shù)

    java如何自動(dòng)補(bǔ)齊數(shù)值至指定位數(shù)

    這篇文章主要介紹了java如何自動(dòng)補(bǔ)齊數(shù)值至指定位數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 代碼分析Spring MVC的工作原理

    代碼分析Spring MVC的工作原理

    在本篇文章里小編給大家整理了關(guān)于Spring MVC的工作原理的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼內(nèi)容,需要的朋友們可以參考下。
    2019-06-06
  • MyBatis創(chuàng)建存儲(chǔ)過(guò)程的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    MyBatis創(chuàng)建存儲(chǔ)過(guò)程的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    本節(jié)需要用到的有2部分,第一部分是如何在Derby中創(chuàng)建存儲(chǔ)過(guò)程,第二部分是如何在Mybatis中調(diào)用存儲(chǔ)過(guò)程,具體實(shí)例代碼大家參考下本文吧
    2017-09-09
  • java中Class.forName方法的作用詳解

    java中Class.forName方法的作用詳解

    Class.forName(xxx.xx.xx) 返回的是一個(gè)類(lèi),但Class.forName方法的作用到底是什么終?下面這篇文章就來(lái)給大家詳細(xì)介紹了關(guān)于java中Class.forName方法的作用,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • 深入分析JAVA Synchronized關(guān)鍵字

    深入分析JAVA Synchronized關(guān)鍵字

    這篇文章主要介紹了析JAVA Synchronized關(guān)鍵字的相關(guān)知識(shí),文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Spring Boot整合FTPClient線(xiàn)程池的實(shí)現(xiàn)示例

    Spring Boot整合FTPClient線(xiàn)程池的實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring Boot整合FTPClient線(xiàn)程池的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論