Mybatis简单例子

本文介绍了如何使用MyBatis进行数据库操作,包括创建本地数据库、配置数据库连接、编写Bean类、映射文件及实现数据库功能的类,最后进行了功能测试。MyBatis简化了JDBC代码,通过XML或注解实现SQL和Java对象的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

要使用 MyBatis, 只需将 mybatis-x.x.x.jar文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
</dependency>
首先在本地新建数据库, 这里使用的是MySql。数据库结构如下:

这里写图片描述

配置数据库连接, 新建db.properties文件,内容如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false
jdbc.username=root
jdbc.password=yourpassword

注意行末不能有多余的空格。
同时将mysql驱动添加到工程中。

根据数据库的结构编写对应的Bean类。
package sample.mybatis;

public class User {
    private int id;
    private String userName;
    private int userAge;
    private String userAddress;

    public User(){}
    public User(int id, String userName, int userAge, String userAddress)
    {
        this.id = id;
        this.userName = userName;
        this.userAge = userAge;
        this.userAddress = userAddress;
    }

    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String username)
    {
        this.userName = username;
    }

    public int getUserAge()
    {
        return userAge;
    }

    public void setUserAge(int userAge)
    {
        this.userAge = userAge;
    }


    public String getuserAddress()
    {
        return userAddress;
    }

    public void setUserAddress(String userAddress)
    {
        this.userAddress = userAddress;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + userName + ", userAge=" + userAge + ", address=" + userAddress + "]";
    }
}
针对该类编写该类的映射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="org.mybatis">

    <resultMap type="User" id="UserList">
        <result property="id" column="id" />
        <result property="userName" column="userName"/>
        <result property="userAge" column="userAge" />
        <result property="userAddress" column="userAddress"/>
    </resultMap>

    <select id="selectAllUserId" resultType="java.lang.Integer">
        select id from user
    </select>

    <select id="findUserById" parameterType="int" resultType="User">
        SELECT * FROM USER WHERE id=#{id}
    </select>


    <insert id="insertIntoUser" parameterType="User">
       insert into USER (id, userName, userAge, userAddress) values (
          #{id}, #{userName}, #{userAge}, #{userAddress}
       )
   </insert>

    <insert id="insertUsers" useGeneratedKeys="true" keyProperty="id">
        insert into user (id, userName, userAge, userAddress) values
        <foreach item="item" collection="list" separator=",">
            (#{item.id}, #{item.userName}, #{item.userAge}, #{item.userAddress})
        </foreach>
    </insert>

    <update id="updateUser" parameterType="User">
        update user
        <set>
            <if test="userName != null">userName = #{userName},</if>
            <if test="userAge != null">userAge = #{userAge},</if>
            <if test="userAddress != null">userAddress = #{userAddress}</if>
        </set>
        where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="java.lang.Integer">
      delete from user where id = #{id}
    </delete>

</mapper>
配置mybatis的数据库映射配置xml(SqlMapConfig.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>
    <!-- 加载属性文件 -->
    <properties resource="db.properties">
        <!--properties中还可以配置一些属性名和属性值  -->
    </properties>
    <!-- 全局配置参数,需要时再设置 -->
    <!--http://www.mybatis.org/mybatis-3/zh/configuration.html-->

    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- 别名定义 -->

    <typeAliases>
        <typeAlias type="sample.mybatis.User" alias="User"/>
        <package name="com.huawei.test"/>
    </typeAliases>

    <typeHandlers>

    </typeHandlers>


    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!--what is mappers?-->
    <mappers>
        <mapper resource="sqlmap/User.xml"/>
    </mappers>

</configuration>
定义具体实现数据库功能的类
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 sample.mybatis.User;

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


public class MybatisFirst {


    //保存数据库中已有的主键。
    private static List<Integer> allUserId = new ArrayList<Integer>();
    private static final String resource = "SqlMapConfig.xml";
    private SqlSessionFactory sqlSessionFactory;

    MybatisFirst() throws IOException
    {
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    //根据主键选择用户
    public void selectUserById(int selectId)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try{
            User user = session.selectOne("org.mybatis.findUserById", selectId);
            System.out.println("id 为"+selectId+"的User信息为:"+user);
        } finally {
            session.close();
        }
    }

    //选取所有的主键
    public void selectAllUserId()
    {
        SqlSession session = sqlSessionFactory.openSession();
        try{
            allUserId = session.selectList("org.mybatis.selectAllUserId");
            System.out.println("所有的ID为:");
            for(Integer integer : allUserId)
            {
                System.out.println(integer);
            }
        } finally {
            session.close();
        }
    }

    //插入一个用户
    public void insertIntoUser(User user)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            session.selectOne("org.mybatis.insertIntoUser", user);
            System.out.println("插入的的User信息为:"+user);
        } finally {
            session.close();
        }
    }

    //插入用户List
    public void insertUsers(List<User> userList)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            session.selectOne("org.mybatis.insertUsers", userList);
            System.out.println("插入的Users信息为:");
            for(User user : userList)
            {
                System.out.println(user);
            }
        } finally {
            session.close();
        }
    }

    //更新用户
    public void updateUser(User user)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            session.selectOne("org.mybatis.updateUser", user);
            System.out.println("更新后的用户信息为:" + user);
        } finally {
            session.close();
        }
    }

    //通过主键删除用户
    public void deleteUserById(int deleteId)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try{
            User user = session.selectOne("org.mybatis.deleteUser", deleteId);
            System.out.println(user);
        } finally {
            session.close();
        }
    }

    public void deleteAllUsers()
    {
        SqlSession session = sqlSessionFactory.openSession();
        try{
            for(Integer integer : allUserId)
            {
                User user = session.selectOne("org.mybatis.deleteUser", integer);
                System.out.println(user);
            }
        } finally {
            session.close();
        }
    }


    public boolean isAllUserIdContains(Integer Id)
    {
        for(Integer integer : allUserId)
        {
            if(integer.equals(Id))
            {
                return true;
            }
        }
        return false;
    }

    //随机生成用户
    public List<User> createUser(int userNumber)
    {
        List<User> userList = new ArrayList<User>();
        Random random = new Random();
        for(int i = 0; i < userNumber; i++)
        {
            User user = new User();
            Integer Id = Integer.valueOf(random.nextInt(1000000));

            while(isAllUserIdContains(Id))
            {
                Id = Integer.valueOf(random.nextInt(1000000));
            }
            allUserId.add(Id);
            user.setId(Id);
            user.setUserAge(random.nextInt(100));
            user.setUserName(getRandomString(10));
            user.setUserAddress(getRandomString(10));
            userList.add(user);
        }
        return userList;
    }

    public static String getRandomString(int length)
    {
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();

        for(int i = 0; i < length; i++)
        {
            sb.append(str.charAt(random.nextInt(62)));
        }
        return sb.toString();
    }
}
最后测试功能
import sample.mybatis.User;

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

public class TestMybatis {
    public static void main(String[] args) throws IOException
    {
        MybatisFirst mybatis = new MybatisFirst();;
        mybatis.deleteAllUsers();
        mybatis.selectAllUserId();
        List<User> userList = mybatis.createUser(20);
        User user = new User(3, "l84102261", 21, "Xi'an");
        mybatis.updateUser(user);
        mybatis.selectUserById(3);
        mybatis.insertUsers(userList);
        mybatis.deleteAllUsers();
        mybatis.insertIntoUser(user);

    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值