mybatis实现简单的增删查改

Posted 凌巴哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis实现简单的增删查改相关的知识,希望对你有一定的参考价值。

接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的。这样学习起来,方向性也会更强一些。我对于mybatis的理解是,
它是一个封装了JDBC的java框架。所能实现的功能是对数据库进行增删查改的功能。

首先,需要搭建一个demo,用于学习这个框架的使用方式。
(1)在IDE上建立自己的工程目录,一个普通的java工程项目就好,我电脑本地的IDE是Myeclipse。
(2)引入搭建框架需要的jar包,这个直接去网上搜索就好。
(3)框架的核心实现都是基于配置的,引入jar包后,先配置mybatis的核心xml文件,我自己命名为mybatis.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    
</configuration>

 

environments 和 environment这两个标签,里面的属性值,我直接按照官方提供的API定义,重点是dataSource标签下面的子标签,四个property分别用于指定数据库连接驱动,数据库连接地址,用户名、密码。这些信息统一使用properties文件配置。properties文件的信息如下

  driver = com.mysql.jdbc.Driver
  url = jdbc:mysql://localhost:3306/crm
  username = root
  password =root


(4)上面的配置是一些全局配置,下一步需要建立一个实体,映射mysql数据库中的某张表,我这里的表名叫A。建立的实体类叫User

public class User {
    
    private Integer id ;
    
    private String name ;
    
    private String age ; 
    
    private String score ;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }
    
    public String toString(){
        return "id = " + id + " "
                +"name = " + name + " "
                +"age = " + age + " "
                +"score = " + score + " ";
    }
}

建立好实体类后,再去配置实体类对应的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="com.test.IUserOperation">

    <select id="getSingle" parameterType="int" resultType="com.domain.User">
        select * from A where id = #{id}
    </select>
    <select id="ALL" parameterType="int" resultType="com.domain.User">
        select * from A 
    </select>
    
    <delete id="deleteOne" parameterType="com.domain.User">
        delete from A where id = #{id}
    </delete>
    
    <select id="findByUserId" parameterType="int" resultType="com.domain.User">
        select * from A where id = #{id}
    </select>
    
    <insert id="addUser" parameterType="com.domain.User" useGeneratedKeys="false" keyProperty="id">
        insert into A values (#{id},#{name},#{age},#{score})
    </insert>
    
    <update id="updateUser" parameterType="com.domain.User" >
        update A set name = #{name},age = #{age},score = #{score} where id = #{id}
    </update>
    
    <delete id="deleteUser" parameterType="int">
        delete from A where id = #{id}
    </delete>
    
    
</mapper>

这个配置里的namespace必须是唯一的,而且是你需要映射的实体类的绝对路径,我这边设计为基础接口的开发方式,所以映射到的是我的接口。接口里定义了相关的增添查改的方法,配置如下

interface IUserOperation{
    User findByUserId(Integer id);
    void addUser(User u );
    void updateUser(User u);
    void deleteUser(Integer id);
}

接口中的方法名,对应xml文件里的select、update、insert、delete标签下的id名字,必须完全相同,否则会报错。在对应的标签下,编写你想要实现的sql语句。其中的#{id}、#{name}这些是用于接收参数的。编写完后,就可以写测试类去测试啦。

public class MyBatisTest {
    private static final String confPath = "mybatis.xml";
    private static final String propertiesPath = "message.properties";
    private static SqlSessionFactory ssf = null;
    private static SqlSession session = null;
    
    static{
        InputStream in  = MyBatisTest.class.getClassLoader().getResourceAsStream(confPath);
        Properties pro = new Properties();
        try {
            pro.load(MyBatisTest.class.getClassLoader().getResourceAsStream(propertiesPath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ssf = new SqlSessionFactoryBuilder().build(in,pro);
        session =  ssf.openSession();
    }
    
    /**
     * 查询测试
     */
    public static void testSelect(){
        
        IUserOperation iUser = session.getMapper(IUserOperation.class);
        User u = iUser.findByUserId(5);
        System.out.println(u.toString());
        session.close();
        
    }
    
    /**
     * 删除测试
     */
    public static void testDelete(){
        IUserOperation iUser = session.getMapper(IUserOperation.class);
        iUser.deleteUser(14);
        session.commit();
        session.close();
    }
    
    /**
     * 修改数据
     */
    public static void testUpdate(){
        IUserOperation iUser = session.getMapper(IUserOperation.class);
        User u = new User();
        u.setId(3);
        u.setName("TEST_COME");
        u.setAge("87");
        u.setScore("100");
        iUser.updateUser(u);
        session.commit();
        
        session.close();
    }
    
    /**
     * 数据添加
     */
    public static void testAdd(){
        IUserOperation iUser = session.getMapper(IUserOperation.class);
        
        User u = new User();
        u.setId(14);
        u.setAge("33");
        u.setName("liberation");
        u.setScore("**");
        
        iUser.addUser(u);
        session.commit();
        session.close();
    }
    
    public static void main(String[] args) {
        //testAdd();
        //testUpdate();
        //testDelete();
        testSelect();
    }
    
}

官方API上建议,把session设置为局部变量,我这里偷懒,设为全局变量。

以上是关于mybatis实现简单的增删查改的主要内容,如果未能解决你的问题,请参考以下文章

mybatis增删查改

[mybatis]深入浅出Mybatis的SQL映射之增删查改

mybatis从入门到精通 增删查改

单链表~增删查改(附代码)~简单实现

Vuelayui实现简单的增删查改

Mybatis之Oracle增删查改示例--转