亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Mybatis 基本使用過(guò)程(推薦)

 更新時(shí)間:2024年09月23日 11:27:18   作者:JOJO___  
Mybatis是一個(gè)半自動(dòng)ORM(Object Relational Mapping)框架,它可以簡(jiǎn)化數(shù)據(jù)庫(kù)編程,讓開發(fā)者更專注于SQL本身,本文給大家介紹Spring Mybatis 基本使用過(guò)程,感興趣的朋友跟隨小編一起看看吧

1. 簡(jiǎn)介

Mybatis庫(kù)可以簡(jiǎn)化數(shù)據(jù)庫(kù)的操作,專注于sql語(yǔ)句。

2.搭建步驟

2.1 在pom.xml引入mybatis

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>

2.2 在resources下新建mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Mapper 3.0/EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>&lt;!&ndash; 開啟mybatis的日志輸出 &ndash;&gt;-->
        <setting name="mapUnderscoreToCamelCase" value="true"/><!-- 開啟駝峰式自動(dòng)映射 a_big => aBig -->
    </settings>
    <typeAliases>
        <typeAlias alias="goods" type="com.jojo.pojo.Goods"/><!-- 單獨(dú)設(shè)置別名 -->
        <package name="com.jojo.pojo"/><!-- 批量設(shè)置別名, com.jojo.pojo包下的所有類名的別名為類的首字母小寫-->
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>  <!-- 自動(dòng)開啟事務(wù) -->
            <dataSource type="POOLED"><!-- mybatis維護(hù)連接池 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
                <property name="username" value="root"/>
                <property name="password" value="a12345678"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 指定mapper xml文件的位置 -->
        <mapper resource="mappers/GoodsMapper.xml"/>
    </mappers>
</configuration>

2.3 在resources/mapper下新建mapper的xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0/EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jojo.mapper.GoodsMapper"><!-- 對(duì)應(yīng)Mapper的全限定符 -->
<!--    這里寫sql語(yǔ)句 -->
    <insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into goods (name) value(#{name})
    </insert>
    <update id="update">
        update goods set name=#{name} where id=#{id}
    </update>
    <delete id="delete">
        delete from goods where id = #{id}
    </delete>
    <select id="selectById" resultType="goods">
        select * from goods where id = #{id}
    </select>
    <select id="selectAll" resultType="goods">
        select * from goods
    </select>
</mapper>

2.4 新建pojo類

import lombok.Data;
@Data//lombook插件的@Data標(biāo)簽可以自動(dòng)生成get和set以及toString方法
public class Goods {
    private Integer id;
    private String name;
}

2.5 新建mapper接口

public interface GoodsMapper {
    int insert(Goods goods);
    int update(Goods goods);
    int delete(Integer id);
    Goods selectById(Integer id);
    List<Goods> selectAll();
}

2.6 測(cè)試

public class MybatisTest {
    @Test
    public void test() throws IOException {
        //1.讀取外部配置文件
        InputStream ips = Resources.getResourceAsStream("mybatis-config.xml");
        //2.創(chuàng)建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
        //3.根據(jù)sqlSessionFactory創(chuàng)建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.獲取接口的代理對(duì)象,調(diào)用代理對(duì)象的方法就會(huì)查找mapper接口的方法
        GoosdMapper mapper = sqlSession.getMapper(GoosdMapper.class);
        Goods goods = mapper.queryById(1);
        System.out.println(goods);
        //5.提交事務(wù)和釋放資源
        //sqlSession.commit();
        sqlSession.close();
    }
}

3.常用mapper語(yǔ)句

3.1 傳入值

<!-- #{id} = 使用占位符?,防止sql注入攻擊,但不能替代表名表項(xiàng)-->
<!-- ${id} = 不使用占位符?,不能防止sql注入攻擊,但可以替代表名表項(xiàng)-->
<select id="queryById" resultType="com.jojo.pojo.Employee">
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where emp_id = #{id}
</select>
<delete id="deleteById">
    delete from t_emp where emp_id = #{id} <!-- 傳入Integer類型,id可以改寫成任意字符串-->
</delete>
<select id="queryBySalary" resultType="com.jojo.pojo.Employee">
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where empSalary = #{salary} <!-- 傳入Double類型,salary可以改寫成任意字符串-->
</select>
<insert id="insertEmp">
    insert into t_emp (emp_name, emp_salary) values (#{empName},#{empSalary});<!-- 傳入對(duì)象時(shí),要寫傳入對(duì)象的屬性 -->
</insert>
<select id="queryByNameAndSalary" resultType="com.jojo.pojo.Employee">
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where empSalary = #{a} and empName = # <!-- 傳入兩個(gè)基本類型,根據(jù)接口中的@Param("名稱")來(lái)指定-->
</select>
<select id="queryByNameAndSalary" resultType="com.jojo.pojo.Employee">
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where empSalary = #{arg0} and empName = #{arg1} <!-- 法2:傳入兩個(gè)基本類型,可以根據(jù)順序來(lái)取arg0...arg1...-->
</select>
<select id="queryByNameAndSalary" resultType="com.jojo.pojo.Employee">
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where empSalary = #{param1} and empName = #{param2} <!-- 法3:傳入兩個(gè)基本類型,可以根據(jù)順序來(lái)取param1...param2...-->
</select>
<insert id="insertEmpMap">
    insert into t_emp (emp_name, emp_salary) values (#{name},#{salary});<!-- 傳入Map時(shí),要寫傳入Map的key -->
</insert>

3.2 返回值

<select id="queryNameById" resultType="string"><!-- resultType指定返回的類型,寫類的全限定符或者mybatis提供的別名(在mybatis官網(wǎng)查)-->
    select emp_name from t_emp where emp_id = #{id} 
</select>
<select id="queryById" resultType="employee"> <!-- resultType指定返回的為對(duì)象時(shí),select的行需要起別名來(lái)與類的屬性完全一致-->
    select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where emp_id = #{id} 
</select>
<select id="queryById" resultType="employee"><!-- resultType指定返回的為對(duì)象時(shí),開啟駝峰映射(mapUnderscoreToCamelCase)后,select的行不再需要起別名來(lái)與類的屬性完全一致-->
    select * from t_emp where emp_id = #{id}  
</select>
<select id="selectEmpNameAndMaxSalary" resultType="map"> <!-- resultType返回的值沒有未定義類時(shí),可以用map接值,map的每一項(xiàng)的key對(duì)應(yīng)一個(gè)列名 -->
    select emp_name 員工姓名, emp_salary 員工工資, (SELECT AVG(emp_salary) from t_emp) 部門平均工資 from t_emp where emp_salary=(select max(emp_salary) from t_emp)
</select>
<select id="queryNamesBySalary" resultType="string"><!--如果返回類型時(shí)List<String>,那么指定String即可-->
    select emp_name from t_emp where emp_salary > #{ salary};
</select>
<select id="queryAll" resultType="employee"><!--如果返回類型時(shí)List<Employee>,那么指定Employee即可-->
    select * from t_emp;
</select>
<insert id="insertEmp" useGeneratedKeys="true" keyColumn="emp_id" keyProperty="empId"><!-- 主鍵自增長(zhǎng)型:插入時(shí),獲取插入的id放在empId中 -->
    insert into t_emp (emp_name, emp_salary) value(#{empName},#{empSalary});
</insert>
<insert id="insertTeacher">
    <selectKey order="BEFORE" resultType="string" keyProperty="tId">
        select replace(UUID(),'-',''); <!-- 插入前由數(shù)據(jù)庫(kù)生成uuid并放在tId中-->
    </selectKey>
    insert into teacher (t_id,t_name) value (#{tId},#{tName})
</insert>

4.多表查詢

4.1 一對(duì)一

1對(duì)1關(guān)系:一個(gè)A類中包含一個(gè)B類:

public class A {
    private Integer Id;
    private String aName;
    private Integer bId;
    private B b;
}
public class B {
    private Integer bId;
    private String bName;
}

使用resultMap來(lái)裝數(shù)據(jù):

<resultMap id="aMap" type="a">
    <!-- a的主鍵 id標(biāo)簽-->
    <id column="a_id" property="aId"/>
    <!-- order的普通列 custom標(biāo)簽-->
    <result column="a_name" property="aName"/>
    <result column="b_id" property="bId"/>
    <!-- 給第二層對(duì)象屬性賦值 -->
    <association property="b" javaType="b">
        <id column="b_id" property="bId"/>
        <result column="b_name"  property="bName"></result>
    </association>
</resultMap>
<select id="queryAById" resultMap="aMap">
    SELECT * FROM t_a ta join t_b tb on ta.b_id = tb.b_id where ta.a_id = #{id};
</select>

在config文件中加入:

<settings>
	<!-- 開啟駝峰式自動(dòng)映射 a_big => aBig -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- 開啟自動(dòng)映射 a_big => aBig -->
    <setting name="autoMappingBehavior" value="FULL"/>
</settings>

后可省略主鍵以外的映射關(guān)系:

<resultMap id="aMap" type="a">
    <!-- a的主鍵 id標(biāo)簽-->
    <id column="a_id" property="aId"/>
    <!-- 給第二層對(duì)象屬性賦值 -->
    <association property="b" javaType="b">
        <id column="b_id" property="bId"/>
    </association>
</resultMap>
<select id="queryAById" resultMap="aMap">
    SELECT * FROM t_a ta join t_b tb on ta.b_id = tb.b_id where ta.a_id = #{id};
</select>

4.2 一對(duì)多

1對(duì)多關(guān)系:一個(gè)A類中包含多個(gè)B類(List):

public class A {
    private Integer Id;
    private String aName;
    private Integer bId;
    private List<B> bList;
}
public class B {
    private Integer bId;
    private String bName;
}

使用resultMap來(lái)裝數(shù)據(jù):

<resultMap id="aMap" type="a">
    <id column="a_id" property="aId"/>
    <result column="a_name" property="aName"/>
     <result column="b_id" property="bId"/>
    <!--針對(duì)List<A>屬性使用collection -->
    <collection property="bList" ofType="b">
        <id column="b_id" property="bId"></id>
        <result column="b_name" property="bName"/>
    </collection>
</resultMap>
<select id="queryAList" resultMap="aMap">
    select * from t_a ta join t_b tb on ta.customer_id = tb.customer_id
</select>

在config文件中加入:

<settings>
	<!-- 開啟駝峰式自動(dòng)映射 a_big => aBig -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- 開啟自動(dòng)映射 a_big => aBig -->
    <setting name="autoMappingBehavior" value="FULL"/>
</settings>

后可省略主鍵以外的映射關(guān)系:

<resultMap id="aMap" type="a">
    <id column="a_id" property="aId"/>
    <!--針對(duì)List<A>屬性使用collection -->
    <collection property="bList" ofType="b">
        <id column="b_id" property="bId"></id>
    </collection>
</resultMap>
<select id="queryAList" resultMap="aMap">
    select * from t_a ta join t_b tb on ta.customer_id = tb.customer_id
</select>

到此這篇關(guān)于Spring Mybatis 基本使用 總結(jié)的文章就介紹到這了,更多相關(guān)Spring Mybatis 使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java?Spring的啟動(dòng)原理詳解

    java?Spring的啟動(dòng)原理詳解

    大家好,本篇文章主要講的是java?Spring的啟動(dòng)原理詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 關(guān)于JAVA中this的使用方法小結(jié)

    關(guān)于JAVA中this的使用方法小結(jié)

    現(xiàn)在讓大家看一個(gè)小例子,給你分享一下JAVA中“this”的用法,有需要的朋友可以參考一下
    2013-10-10
  • 詳談Lock與synchronized 的區(qū)別

    詳談Lock與synchronized 的區(qū)別

    下面小編就為大家?guī)?lái)一篇詳談Lock與synchronized 的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Spring如何通過(guò)注解引入外部資源(PropertySource?Value)

    Spring如何通過(guò)注解引入外部資源(PropertySource?Value)

    這篇文章主要為大家介紹了Spring通過(guò)注解@PropertySource和@Value引入外部資源的方法實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題

    Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題

    這篇文章主要介紹了Java將網(wǎng)絡(luò)圖片轉(zhuǎn)成輸入流以及將url轉(zhuǎn)成InputStream問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • spring?bean標(biāo)簽中的init-method和destroy-method詳解

    spring?bean標(biāo)簽中的init-method和destroy-method詳解

    這篇文章主要介紹了spring?bean標(biāo)簽中的init-method和destroy-method,在很多項(xiàng)目中,經(jīng)常在xml配置文件中看到init-method 或者 destroy-method ,因此整理收集下,方便以后參考和學(xué)習(xí),需要的朋友可以參考下
    2023-04-04
  • Java程序開發(fā)環(huán)境配置圖文教程

    Java程序開發(fā)環(huán)境配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了Java程序開發(fā)環(huán)境配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java?死鎖解決方案順序鎖和輪詢鎖

    Java?死鎖解決方案順序鎖和輪詢鎖

    這篇文章主要介紹了Java?死鎖解決方案順序鎖和輪詢鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 如何寫好一個(gè)Spring組件的實(shí)現(xiàn)步驟

    如何寫好一個(gè)Spring組件的實(shí)現(xiàn)步驟

    這篇文章主要介紹了如何寫好一個(gè)Spring組件的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java中5種異步實(shí)現(xiàn)的方式詳解

    Java中5種異步實(shí)現(xiàn)的方式詳解

    同步操作如果遇到一個(gè)耗時(shí)的方法,需要阻塞等待,那么我們有沒有辦法解決呢?讓它異步執(zhí)行,下面我會(huì)詳解異步及實(shí)現(xiàn),需要的可以參考一下
    2022-09-09

最新評(píng)論