mybatis怎么操作数据库?mybatis数据库操作之增删改查

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。是开发人员常用的框架之一,它能通过在任何映射SQL语句中,那mybatis怎么操作数据库?下面来我们就来给大家讲解一下。

对一个User表的CRUD操作:

User表:

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --Table structure
for `user`-- -- -- -- -- -- -- -- -- -- -- -- -- -- --DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`(
    `id`
    int(11) NOT NULL AUTO_INCREMENT
    , `userName`
    varchar(50) DEFAULT NULL
    , `userAge`
    int(11) DEFAULT NULL
    , `userAddress`
    varchar(200) DEFAULT NULL
    , PRIMARY KEY(`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --Records of user-- -- -- -- -- -- -- -- -- -- -- -- -- -- --INSERT INTO `user`
VALUES('1', 'summer', '30', 'shanghai');
INSERT INTO `user`
VALUES('2', 'test2', '22', 'suzhou');
INSERT INTO `user`
VALUES('3', 'test1', '29', 'some place');
INSERT INTO `user`
VALUES('4', 'lu', '28', 'some place');
INSERT INTO `user`
VALUES('5', 'xiaoxun', '27', 'nanjing');

在Src目录下建一个mybatis的xml配置文件Configuration.xml

<&#63;xml version="1.0" encoding="UTF-8" &#63;><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>
  <!-- mybatis别名定义 -->
  <typeAliases> 
    <typeAlias alias="User" type="com.mybatis.test.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://127.0.0.1:3306/mybatis" />
      <property name="username" value="root"/>
      <property name="password" value="admin"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->
  <mappers>
    <mapper resource="com/mybatis/test/User.xml"/>
  </mappers></configuration>

定义User mappers的User.xml配置文件

<&#63;xml version="1.0" encoding="UTF-8" &#63;><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.test.IUserOperation">
  <!-- select语句 -->
  <select id="selectUserByID" parameterType="int" resultType="User">
    select * from `user` where user.id = #{id}
  </select>
  
  <!-- 定义的resultMap,可以解决类的属性名和数据库列名不一致的问题-->
  <!-- <resultMap type="User" id="userResultMap">
    <id property="id" column="user_id" />
    <result property="userName" column="user_userName" />
    <result property="userAge" column="user_userAge" />
    <result property="userAddress" column="user_userAddress" />
  </resultMap> -->
  
  <!-- 返回list的select语句,注意 resultMap的值是指向前面定义好的 -->
  <!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap">
    select * from user where user.userName = #{userName}
  </select> -->
  
  <select id="selectUsersByName" parameterType="string" resultType="User">
    select * from user where user.userName = #{userName}
  </select>
  
  <!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致。
  useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性--> 
  <insert id="addUser" parameterType="User" 
    useGeneratedKeys="true" keyProperty="id"> 
    insert into user(userName,userAge,userAddress) 
       values(#{userName},#{userAge},#{userAddress}) 
  </insert>
  
  <update id="updateUser" parameterType="User" >
    update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
  </update>
  
  <delete id="deleteUser" parameterType="int">
    delete from user where id=#{id}
  </delete>
  </mapper>

配置文件实现了接口和SQL语句的映射关系。selectUsersByName采用了2种方式实现,注释掉的也是一种实现,采用resultMap可以把属性和数据库列名映射关系定义好,property为类的属性,column是表的列名,也可以是表列名的别名!

User类的定义:

package com.mybatis.test;
public class User
{
    private int id;
    private String userName;
    private int userAge;
    private String 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 this.userName + " " + this.userAge + " " + this.userAddress;
    }

IUserOperaton定义:

package com.mybatis.test;
import java.util.List;
public interface IUserOperation
{
    public User selectUserByID(int id);
    public List < User > selectUsersByName(String userName);
    public void addUser(User user);
    public void updateUser(User user);
    public void deleteUser(int id);
}

IUserOperation为操作接口,函数名和mybatis的xml配置文件中的操作id名对应。

测试类Test:

package com.mybatis.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test
{
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;
    static
    {
        try
        {
            reader = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(reader);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    public static SqlSessionFactory getSession()
    {
        return sqlSessionFactory;
    }
    public void getUserByID(int userID)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            IUserOperation userOperation = session
                .getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(userID);
            if (user != null)
            {
                System.out.println(user.getId() + ":" + user.getUserName() +
                    ":" + user.getUserAddress());
            }
        }
        finally
        {
            session.close();
        }
    }
    public void getUserList(String userName)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            IUserOperation userOperation = session
                .getMapper(IUserOperation.class);
            List < User > users = userOperation.selectUsersByName(userName);
            for (User user: users)
            {
                System.out.println(user.getId() + ":" + user.getUserName() +
                    ":" + user.getUserAddress());
            }
        }
        finally
        {
            session.close();
        }
    }
    /**
     * 增加后要commit
     */
    public void addUser()
    {
        User user = new User();
        user.setUserAddress("place");
        user.setUserName("test_add");
        user.setUserAge(30);
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            IUserOperation userOperation = session
                .getMapper(IUserOperation.class);
            userOperation.addUser(user);
            session.commit();
            System.out.println("新增用户ID:" + user.getId());
        }
        finally
        {
            session.close();
        }
    }
    /**
     * 修改后要commit
     */
    public void updateUser()
    {
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            IUserOperation userOperation = session
                .getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(1);
            if (user != null)
            {
                user.setUserAddress("A new place");
                userOperation.updateUser(user);
                session.commit();
            }
        }
        finally
        {
            session.close();
        }
    }
    /**
     * 删除后要commit.
     * 
     * @param id
     */
    public void deleteUser(int id)
    {
        SqlSession session = sqlSessionFactory.openSession();
        try
        {
            IUserOperation userOperation = session
                .getMapper(IUserOperation.class);
            userOperation.deleteUser(id);
            session.commit();
        }
        finally
        {
            session.close();
        }
    }
    public static void main(String[] args)
    {
        try
        {
            Test test = new Test();
            // test.getUserByID(1);
            // test.getUserList("test1");
            // test.addUser();
            // test.updateUser();
            // test.deleteUser(6);
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

这样就完成了Mybatis增删改查的步骤,Mybatis的使用很灵活,它不会对应用程序或者数据库的现有设计强加任何影响,能够满足操作数据库的所有需求,最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

springmvc怎么找到controller?springmvc如何创建controller?

为什么qt创建的文件是乱码?qt程序文件怎么打包?

java程序员如何成为架构师?java程序员成为架构师思路