MyBatis框架中通过映射文件和实现增删改查操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39469809/article/details/79017511

开发工具:mysql +IDEA

什么是 MyBatis?

      MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis和Hibernate的使用基本一样,区别在于Hibernate在Java代码中实现数据库操作,集成度高;Mybatis在注解或者xml文件中通过配置实现SQL语句,更加灵活


MyBatis实例:

目录结构


一:我们先导依赖,需要用到mysql和mybatis的jar包

<!-- 引入 Mysql依赖-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.43</version>
</dependency>
<!--MyBatis依赖-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>

二:创建并配置MyBatis的配置文件

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>
    <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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- xml映射 -->
        <mapper resource="com/entity/Person.xml"/>
    </mappers>
    </configuration>

三:写实体类

Person

package com.entity;
public class Person {
    private int pid;
    private  String pname;
    private  int page;

    public Person() {
    }
    public Person(int pid, String pname, int page) {
        this.pid = pid;
        this.pname = pname;
        this.page = page;
    }
    public Person(String pname) {
        this.pname = pname;
    }
    public Person(String pname, int page) {
        this.pname = pname;
        this.page = page;
    }
    //get和set方法
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    @Override
    public String toString() {
        return "Person{" +
                "pid=" + pid +
                ", pname='" + pname + '\'' +
                ", page=" + page +
                '}';
    }
}
四:在映射文件中实现增删改查操作

Person.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.dao.PersonDao">
    <!-- 配置单个查询 -->
    <select id="getPersonById" parameterType="int" resultType="com.entity.Person">
         select * from person where pid=#{pid}
    </select>
    <!-- 根据list集合查询多个 -->
    <select id="getPersons" resultType="com.entity.Person">
        select * from person;
    </select>

    <!-- 配置添加 -->
    <select id="addPerson" parameterType="com.entity.Person"  resultType="com.entity.Person">
       insert into person(pname,page) values(#{pname},#{page});
    </select>

    <!-- 配置删除 -->
    <select id="deletePersonById" parameterType="int">
        delete from person where pid=#{pid}
    </select>

    <!--.配置修改 -->
    <select id="updatePerson" parameterType="com.entity.Person" resultType="com.entity.Person">
        update person set pname=#{pname},page=#{page} where pid=#{pid};
    </select>
</mapper>
五:实现数据

package com.test;

import com.dao.PersonDao;
import com.entity.Person;
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.Test;

import java.util.List;

public class TestMyBatis {
    
    @Test
    public void testSelect() throws Exception{
        //读取配置文件
        //获取SqlsessionFactory对象
//        try {
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            //通过sessionFactory获得Sqlsession
            SqlSession sqlSession = sqlSessionFactory.openSession();

            //添加
            Person person=new Person("宏宏",18);
            sqlSession.insert("person.addPerson",person) ;
            System.out.println("添加的值:"+person);

            //删除
            sqlSession.delete("person.deletePersonById",6);

            //修改
            Person person1=new Person(5,"蒲蒲",6);
            sqlSession.update("person.updatePerson",person1);
            System.out.println("修改成功!");

            //查询单个
            Person person=sqlSession.selectOne("person.getPersonById",1);
            System.out.println(person);

            //根据list集合查询多个
            List<Person> people=sqlSession.selectList("person.getPersons");
            for (Person person : people) {
                System.out.println(person);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 
 

调用Dao的增删改查:

先写dao的接口:

package com.dao;
import com.entity.Person;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;

public interface  PersonDao {

    //添加
    @Insert("insert into person(pname,page) values(#{pname},#{page})")
    public void addPerson(Person person);

    //删除
    @Delete("delete from person where pid=#{pid}")
    public void deletePersonById(int pid);

    //修改
    @Update("update person set pname=#{pname},page=#{page} where pid=#{pid}")
    public void updatePerson(Person person);

    //查询单个\
    @Select("select * from person where pid = #{pid}")
    public Person getPersonById(int pid);
    //根据list集合查询多个
    @Select("select * from person")
    public List<Person> getPersons();
}
 
 

然后把映射文件中的命名空间改为dao的接口(不需要在写实现类了,只要写接口方法即可)

<mapper namespace="com.dao.PersonDao">

后需要得到dao的类
package com.test;

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.Test;

public class TestMyBatis {

    @Test
    public void testSelect() throws Exception{
        //读取配置文件
        //获取SqlsessionFactory对象
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            //通过sessionFactory获得Sqlsession
            SqlSession sqlSession = sqlSessionFactory.openSession();
 
 
          //通过dao方法进行CRUD
          //使用MyBatis的配置方式实现CRUD
          // 查询单个
          PersonDao personDao=sqlSession.getMapper(PersonDao.class);
          Person person = personDao.getPersonById(1);
          System.out.println(person);

          //根据list集合查询多个
           List<Person> list = personDao.getPersons();
           for (Person person1 : list) {
               System.out.println(person1);
           }

          //添加
           Person person2 = new Person("幸运",12);
           personDao.addPerson(person2);
           System.out.println("添加的值:"+person2);

          //删除
            personDao.deletePersonById(6);
            System.out.println("删除成功!");

          //修改
           Person person1=new Person(4,"矮人",11);
           personDao.updatePerson(person1);
           System.out.println("修改成功");

          //提交
            sqlSession.commit();
          //关闭
            sqlSession.close();


通过注解实现增删改查:

只需要在方法上面加上注解即可,不需要映射文件了

PersonDao:

package com.dao;

import com.entity.Person;
import java.util.List;
public interface  PersonDao {

    //添加
    @Insert("insert into person(pname,page) values(#{pname},#{page})")
    public void addPerson(Person person);

    //删除
    @Delete("delete from person where pid=#{pid}")
    public void deletePersonById(int pid);

    //修改
    @Update("update person set pname=#{pname},page=#{page} where pid=#{pid}")
    public void updatePerson(Person person);

    //查询单个
    @Select("select * from person where pid = #{pid}")
    public Person getPersonById(int pid);

    //根据list集合查询多个
     @Select("select * from person")
    public List<Person> getPersons();
 
 然后在mybatis-config.xml文件中配置dao包 
 

<mappers>
    <!-- PersonDao注解 -->
    <mapper class="com.dao.PersonDao"/>
</mappers>
</configuration>
 
 
实现:
package com.test;

import com.dao.PersonDao;
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.Test;

public class TestZhuJie {

    //注解
    @Test
       public void testzhujie() throws Exception{
           ///读取配置文件
           //获取SqlsessionFactory对象
           SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));

           //通过sessionFactory获得Sqlsession
           SqlSession sqlSession = sqlSessionFactory.openSession();

           //通过MyBatis的注解方式实现CRUD
           //得到dao
           PersonDao personDao=sqlSession.getMapper(PersonDao.class);
          //查询单个
           Person person = personDao.getPersonById(1);
           System.out.println(person);

          //根据list集合查询多个
           List<Person> list = personDao.getPersons();
             for (Person person1 : list) {
                  System.out.println(person1);
           }

          //添加
           Person person2 = new Person("晴天",15);
           personDao.addPerson(person2);
           System.out.println(person2);

          //删除
            personDao.deletePersonById(3);
            System.out.println("删除成功!");

         //修改
            Person person1=new Person(7,"笨蛋",11);
            personDao.updatePerson(person1);
            System.out.println("修改成功");

         //提交
           sqlSession.commit();
         //关闭
           sqlSession.close();
       }
}
 
 
 
 


 
 
 
 





猜你喜欢

转载自blog.csdn.net/qq_39469809/article/details/79017511
今日推荐