第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Mybatis持久層框架學(xué)習(xí)入門(mén)

概述

本文将详细介绍Mybatis持久层框架学习入门,包括Mybatis的基本概念、特点与优势,以及与JDBC的区别。文章还会指导如何搭建开发环境并进行基本的SQL映射和CRUD操作,并探讨Mybatis与Spring的集成方法。

Mybatis简介

Mybatis是什么

Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs映射成数据库中的记录。

Mybatis的特点与优势

  • 简单易用:Mybatis的配置简单,学习成本低,开发效率高。
  • 与数据库无关:Mybatis可以支持多种数据库,如MySQL、Oracle、DB2等。
  • 支持存储过程:Mybatis支持存储过程,并且可以传入参数和返回参数,操作灵活。
  • 动态SQL:通过Mybatis的动态SQL,可以灵活地处理各种复杂的SQL语句。
  • 插件扩展": Mybatis易于扩展,可以通过自定义插件来对框架进行扩展。
  • 映射关系灵活:Mybatis可以提供复杂的数据类型映射,支持一对一、一对多、多对多关系映射。
  • 高质量的文档:Mybatis拥有质量很高的文档,社区活跃,问题解答及时。

Mybatis与JDBC的区别

JDBC与Mybatis的主要区别如下:

  • JDBC:JDBC是一种Java语言级别的数据库访问接口,提供了一种标准的方式来访问数据库。它依赖于原始SQL语句的执行,并要求应用程序处理SQL语句的构造和数据库结果集的解析。JDBC代码通常包含了大量的低级数据库操作,如连接管理、异常处理和SQL字符串拼接。

  • Mybatis:Mybatis是一个持久层框架,它简化了数据库操作,使得开发者可以专注于业务逻辑。Mybatis将SQL语句和Java对象映射起来,提供了动态查询、存储过程调用、高级映射等特性。它负责SQL语句的执行和结果集的映射,使开发者可以更专注于业务逻辑的实现。
// JDBC示例代码
import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {

            while (rs.next()) {
                System.out.println(rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
// Mybatis示例代码
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisExample {
    public static void main(String[] args) {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("MybatisConfig.xml"));
        SqlSession session = factory.openSession();

        try {
            List<User> users = session.selectList("selectUsers");
            for (User user : users) {
                System.out.println(user.getName());
            }
        } finally {
            session.close();
        }
    }
}
环境搭建

开发环境准备

开发Mybatis项目需要以下环境:

  • JDK 1.8及以上
  • Maven或Gradle构建工具
  • MySQL数据库

Mybatis的下载与引入

Mybatis可以通过Maven或Gradle来引入,这里以Maven为例:

在项目的pom.xml文件中添加Mybatis依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
</dependencies>

Mybatis的配置文件详解

Mybatis的核心配置文件是mybatis-config.xml,该文件位于类路径下(通常是src/main/resources目录下),配置文件中定义了数据库连接信息、映射文件位置、事务管理器等信息。

<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/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射文件位置 -->
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisConfig {
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }
}
基本使用

SQL映射文件

SQL映射文件定义了数据库操作的SQL语句,通常与Java接口或类对应,映射文件的根元素是<mapper>元素。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUsers" resultType="com.example.model.User">
        SELECT id, name, age FROM users
    </select>
</mapper>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            List<User> users = session.selectList("com.example.mapper.UserMapper.selectUsers");
            for (User user : users) {
                System.out.println(user.getName());
            }
        }
    }
}

SQL映射元素及属性

Mybatis支持多种SQL映射元素,包括<select><insert><update><delete>等。

<!-- 查询 -->
<select id="selectUserById" resultType="com.example.model.User" parameterType="int">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>

<!-- 插入 -->
<insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>

<!-- 更新 -->
<update id="updateUser" parameterType="com.example.model.User">
    UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

<!-- 删除 -->
<delete id="deleteUserById" parameterType="int">
    DELETE FROM users WHERE id = #{id}
</delete>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class CRUDExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            session.insert("com.example.mapper.UserMapper.insertUser", new User("John Doe", 30));
            session.update("com.example.mapper.UserMapper.updateUser", new User(1, "Jane Doe", 35));
            session.delete("com.example.mapper.UserMapper.deleteUserById", 1);
            session.selectList("com.example.mapper.UserMapper.selectUsers").forEach(user -> System.out.println(user.getName()));
        }
    }
}

动态SQL的使用

动态SQL允许在运行时根据条件生成SQL语句,常用的元素有<if><choose><when><otherwise>等。

<select id="selectUsersByCondition" resultType="com.example.model.User" parameterType="com.example.model.User">
    SELECT id, name, age FROM users
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DynamicSqlExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            User user = new User("John Doe", 30);
            List<User> users = session.selectList("com.example.mapper.UserMapper.selectUsersByCondition", user);
            users.forEach(u -> System.out.println(u.getName()));
        }
    }
}
CRUD操作

增删改查操作详解

CRUD操作是数据库中最常见的操作,Mybatis提供了相应的SQL映射语句来支持这些操作。

<!-- 插入 -->
<insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>

<!-- 更新 -->
<update id="updateUser" parameterType="com.example.model.User">
    UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

<!-- 删除 -->
<delete id="deleteUserById" parameterType="int">
    DELETE FROM users WHERE id = #{id}
</delete>

<!-- 查询 -->
<select id="selectUserById" resultType="com.example.model.User" parameterType="int">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class CRUDExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            session.insert("com.example.mapper.UserMapper.insertUser", new User("John Doe", 30));
            session.update("com.example.mapper.UserMapper.updateUser", new User(1, "Jane Doe", 35));
            session.delete("com.example.mapper.UserMapper.deleteUserById", 1);
            session.selectList("com.example.mapper.UserMapper.selectUsers").forEach(user -> System.out.println(user.getName()));
        }
    }
}

结果集的映射与处理

Mybatis通过结果映射将数据库的查询结果映射到Java对象中。结果映射可以通过resultType属性直接映射到Java类,或者通过resultMap元素进行复杂的映射。

<!-- 直接映射 -->
<select id="selectUserById" resultType="com.example.model.User">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>

<!-- 复杂映射 -->
<resultMap id="userResultMap" type="com.example.model.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>

<select id="selectUserById" resultMap="userResultMap">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class ResultSetMappingExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            User user = session.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
            System.out.println(user.getName());
        }
    }
}

批量操作

批量操作可以提高数据库性能,减少网络开销。Mybatis可以通过<foreach>元素实现批量插入或更新操作。

<insert id="insertUsers" parameterType="java.util.List">
    INSERT INTO users (name, age) VALUES
    <foreach item="item" index="index" collection="list" separator="," open="(" close=")">
        #{item.name}, #{item.age}
    </foreach>
</insert>
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class BatchOperationExample {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (SqlSession session = sqlSessionFactory.openSession(true)) {
            List<User> users = Arrays.asList(new User("John Doe", 30), new User("Jane Doe", 35));
            session.insert("com.example.mapper.UserMapper.insertUsers", users);
        }
    }
}
Mybatis与Spring集成

Spring与Mybatis集成方法

Spring与Mybatis的集成可以通过配置SqlSessionFactorySqlSessionTemplate来实现,也可以使用MapperScannerConfigurer自动扫描Mapper接口。

<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置SqlSessionTemplate -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg>
        <ref bean="sqlSessionFactory"/>
    </constructor-arg>
</bean>

<!-- 配置MapperScan -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <property name="basePackage" value="com.example.mapper"/>
</bean>

使用Spring管理Mybatis的SqlSessionFactory

通过Spring的SqlSessionFactoryBean来创建SqlSessionFactory,并将其注入到需要的地方。

<!-- 配置DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

Mybatis注解与XML配置对比

Mybatis提供了两种配置方式:Java注解和XML配置文件。注解方式更加简洁,但灵活性较低,而XML配置方式则更加灵活,适合复杂的情况。

// 注解方式
@Select("SELECT id, name, age FROM users WHERE id = #{id}")
User selectUserById(@Param("id") int id);
<!-- XML配置方式 -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.model.User">
        SELECT id, name, age FROM users WHERE id = #{id}
    </select>
</mapper>
事务管理与异常处理

Mybatis的事务管理机制

Mybatis通过SqlSession对象来管理事务,可以使用SqlSessioncommitrollback方法来提交或回滚事务。

SqlSession session = sqlSessionFactory.openSession();
try {
    // 执行数据库操作
    session.commit();
} catch (Exception e) {
    session.rollback();
} finally {
    session.close();
}

异常处理与回滚操作

在Mybatis中,可以通过捕获异常并调用rollback方法来处理事务的回滚操作。在配置文件中也可以设置全局的事务策略。

try {
    // 执行数据库操作
} catch (Exception e) {
    session.rollback();
    throw e;
} finally {
    session.close();
}

事务的传播行为与隔离级别

Mybatis支持多种事务传播行为,包括PROPAGATION_REQUIREDPROPAGATION_SUPPORTSPROPAGATION_MANDATORY等。隔离级别有ISOLATION_DEFAULTISOLATION_READ_UNCOMMITTEDISOLATION_READ_COMMITTED等。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

Mybatis提供了丰富的功能来提高数据库操作的效率和灵活性,通过本文的介绍,读者可以了解到Mybatis的基本使用方法以及在实际开发中的应用场景。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消