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

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

Mybatis入門教程:快速掌握Mybatis的基本用法和技巧

標(biāo)簽:
SSM
概述

Mybatis是一个优秀的持久层框架,简化了Java程序与数据库的交互。它通过配置文件将SQL语句与Java代码分离,便于管理和维护。Mybatis支持多种数据库,如MySQL、Oracle等,并提供灵活的映射功能。本文详细介绍了Mybatis的配置、优势、缺点以及开发环境搭建等。

Mybatis简介与环境搭建

Mybatis是一个优秀的持久层框架,它简化了Java程序与MySQL和其他数据库的交互,通过对JDBC的封装,使得开发者可以使用面向对象的语言进行数据库操作。Mybatis将SQL语句从Java代码中分离出来,放到配置文件中,使得SQL语句更加清晰,易于管理和维护。

Mybatis是什么

Mybatis是一个基于Java的持久层框架,主要用于数据库操作。它可以通过简单的XML或注解进行配置,通过接口和XML文件映射,将Java对象与数据库中的记录进行关联。Mybatis在执行SQL语句时,会将Java对象的属性值封装成SQL语句中的参数,实现对数据库的操作。Mybatis支持用户自定义SQL、存储过程以及高级映射,支持大多数常用的数据库,如MySQL、Oracle、SQL Server、DB2等。

Mybatis的优势与缺点

Mybatis的优势

  1. 简单易用:Mybatis使用XML或注解进行配置,可以使得SQL语句更加清晰,易于理解和维护。
  2. 灵活性强:Mybatis允许用户自定义SQL语句,提供了极大的灵活性。
  3. 强大的映射功能:Mybatis提供了复杂对象关系映射的功能,支持一对一、一对多、多对多等映射。
  4. 性能高:Mybatis的SQL执行效率非常高,因为它并不需要反射,只需要传递参数。
  5. 易于扩展:Mybatis的扩展性好,可以方便地进行插件开发,支持自定义的事务管理,日志管理等。

Mybatis的缺点

  1. SQL语句的硬编码:SQL语句需要在XML文件中硬编码,这可能会导致SQL语句的复杂度增加。
  2. 手动处理SQL语句:Mybatis需要手动处理SQL语句,这可能会增加开发人员的工作量。
  3. 对象关系映射复杂:对于复杂对象关系的映射,Mybatis的处理可能会比较繁琐。
开发环境搭建

安装Java环境

  1. 下载并安装Java开发工具包(JDK)。
  2. 设置环境变量。在Windows系统中,打开系统属性,选择“高级系统设置”,点击“环境变量”,在系统变量中添加“JAVA_HOME”,值为JDK的安装路径;在系统变量中添加“Path”,值为“%JAVA_HOME%\bin”。

安装数据库

  1. 下载并安装MySQL数据库。
  2. 创建数据库和表。在MySQL命令行中,输入以下命令创建数据库和表:
    CREATE DATABASE mybatis;
    USE mybatis;
    CREATE TABLE users (
       id INT PRIMARY KEY AUTO_INCREMENT,
       name VARCHAR(255),
       email VARCHAR(255)
    );

下载并配置Mybatis

  1. 下载并解压Mybatis压缩包。
  2. 在项目的ClassPath路径下添加Mybatis的jar包。
  3. 创建配置文件,如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>
       <typeAliases>
           <typeAlias type="com.example.entity.User" alias="User"/>
       </typeAliases>
       <environments default="development">
           <environment id="development">
               <transactionManager type="JDBC"/>
               <dataSource type="POOLED">
                   <property name="driver" value="com.mysql.jdbc.Driver"/>
                   <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                   <property name="username" value="root"/>
                   <property name="password" value="root"/>
               </dataSource>
           </environment>
       </environments>
       <mappers>
           <mapper resource="com/example/mapper/UserMapper.xml"/>
       </mappers>
    </configuration>

    在Java代码中读取配置文件:

    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
    SqlSession session = factory.openSession();
Mybatis的基本概念

SqlSessionFactory和SqlSession

SqlSessionFactory是Mybatis的工厂类,用于生成SqlSession对象,SqlSession是执行SQL语句的会话对象,它是线程不安全的。SqlSession可以执行CRUD操作,也可以管理事务。通过SqlSessionFactoryopenSession方法可以获取到SqlSession对象:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
SqlSession session = factory.openSession();

Mapper接口

Mapper接口是Mybatis的接口,它里面定义了对数据库表的操作方法,这些方法与SQL语句一一对应。Mybatis会根据这些方法生成相应的SQL语句,并执行这些SQL语句。例如,创建一个UserMapper接口:

public interface UserMapper {
    List<User> selectAll();
    User selectById(int id);
    int insert(User user);
    int update(User user);
    int delete(int id);
}

XML配置文件和注解

Mybatis的配置文件是mybatis-config.xml,它定义了数据库的连接信息、映射文件的位置等信息。XML文件中的<mapper>标签定义了数据库表、SQL语句和Java对象之间的映射关系。例如,定义一个UserMapper的XML配置文件如下:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAll" resultType="com.example.entity.User">
        SELECT * FROM users
    </select>
    <select id="selectById" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insert" parameterType="com.example.entity.User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>
    <update id="update" parameterType="com.example.entity.User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="delete" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

除了XML配置文件,还可以使用注解的方式进行配置,例如:

@Select("SELECT * FROM users WHERE id = #{id}")
User selectById(int id);
动手实践:第一个Mybatis程序

创建数据库表和插入数据

在上面已经创建了一个users表,接下来向表中插入一些数据:

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');

编写Mapper接口和XML配置文件

创建一个UserMapper接口和相应的XML配置文件。如上面提到的,UserMapper接口如下:

public interface UserMapper {
    List<User> selectAll();
    User selectById(int id);
    int insert(User user);
    int update(User user);
    int delete(int id);
}

创建一个UserMapper.xml文件:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAll" resultType="com.example.entity.User">
        SELECT * FROM users
    </select>
    <select id="selectById" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insert" parameterType="com.example.entity.User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>
    <update id="update" parameterType="com.example.entity.User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="delete" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

编写测试代码,进行数据库操作

创建测试类,使用SqlSession执行数据库操作:

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

        try {
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<User> users = mapper.selectAll();
            users.forEach(System.out::println);

            User user = new User(3, "Charlie", "charlie@example.com");
            mapper.insert(user);

            user = mapper.selectById(3);
            System.out.println(user);

            user.setName("Charlie Brown");
            mapper.update(user);

            mapper.delete(3);
        } finally {
            session.close();
        }
    }
}
Mybatis的CRUD操作详解

查询操作(Select)

查询操作是最常见的数据库操作,Mybatis提供了多种方式来执行查询操作。例如,使用select标签定义一个查询操作:

<select id="selectAll" resultType="com.example.entity.User">
    SELECT * FROM users
</select>

插入操作(Insert)

插入操作用于将数据插入到数据库中。例如,使用insert标签定义一个插入操作:

<insert id="insert" parameterType="com.example.entity.User">
    INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>

更新操作(Update)

更新操作用于更新数据库中的数据。例如,使用update标签定义一个更新操作:

<update id="update" parameterType="com.example.entity.User">
    UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
</update>

删除操作(Delete)

删除操作用于从数据库中删除数据。例如,使用delete标签定义一个删除操作:

<delete id="delete" parameterType="int">
    DELETE FROM users WHERE id = #{id}
</delete>
Mybatis的高级用法

结果集的映射与处理

Mybatis支持多种类型的结果集映射,包括一对一、一对多、多对多等。例如,定义一个一对一的结果集映射:

<resultMap id="userResultMap" type="com.example.entity.User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="email" column="user_email"/>
</resultMap>
<select id="selectUser" resultMap="userResultMap">
    SELECT user_id, user_name, user_email FROM users WHERE id = #{id}
</select>

定义一个一对多的结果集映射:

<resultMap id="userOrderResultMap" type="com.example.entity.User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="email" column="user_email"/>
    <collection property="orders" ofType="com.example.entity.Order">
        <id property="id" column="order_id"/>
        <result property="quantity" column="order_quantity"/>
        <result property="price" column="order_price"/>
        <result property="productId" column="product_id"/>
    </collection>
</resultMap>
<select id="selectUserWithOrders" resultMap="userOrderResultMap">
    SELECT U.user_id, U.user_name, U.user_email, O.order_id, O.order_quantity, O.order_price, O.product_id
    FROM users U
    LEFT JOIN orders O ON U.user_id = O.user_id
    WHERE U.id = #{id}
</select>

动态SQL的使用

动态SQL是指在运行时动态生成SQL语句。Mybatis提供了多种动态SQL标签,如<if><choose><where>等。例如,使用<if>标签实现条件查询:

<select id="selectUser" resultType="com.example.entity.User">
    SELECT * FROM users
    <where>
        <if test="id != null">
            AND id = #{id}
        </if>
        <if test="name != null">
            AND name = #{name}
        </if>
    </where>
</select>

分页查询

Mybatis提供了多种分页插件,如PageHelper。使用PageHelper插件进行分页查询:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.1</version>
</dependency>

在SQL语句中使用PageHelper提供的标签进行分页:

<select id="selectAll" resultType="com.example.entity.User">
    SELECT * FROM users
    <if test="pageNum != null and pageSize != null">
        LIMIT #{pageNum}, #{pageSize}
    </if>
</select>
Mybatis的常见问题与解决方案

二级缓存的使用

Mybatis的二级缓存是指在同一个SqlSessionFactory实例中共享的缓存。打开二级缓存的配置如下:

<setting name="cacheEnabled" value="true"/>

在Mapper接口上使用@CacheNamespace注解开启二级缓存:

@CacheNamespace
public interface UserMapper {
    List<User> selectAll();
    User selectById(int id);
    int insert(User user);
    int update(User user);
    int delete(int id);
}

日期类型处理

Mybatis默认的日期类型处理器是TypeHandler,可以通过配置自定义日期类型处理器。例如,自定义一个日期格式处理器:

public class CustomDateTypeHandler extends BaseTypeHandler<Date> {
    @Override
    public void setParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        ps.setString(i, df.format(parameter));
    }

    @Override
    public Date getResult(ResultSet rs, String columnName) throws SQLException {
        Date date = rs.getDate(columnName);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.parse(df.format(date));
    }

    @Override
    public Date getResult(ResultSet rs, int columnIndex) throws SQLException {
        Date date = rs.getDate(columnIndex);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.parse(df.format(date));
    }

    @Override
    public Date getResult(CallableStatement cs, int columnIndex) throws SQLException {
        Date date = cs.getDate(columnIndex);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        return df.parse(df.format(date));
    }
}

在配置文件中注册自定义的日期类型处理器:

<typeHandler handler="com.example.handler.CustomDateTypeHandler" javaType="java.util.Date" jdbcType="DATE"/>

数据库连接池的配置

Mybatis支持多种数据库连接池插件,如DBCP、C3P0、HikariCP等。例如,使用HikariCP插件进行数据库连接池配置:

<dataSource type="com.zaxxer.hikari.HikariDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</dataSource>

使用数据库连接池可以提高数据库的访问速度和并发性能,减少数据库的连接次数。使用DBCP或C3P0的配置示例:


<dataSource type="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
    <property name="maxPoolSize" value="20"/>
    <property name="minPoolSize" value="5"/>
</dataSource>
``
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

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

評(píng)論

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

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

100積分直接送

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

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

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

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

幫助反饋 APP下載

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

公眾號(hào)

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

舉報(bào)

0/150
提交
取消