91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

MyBatis集成方法是什么

發布時間:2021-12-22 12:02:21 來源:億速云 閱讀:158 作者:iii 欄目:大數據

這篇文章主要介紹“MyBatis集成方法是什么”,在日常操作中,相信很多人在MyBatis集成方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MyBatis集成方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1 概述

MyBaits是一個著名的持久層框架,本文首先介紹了MyBatis的簡單使用,接著與Spring進行整合,最后簡單地使用了Generator去自動生成代碼。

2 MyBatis簡介

MyBatis本來是Apache的一個開源項目——iBatis,2010年由Apaceh Software Foundation遷移到了Google Code,并改名為MyBatis

MyBatis是一個基于Java的持久層框架,提供的持久層框架包括SQL MapsData Access Objects,使用簡單的XML或者注解用于配置映射,將接口和POJO映射成數據庫中的記錄,是一個小巧、方便、高效、簡單、直接、半自動化的持久層框架。

3 工作原理

上圖:

MyBatis集成方法是什么

  • 讀取配置文件:mybatis-config.xml是全局MyBatis配置文件,配置了MyBatis運行環境信息

  • 加載映射文件:也就是SQL映射文件,配置了操作數據庫的SQL語句

  • 構造會話工廠:通過配置文件構造會話工廠SqlSessionFactory

  • 創建會話對象:由上一步的會話工廠創建會話對象SqlSession

  • 獲取MapperStatement:通過用戶調用的apiStatement ID獲取MapperStatement對象

  • 輸入參數映射:通過ExecutorMapperStatement進行解析,將各種Java基本類型轉化為SQL操作語句中的類型

  • 輸出結果映射:JDBC執行SQL后,借助MapperStatement的映射關系將返回結果轉化為Java基本類型并返回

4 MyBatis示例

首先先來看一下純MyBaits的示例,沒有整合Spring,一個簡單的Maven工程,項目結構如下:

MyBatis集成方法是什么

4.1 依賴

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

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

<!--驅動用的是MySQL,版本請自行修改-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

Gradle

compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'

4.2 實體類

@Setter
@Getter
@Builder
public class User {
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "id:"+id+"\tname:"+name;
    }
}

4.3 映射文件

新建一個叫UserMapper.xml的映射文件:

<?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="UserMapper">
    <select id="selectById" parameterType="Integer" resultType="pers.entity.User">
        select * from user where id=#{id}
    </select>
    <select id="selectAll" resultType="pers.entity.User">
        select * from user
    </select>

    <insert id="insert" parameterType="pers.entity.User">
        INSERT INTO `user` (`id`,`name`)
        VALUES (#{id},#{name})
    </insert>

    <update id="update" parameterType="pers.entity.User">
        UPDATE `user` set `name`=#{name} where id=#{id}
    </update>

    <delete id="delete" parameterType="Integer">
        DELETE FROM `user` WHERE `id` = #{id}
    </delete>
</mapper>

映射文件是一個XML文件,根元素為<mapper>,需要注意其中的namespace屬性,調用的時候通過該namespace調用。其中的子元素表示SQL語句:

  • <select>:查詢,id指定了這條語句的id號,調用時通過namespace.id的方式調用,比如該條select需要通過UserMapper.selectById調用,parameterType指定參數類型,這里是一個Integer的參數,resultType指定返回類型,實體類

  • <insert>/<update>/<delete>:對應的插入/修改/刪除語句

  • 關于占位符:#{}表示是占位符,相當于傳統JDBC中的?#{id}表示該占位符等待接收的參數名稱為id

4.4 配置文件

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>
    <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://localhost:3306/test"/>
                <property name="username" value="test"/>
                <property name="password" value="test"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

指定了數據庫的一些連接屬性還有mapper的位置。

4.5 測試

public class Main {
    public static void main(String[] args) {
        try
        {
            InputStream inputStream = Resources.getResourceAsStream("config/mybatis-config.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = factory.openSession();
            User user = session.selectOne("UserMapper.selectById",1);
            System.out.println(user);
            User user1 = User.builder().name("test").build();
            session.insert("UserMapper.insert",user1);
            user1.setName("222");
            session.update("UserMapper.update",user1);
            List<User> list = session.selectList("UserMapper.selectAll");
            list.forEach(System.out::println);
            session.delete("UserMapper.delete",1);
            session.commit();
            session.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

主要流程如下:

  • 讀取配置文件:根據org.apache.ibatis.io.Resources讀取配置文件mybatis-config.xml,請注意配置文件的位置正確,這里的配置文件都放在resources下,mybatis-config.xml放在其中的config

  • 構建Session:根據配置文件構建SqlSessionFactory后,通過openSession創建Session

  • 業務操作:通過sessionselectOne/insert/update等進行業務操作,這類操作帶兩個參數,第一個參數是String,表示配置文件中的SQL語句,采用namespace.id的形式,比如這里的UserMapper.xml中聲明namespaceUserMapper,其中帶有一條idselectByIdselect語句,因此調用時使用UserMapper.selectById的形式,第二個參數是一個Object,表示要傳遞的參數,也就是綁定到配置文件中對應占位符的值

  • 提交與關閉:業務操作完成后提交事務并關閉session

示例測試結果:

MyBatis集成方法是什么

5 Spring整合示例

上面的例子只是為了演示MyBatis的基本使用,沒有整合Spring,這里的例子是把Spring整合進來,流程也大概差不多,項目結構如下:

MyBatis集成方法是什么

5.1 依賴

分為5類JAR

  • MyBatis需要的JAR

  • Spring需要的JAR

  • MyBatisSpring整合的中間JAR

  • 數據庫驅動JAR

  • 數據源JAR

完整依賴如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

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

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.8.0</version>
</dependency>

Gradle

compile group: 'org.springframework', name: 'spring-beans', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-context', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-core', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-tx', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-jdbc', version: '5.2.9.RELEASE'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.8.0'
compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5'
compile group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.5'

5.2 配置文件

配置文件分為三類:

  • MyBatis映射文件:編寫mapper的地方,也就是業務需要的SQL語句

  • MyBatis全局配置文件:由于整合了Spring,數據源的配置放在了Spring的配置文件中,而只需要保留mapper的查找位置

  • Spring配置文件:配置數據源+事務管理+MyBaitssqlSssionFactory+組件掃描

5.2.1 MyBatis映射文件

與上面的例子差不多,只是修改了namespace包名.類名的形式:

<?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="pers.dao.UserDao">
    <select id="selectById" parameterType="Integer" resultType="pers.entity.User">
        select * from user where id=#{id}
    </select>
    <select id="selectAll" resultType="pers.entity.User">
        select * from user
    </select>

    <insert id="insert" parameterType="pers.entity.User">
        INSERT INTO `user` (`id`,`name`)
        VALUES (#{id},#{name})
    </insert>

    <update id="update" parameterType="pers.entity.User">
        UPDATE `user` set `name`=#{name} where id=#{id}
    </update>

    <delete id="delete" parameterType="Integer">
        DELETE FROM `user` WHERE `id` = #{id}
    </delete>
</mapper>

namespace需要與對應包名的帶有@Mapper的類配置一致。

5.2.2 MyBatis配置文件

<?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>
    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

5.2.3 Spring配置文件

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd"
       >

    <context:component-scan base-package="pers.dao"/>
    <context:component-scan base-package="pers.service"/>
    <!--數據源-->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
        <!--最大連接數+最大空閑數+初始連接數-->
        <property name="maxTotal" value="30"/>
        <property name="maxIdle" value="10"/>
        <property name="initialSize" value="5"/>
    </bean>
    
    <!--事務管理-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource"  ref="dataSource"/>
    </bean>

	<!--開啟事務注解-->
    <tx:annotation-driven transaction-manager="txManager" />

	<!--創建SqlSessionFactory Bean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:config/mybatis-config.xml"/>
    </bean>

	<!--注解掃描,主要用于@Mapper,會掃描basePackge下的@Mapper注解的接口并自動裝配為MyBatis的映射接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="pers.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

5.3 持久層

需要加上@Mapper注解,表示自動裝配為MyBatis的映射接口,注意:

  • 映射文件中的namespace需要與包名.類名對應,比如這里的包為pers.dao,類名為UserDao,那么映射文件中的namespacepers.dao.UserDao

  • id需要與方法名對應,比如映射文件中的有一條select語句的idselectById,那么方法就需要命名為selectById,且參數類型需要對應一致

@Repository
@Mapper
public interface UserDao {
    User selectById(Integer id);
    List<User> selectAll();
    int insert(User user);
    int update(User user);
    int delete(Integer id);
}

5.4 業務層

@Service
@Transactional
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MyBatisService {
    private final UserDao dao;

    public void test(){
        User user = dao.selectById(13);
        System.out.println(user);
        dao.insert(User.builder().name("333").build());
        dao.update(User.builder().name("88888").id(13).build());
        dao.selectAll().forEach(System.out::println);
        dao.delete(12);
        dao.selectAll().forEach(System.out::println);
    }
}

注入UserDao后進行簡單的測試,結果如下:

MyBatis集成方法是什么

6 自動生成代碼

相信很多程序員也討厭寫又長又麻煩的XML配置文件,因此,MyBatis也提供了一個生成器插件,可以直接從表中生成實體類、dao接口以及映射文件,可以省去很多操作。

步驟如下:

  • 導入依賴

  • 編寫Generator配置文件

  • 生成代碼

6.1 依賴

其實就是加入一個插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <configuration>
                <!-- 在控制臺打印執行日志 -->
                <verbose>true</verbose>
                <!-- 重復生成時會覆蓋之前的文件-->
                <overwrite>true</overwrite>
                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.21</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

數據庫驅動請對應修改。

至于Gradle版請看Kotlin版源碼。

6.2 配置文件

這里是參考別人的配置文件,修改數據庫連接、表名、包名即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- context 是逆向工程的主要配置信息 -->
    <!-- id:起個名字 -->
    <!-- targetRuntime:設置生成的文件適用于那個 mybatis 版本 -->
    <context id="default" targetRuntime="MyBatis3">
        <!--optional,指在創建class時,對注釋進行控制-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--jdbc的數據庫連接 wg_insert 為數據庫名字-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="test" password="test" />
        <!--非必須,類型處理器,在數據庫類型和java類型之間的轉換控制-->
        <javaTypeResolver>
            <!-- 默認情況下數據庫中的 decimal,bigInt 在 Java 對應是 sql 下的 BigDecimal 類 -->
            <!-- 不是 double 和 long 類型 -->
            <!-- 使用常用的基本類型代替 sql 包下的引用類型 -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- targetPackage:生成的實體類所在的包 -->
        <!-- targetProject:生成的實體類所在的硬盤位置 -->
        <javaModelGenerator targetPackage="pers.entity"
                            targetProject="src/main/java">
            <!-- 是否允許子包 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對modal添加構造函數 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立modal對象是否不可改變 即生成的modal對象不會有setter方法,只有構造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>
        <!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">
            <!-- 針對數據庫的一個配置,是否把 schema 作為字包名 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="pers.dao" targetProject="src/main/java">
        </javaClientGenerator>
        <!-- tableName是數據庫中的表名,domainObjectName是生成的JAVA模型名,后面的參數不用改,要生成更多的表就在下面繼續加table標簽 -->
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

6.3 生成代碼

MyBatis集成方法是什么

雙擊生成即可:

MyBatis集成方法是什么

生成了實體類、dao接口以及mapper文件。

到此,關于“MyBatis集成方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

南靖县| 湖南省| 化德县| 泰安市| 达日县| 林口县| 乐安县| 博白县| 镇雄县| 宜良县| 韩城市| 彭州市| 固安县| 耿马| 金平| 峨眉山市| 高州市| 漳浦县| 河北省| 巫山县| 文成县| 康乐县| 商丘市| 松江区| 筠连县| 翁牛特旗| 济宁市| 永顺县| 芮城县| 蓝田县| 五常市| 芦溪县| 宁乡县| 灌阳县| 顺义区| 丹江口市| 吴旗县| 富锦市| 荥阳市| 麻江县| 平舆县|