Mybatis动态SQL实验

Mybatis动态SQL实验

对数据库mydb中的图书表(t_book),在映射文件中配置以下操作的sql语句,并在测试类中为每条语句书写单独的测试模块进行验证。

(1)根据id查询图书信息

(2)根据图书名称模糊查询相关图书信息

(3)添加图书

(4)根据id修改图书

(5)根据id删除图书

(6)有如下查询界面配置单击查询按钮,完成用户查询要求时的查询语句。

(7)有如下批量删除界面用户可以同时勾选要删除的多本图书,完成批量删除操作,请配置相应操作语句。

文件目录结构

**

在这里插入图片描述

**

修改pom.XML文件

**

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>zjwTest01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>



</project>

**

创建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>


    <properties resource="db.properties"/>

    <typeAliases>
        <package name="com.zjw.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">  <!--数据库连接池-->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <!--serverTimezone=GMT是服务器时区-->
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>


    <mappers>
        <package name="com/zjw/mapper"/>
    </mappers>

</configuration>

**

创建Book类

**

package com.zjw.pojo;

public class Book {
    
    
    private Integer id;
    private String name;
    private String author;
    private String press;
    private Integer price;

    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 getAuthor() {
    
    
        return author;
    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }

    public String getPress() {
    
    
        return press;
    }

    public void setPress(String press) {
    
    
        this.press = press;
    }

    public Integer getPrice() {
    
    
        return price;
    }

    public void setPrice(Integer price) {
    
    
        this.price = price;
    }

    @Override
    public String toString() {
    
    
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", press='" + press + '\'' +
                ", price=" + price +
                '}';
    }
}

创建BookMapper接口

  • 接口方法中的参数

  • 只有一个数组参数或集合参数
    默认情况:集合collection=list, 数组是collection=array

    推荐:使用 @Param 来指定参数的名称

  • 多参数
    多参数请使用 @Param 来指定, 否则SQL中会很不方便

  • 参数是Map 指定为 Map 中的对应的 Key 即可。其实上面的 @Param 最后也是转化为 Map 的。

  • 参数是对象 使用属性.属性即可。

package com.zjw.mapper;


import com.zjw.pojo.Book;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookMapper {
    
    
    //(1)根据id查询图书信息
    Book findbyid(@Param("id") Integer id);

    //(2)根据图书名称模糊查询相关图书信息
    List<Book> findbyname(@Param("name") String name);

    //(3)添加图书
    void insertbook(Book book);

    //(4)根据id修改图书
    int updatebook(Book book);

    //(5)根据id删除图书
    void deleteById(@Param("id") Integer id);

    //(6)完成用户查询要求时的查询语句(图书名称,作者,出版社)
    List<Book> findByCondition(@Param("name") String name, @Param("author") String author, @Param("press") String press);

    // List<Book> findByCondition(Book book);

    // List<Book> findByCondition(Map map);

    //(7)根据id批量删除图书
    void deleteByIds(@Param("ids") int[] ids);


}

**

创建BookMaper.XML文件

**
在资源目录同级文件夹下(见IDEA目录文件的截图)

<?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.zjw.mapper.BookMapper">
    <select id="findbyid" resultType="com.zjw.pojo.Book">
        select *
        from t_book
        where id = #{id}
    </select>

    <select id="findbyname" resultType="com.zjw.pojo.Book">
        select *
        from t_book
        where name like concat('%', #{name}, '%')
    </select>

    <insert id="insertbook" useGeneratedKeys="true" keyProperty="id">
        insert into t_book (name, author, press, price)
        values (#{name}, #{author}, #{press}, #{price})
    </insert>

    <update id="updatebook">
        update t_book
        <set>
            <if test="name !=null and name !='' ">name=#{name},
            </if>
            <if test="author !=null and author !=' '">author=#{author},
            </if>
            <if test="press !=null and press !='' ">press=#{press},
            </if>
            <if test="price !=null  ">price=#{price}
            </if>
        </set>
        where id = #{id};

    </update>

    <delete id="deleteById">
        delete
        from t_book
        where id = #{id}
    </delete>

    <select id="findByCondition" resultType="com.zjw.pojo.Book">
        select *
        from t_book
        <where>
            <if test="name != null and name !=''">and name like concat('%', #{name}, '%')</if>
            <if test="author != null and author !=''">and author like concat('%', #{author}, '%')</if>
            <if test="press != null and press !='' ">and press like concat('%', #{press}, '%')</if>
        </where>

    </select>

    <delete id="deleteByIds">
        delete
        from t_book
        where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>;
    </delete>

</mapper>

创建MybatisUtils工具类

package com.zjw.utils;

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 java.io.IOException;
import java.io.Reader;

public class MybatisUtils {
    
    
    private static SqlSessionFactory sqlSessionFactory;

    static {
    
    
        try {
    
    
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    public static SqlSession getSessioin() {
    
    
        return sqlSessionFactory.openSession();
    }

}

创建数据库连接资源文件

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC
mysql.username=root
mysql.password=1669

新建测试类BookTest

import com.zjw.mapper.BookMapper;
import com.zjw.pojo.Book;
import com.zjw.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class BookTest {
    
    
    //根据id查询图书信息
    @Test
    public void FindByID() {
    
    
        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //对象调用方法
        Book book = bookMapper.findbyid(1);
        System.out.println(book.toString());
        //提交
        session.commit();
        //释放资源
        session.close();
    }

    //根据图书名称模糊查询相关图书信息
    @Test
    public void FindByName() {
    
    
        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //对象调用方法
        List<Book> book = bookMapper.findbyname("Java");
        System.out.println(book);
        //提交
        session.commit();
        //释放资源
        session.close();
    }

    //添加图书
    @Test
    public void InsertBook() {
    
    
        String name = "海底两万里";
        String author = "凡尔纳";
        String press = "清华出版社";
        Integer price = 88;

        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //对象调用方法
        Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setPress(press);
        book.setPrice(price);
        //执行文件
        bookMapper.insertbook(book);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }

    //根据id修改图书
    @Test
    public void UpdateBook() {
    
    
        Integer id = 1;
        String press = "清华出版社";
        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //对象调用方法
        Book book = new Book();
        book.setPress(press);
        book.setId(id);
        //执行文件
        bookMapper.updatebook(book);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }

    //根据id删除图书
    @Test
    public void DeleteById() {
    
    
        Integer id = 1;
        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //执行文件
        bookMapper.deleteById(id);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }

    //完成用户查询要求时的查询语句(图书名称,作者,出版社)
    //这里演示的是无交互模式
    @Test
    public void findBycondition() {
    
    

        String name = "海底两万里";
        String author = "凡尔纳";
        String press = "清华出版社";

        /*Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setPress(press);*/

        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);

        List<Book> books = bookMapper.findByCondition(name, author, press);

        System.out.println(books);

        //提交
        session.commit();
        //释放资源
        session.close();
    }

    //批量删除
    @Test
    public void DeleteByIds() {
    
    

        int[] ids = {
    
    9, 10, 11};
        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //执行文件
        bookMapper.deleteByIds(ids);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }


}

**

新建addBook类

**
因为@Test控制台为只读模式,故新建addBook类来实现交互,完成自定义添加

import com.zjw.mapper.BookMapper;
import com.zjw.pojo.Book;
import com.zjw.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.Scanner;

public class addBook {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("请输入书名");
        Scanner sc1 = new Scanner(System.in);
        String name = sc1.nextLine();
        System.out.println("请输入作者");
        Scanner sc2 = new Scanner(System.in);
        String author = sc2.nextLine();
        System.out.println("请输入出版社");
        Scanner sc3 = new Scanner(System.in);
        String press = sc3.nextLine();
        System.out.println("请输入价格");
        Scanner sc4 = new Scanner(System.in);
        Integer price = sc4.nextInt();

        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);
        //对象调用方法
        Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setPress(press);
        book.setPrice(price);
        //执行文件
        bookMapper.insertbook(book);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }
}

**

新建findBycondition类

**
同理,新建findBycondition类来实现交互,完成查询

import com.zjw.mapper.BookMapper;
import com.zjw.pojo.Book;
import com.zjw.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.Scanner;

public class findBycondition {
    
    
    public static void main(String[] args) {
    
    

        System.out.println("请输入书名");
        Scanner sc1 = new Scanner(System.in);
        String name = sc1.nextLine();
        System.out.println("请输入作者");
        Scanner sc2 = new Scanner(System.in);
        String author = sc2.nextLine();
        System.out.println("请输入出版社");
        Scanner sc3 = new Scanner(System.in);
        String press = sc3.nextLine();
//        String name="海底两万里";
//        String author="凡尔纳";
//        String press="清华出版社";

        Book book = new Book();
        book.setName(name);
        book.setAuthor(author);
        book.setPress(press);

        SqlSession session = MybatisUtils.getSessioin();
        BookMapper bookMapper = session.getMapper(BookMapper.class);

        List<Book> books = bookMapper.findByCondition(name, author, press);
       // List<Book> books = bookMapper.findByCondition(book);

        System.out.println(books);

        //提交
        session.commit();
        //释放资源
        session.close();
    }
}

如果复制后无法运行,参照java 错误 无效的源发行版:XX 解决方法

猜你喜欢

转载自blog.csdn.net/m0_57025749/article/details/123429855
今日推荐