Mybatis实现增删改查

目录

一、简介

1.什么是Mybatis

2.Mybatis的发展史

3.Mybatis的特点

 二、Mybatis的配置

1.导入jar包

2.配置文件

2.1在根目录下新建properties日志文件

2.2在根目录下新建XMl配置文件

三、Mybatis对数据的增删改查

1.准备工作

1.1新建用户类和配置文件

2. 查询用户

2.1普通查询 

测试类 

 运行结果

2.2模糊查询

测试类 

运行结果

3.添加用户 

测试类

运行结果 

4.删除用户

测试类

 运行结果

5.修改用户 

测试类

运行结果


一、简介

1.什么是Mybatis

MyBatis是一种开源的、轻量级的Java持久层框架,它通过XML或注解的方式将数据库访问操作映射为Java对象的方法调用。

2.Mybatis的发展史

MyBatis是一种基于Java的持久层框架,用于将数据库操作与应用程序解耦。其发展历史可以追溯到2001年,当时它被称为iBATIS。以下是MyBatis的发展史:

1. iBATIS:iBATIS由Clinton Begin在2001年创建。它最初是一个专注于数据库访问的框架,旨在通过将SQL查询与Java对象映射来简化数据库操作。

2. Apache iBATIS:在2002年,iBATIS成为Apache Software Foundation的一部分,并更名为Apache iBATIS。这个时候,iBATIS开始得到广泛的关注和使用,并逐渐成为Java开发者的首选持久层框架之一。

3. MyBatis:在2010年,iBATIS的开发团队决定将iBATIS改名为MyBatis。这个决定是为了避免与其他类似名称的项目混淆,并为项目带来更广泛的认可。

4. MyBatis 3:MyBatis 3版本于2011年发布。这个版本对框架进行了全面重写,引入了许多新功能和改进,包括动态SQL和注解支持。MyBatis 3在设计和性能上都有了很大的提升,使得它成为更加强大和灵活的持久层框架。

5. MyBatis 3.5:最新版本的MyBatis是3.5系列。在这个版本中,MyBatis进一步改进了性能和功能,包括新增了批量操作的支持、更好的错误处理能力以及更高级的动态SQL功能等。

通过不断地演进和改进,MyBatis在过去几年中一直保持着活跃的开发和更新,成为Java开发者中的首选框架之一。它的简单易用、灵活性强以及对SQL的优化等特点,使得它在各种规模的项目中都有着广泛的应用。

3.Mybatis的特点

MyBatis的主要特点包括:

  1. 简单:MyBatis采用简洁的配置和映射,使得开发人员只需关注SQL语句本身,而无需关注过多的框架细节。

  2. 灵活:MyBatis支持使用XML或注解方式进行SQL映射,开发人员可以根据实际需求选择合适的方式。

  3. 易于集成:MyBatis可以与Spring等常见的Java框架无缝集成,提供了方便的整合方式。

  4. 高效:MyBatis通过对象关系映射(ORM)技术,将数据库操作转化为Java对象的方法调用,提高了数据库访问的效率。

  5. 可定制化:MyBatis提供了丰富的插件机制,可以根据需要扩展和定制框架的功能。

 二、Mybatis的配置

1.导入jar包

方便测试导入 包

2.配置文件

2.1在根目录下新建properties日志文件

在日志文件中写入如下代码(不创建会报错)

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 mybatis默认使用log4j作为输出日志信息。

2.2在根目录下新建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>
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/db_555?characterEncoding=utf-8" />
                //数据库账号
                <property name="username" value="root" />
                //数据库密码
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
</configuration>

三、Mybatis对数据的增删改查

1.准备工作

需要创建一个User类和User.xml的配置文件

1.1新建用户类和配置文件

User.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="test">


</mapper>

mybatis框架需要加载映射文件,将User.xml添加在SqlMapConfig.xml,如下

<mappers>
        <mapper resource="User.xml"></mapper>
</mappers>

2. 查询用户

id:方法名。
parameterType:定义输入到sql中的映射类型,#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
resultType:定义结果映射类型(全类名)。

2.1普通查询 

<?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="test">
    <!--通过id来查询用户-->
    <select id="findUserById" parameterType="int" resultType="com.ba.domain.User">
        select * from user where id = #{id}
    </select>
    <!--查询所有用户-->
    <select id="findUser" resultType="com.ba.domain.User">
        select * from user;
</mapper>
测试类 
package com.ba.test;

import com.ba.domain.Student;
import com.ba.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test(){
        SqlSession sqlSession = ssf.openSession();
        //查询全部用户
        List<User> users = sqlSession.selectList("test.findUser");
        for (User user : users) {
            System.out.println(user);
        }
        System.out.println("=============================================");
        //通过id查询用户
        User user = (User) sqlSession.selectOne("test.findUserById", 6);
        System.out.println(user);
    }
}
 运行结果

2.2模糊查询

配置文件(注意:如果是取简单数量类型的参数,括号中的值必须为value


    <!--模糊查询-->
    <!--${value}%是查询第一个字-->
    <!--%${value}%是查询包含这个字所有用户-->
    <select id="findUserLike" parameterType="String" resultType="com.ba.domain.User">
        select * from user where username like "${value}%"
    </select>

#{}和${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。一般用在=之后。

${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。一般用在like之后。

测试类 
package com.ba.test;

import com.ba.domain.Student;
import com.ba.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test(){
        SqlSession sqlSession = ssf.openSession();
        List<User> users = sqlSession.selectList("test.findUserLike", "王");
        for (User user : users) {
            System.out.println(user);
        }
    }
}
运行结果

3.添加用户 

配置文件

<insert id="addUser" parameterType="com.ba.domain.User">
        <!-- selectKey将主键返回,需要再返回 -->
        <selectKey keyProperty="id" order="AFTER" resultType="int">
            select last_insert_id()
        </selectKey>
        insert into user(username,password,gender,hobby,address,remark) values(#{username},#{password},#{gender},#{hobby},#{address},#{remark})
</insert>

测试类

package com.ba.test;

import com.ba.domain.Student;
import com.ba.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test1(){
        SqlSession sqlSession = ssf.openSession();
        User user = new User("尼古丁","123456","男","篮球","成都","000");
        sqlSession.insert("test.addUser",user);
        sqlSession.commit();
        sqlSession.close();
    }
}

运行结果 

4.删除用户

配置文件 

<!--通过id删除用户-->
    <delete id="deleteUserById" parameterType="int">
        delete from user where id = #{id}
    </delete>

测试类

package com.ba.test;

import com.ba.domain.Student;
import com.ba.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test(){
        SqlSession sqlSession = ssf.openSession();
        sqlSession.delete("test.deleteUserById",15);
        sqlSession.commit();
        sqlSession.close();
    }
}

 运行结果

5.修改用户 

配置文件

<!--通过id修改用户-->
    <update id="updateUser" parameterType="com.ba.domain.User">
        update user set username=#{username},password=#{password},gender=#{gender},hobby=#{hobby},address=#{address},remark=#{remark} where id=#{id}
    </update>

测试类

package com.ba.test;

import com.ba.domain.Student;
import com.ba.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDemo {
    SqlSessionFactory ssf = null;
    @Before
    public void creatFactory(){
        try {
            InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Test
    public void test(){
        SqlSession sqlSession = ssf.openSession();
        User user = new User();
        user.setId(10);
        user.setUsername("小黑");
        user.setPassword("123");
        user.setGender("女");
        user.setHobby("唱歌");
        user.setAddress("北京");
        user.setRemark("12233");
        sqlSession.update("test.updateUser",user);
        sqlSession.commit();
        sqlSession.close();
    }
}

运行结果

运行前

运行后

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值