最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

思路流程:搭建環(huán)境–>導(dǎo)入Mybatis—>編寫代碼—>測(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>

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

編寫MyBatis工具類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í)體類

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 + '\'' +
                '}';
    }
}

編寫Mapper接口類

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

編寫Mapper.xml配置文件

namespace 十分重要,不能寫錯(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>

編寫測(cè)試類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中的名稱為對(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ù)類型 。【萬(wàn)能的Map,可以多嘗試使用】
  • resultType
  • SQL語(yǔ)句返回值類型?!就暾念惷蛘邉e名】

需求:根據(jù)id查詢用戶

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

package com.sxau.dao;
import com.sxau.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
    //查詢?nèi)坑脩?
    List<User> getUserList();
    //根據(jù)id查詢用戶
    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è)試類中進(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ù) 密碼用戶名 查詢用戶信息

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

  • 在接口方法的參數(shù)前加 @Param屬性
  • Sql語(yǔ)句編寫的時(shí)候,直接取@Param中設(shè)置的值即可,不需要單獨(dú)設(shè)置參數(shù)類型
//通過(guò)密碼和名字查詢用戶
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);

編寫sql語(yǔ)句的時(shí)候,需要傳遞參數(shù)類型,參數(shù)類型為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è)用戶

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

//添加用戶
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è)試類中進(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)簽差不多!

需求:修改用戶的信息

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

//修改用戶
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è)試類中進(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è)用戶

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

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

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

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

? 3.在測(cè)試類中進(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ù),盡量都寫上@Param參數(shù),尤其是多個(gè)參數(shù)時(shí),必須寫上!
  • 根據(jù)業(yè)務(wù)的需求,可以考慮使用map傳遞參數(shù)!
  • 為了規(guī)范操作,在SQL的配置文件中,我們盡量將Parameter參數(shù)和resultType都寫上!

2.6、拓展思維

在MyBatis中模糊查詢like語(yǔ)句該怎么寫?

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

//like模糊查詢
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模糊查詢
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持久層框架入門之CRUD實(shí)例的文章就介紹到這了,更多相關(guān)mybatis入門crud內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Graphics實(shí)現(xiàn)界面顯示文字并換行

    Java Graphics實(shí)現(xiàn)界面顯示文字并換行

    Java中Graphics類提供了一些基本的幾何圖形繪制方法,本文將利用Graphics實(shí)現(xiàn)界面顯示文字并換行效果,感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-08-08
  • mybatis和mybatis-plus同時(shí)使用的坑

    mybatis和mybatis-plus同時(shí)使用的坑

    本文主要介紹了mybatis和mybatis-plus同時(shí)使用的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java中數(shù)組的定義與使用詳解

    Java中數(shù)組的定義與使用詳解

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義與使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • Java基于迭代器模式實(shí)現(xiàn)的訪問(wèn)人員列表操作示例

    Java基于迭代器模式實(shí)現(xiàn)的訪問(wèn)人員列表操作示例

    這篇文章主要介紹了Java基于迭代器模式實(shí)現(xiàn)的訪問(wèn)人員列表操作,簡(jiǎn)單描述了迭代器模式的概念、原理以及使用迭代器模式實(shí)現(xiàn)訪問(wèn)人員列表的相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化

    詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化

    本篇文章主要介紹了詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • Kotlin 的注解類詳解及實(shí)例

    Kotlin 的注解類詳解及實(shí)例

    這篇文章主要介紹了Kotlin 的注解類詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 怎么把本地jar包放入本地maven倉(cāng)庫(kù)和遠(yuǎn)程私服倉(cāng)庫(kù)

    怎么把本地jar包放入本地maven倉(cāng)庫(kù)和遠(yuǎn)程私服倉(cāng)庫(kù)

    這篇文章主要介紹了怎么把本地jar包放入本地maven倉(cāng)庫(kù)和遠(yuǎn)程私服倉(cāng)庫(kù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java高級(jí)特性

    Java高級(jí)特性

    這篇文章主要介紹了Java高級(jí)特性,需要的朋友可以參考下
    2017-04-04
  • Spring?Boot:Idea從零開始初始化后臺(tái)項(xiàng)目的教程

    Spring?Boot:Idea從零開始初始化后臺(tái)項(xiàng)目的教程

    這篇文章主要介紹了Spring?Boot:Idea從零開始初始化后臺(tái)項(xiàng)目的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳細(xì)聊一聊JavaWeb中的Request和Response

    詳細(xì)聊一聊JavaWeb中的Request和Response

    這篇文章主要給大家介紹了關(guān)于JavaWeb中Request和Response的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

钟山县| 凭祥市| 岳阳县| 大名县| 太保市| 称多县| 三明市| 宁乡县| 天门市| 上高县| 新田县| 逊克县| 怀宁县| 长汀县| 隆德县| 雷州市| 江阴市| 合山市| 天长市| 江口县| 长兴县| 耿马| 常山县| 阳春市| 宁安市| 康定县| 吉首市| 五峰| 井冈山市| 垦利县| 中卫市| 环江| 清水县| 正蓝旗| 兴海县| 永胜县| 赣州市| 常宁市| 靖江市| 静安区| 陈巴尔虎旗|