day27_1026_java_MyBatis_xml

1.MyBatis考核

1.1 表

-- 订单表
create table `order`(
  oid int primary key auto_increment,
    price double(6,2),
    create_time date,
    update_time date,
    `desc` varchar(100)
);
​
insert into `order`(price,create_time,update_time,`desc`) values(998, '2023-10-25', '2023-10-26', '张三的订单');
insert into `order`(price,create_time,update_time,`desc`) values(777, '2023-11-22', '2023-12-24', '李四的订单');
​
​
-- 班级表
create table class(
  cid int primary key auto_increment,
    class_name varchar(50),
    create_time varchar(10),
    update_time varchar(10),
    `desc` varchar(100)
);
​
​
insert into `class`(class_name,create_time,update_time,`desc`) values('12班', '2023-10-25', '2023-10-26', '张三的班级');
insert into `class`(class_name,create_time,update_time,`desc`) values('34班', '2023-10-28', '2023-10-29', '李四的班级');

1.2 项目结构

  • 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>com.czxy</groupId>
        <artifactId>day042_mybatis_exam</artifactId>
        <version>1.0-SNAPSHOT</version>
    ​
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    ​
        <!-- 坐标   -->
        <dependencies>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.28</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.9</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.26</version>
            </dependency>
        </dependencies>
    ​
    ​
    </project>

1.3 订单管理

1.3.1 JavaBean:Order

package com.czxy.domain;
​
import lombok.Data;
​
import java.util.Date;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
@Data
public class Order {
    private Integer oid;
    private Double price;
    private Date createTime;
    private Date updateTime;
    private String desc;
}
​
/*
create table `order`(
  oid int primary key auto_increment,
    price double(6,2),
    create_time date,
    update_time date,
    `desc` varchar(100)
);
 */

1.3.2 映射OrderMapper

package com.czxy.mapper;
​
import com.czxy.domain.Order;
import org.apache.ibatis.annotations.*;
​
import java.util.List;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public interface OrderMapper {
    /**
     * 查询所有
     * @return
     */
    @Select("select oid,price,create_time createTime,update_time as updateTime, `desc` from `order`")
    public List<Order> selectAll();
​
    /**
     * 通过id查询详情
     * @param oid
     * @return
     */
    @Select("select * from `order` where oid=#{oid}")
    public Order selectById(@Param("oid") Integer oid);
​
    /**
     * 添加
     * @param order
     * @return
     */
    @Insert("insert into `order`(price,create_time,update_time,`desc`) values(#{price}, #{createTime}, #{updateTime}, #{desc})")
    public Integer insert(Order order);
​
    /**
     * 修改
     * @param order
     * @return
     */
    @Update("update `order` set price=#{price}, create_time=#{createTime}, update_time=#{updateTime}, `desc`=#{desc} where oid=#{oid}")
    public Integer update(Order order);
​
    /**
     * 通过id删除
     * @param oid
     * @return
     */
    @Delete("delete from `order` where oid=#{oid}")
    public Integer deleteById(@Param("oid") Integer oid);
}
​

1.3.3 测试

package com.czxy;
​
import com.czxy.domain.Order;
import com.czxy.mapper.OrderMapper;
import com.czxy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
​
import java.util.Date;
import java.util.List;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public class TestOrderMapper {
​
    @Test
    public void testSelectAll() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        List<Order> orderList = orderMapper.selectAll();
        //4 处理结果
        orderList.forEach(System.out::println);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testSelectById() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = orderMapper.selectById(1);
        //4 处理结果
        System.out.println(order);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
​
    @Test
    public void testInsert() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = new Order();
        order.setPrice(345d);
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        order.setDesc("66666");
        Integer result = orderMapper.insert(order);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testUpdate() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = new Order();
        order.setOid(3);
        order.setPrice(1234d);
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        order.setDesc("76543");
        Integer result = orderMapper.update(order);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testDelete() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Integer result = orderMapper.deleteById(3);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
}
​

1.4 班级管理

1.4.1 JavaBean:Class

package com.czxy.domain;
​
import lombok.Data;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
@Data
public class Class {
    private Integer cid;
    private String className;
    private String createTime;
    private String updateTime;
    private String desc;
}
​
/*
create table class(
  cid int primary key auto_increment,
    class_name varchar(50),
    create_time varchar(10),
    update_time varchar(10),
    `desc` varchar(100)
);
​
 */

1.4.2 映射ClassMapper

package com.czxy.mapper;
​
import com.czxy.domain.Class;
import org.apache.ibatis.annotations.Insert;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public interface ClassMapper {
    @Insert("insert into class(class_name,create_time,update_time,`desc`) values(#{className},#{createTime},#{updateTime},#{desc})")
    public Integer insert(Class classes);
}
​

1.4.3 测试

package com.czxy;
​
import com.czxy.domain.Class;
import com.czxy.mapper.ClassMapper;
import com.czxy.mapper.OrderMapper;
import com.czxy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public class TestClassMapper {
​
    @Test
    public void testInsert() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        ClassMapper classMapper = sqlSession.getMapper(ClassMapper.class);
        //3 操作
        Class classes = new Class();
        classes.setClassName("56班");
        classes.setCreateTime("2023-09-18");
        classes.setUpdateTime("2023-09-20");
        classes.setDesc("456777");
        Integer result = classMapper.insert(classes);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
}

1.5 常见错误及其调试

1.5.1 maven环境

  • 1)问题1:没有启用maven,每次操作都不断下载依赖资源

  • 2)问题2:jdk版本,导致新功能不能使用。

现象

  • 解决方案

  • 问题3:依赖有错。在解决“问题1”基础上

    • 现象:

  • 解决思路:

    • 清理maven仓库:cleanLastUpdated.bat

    • 清理项目:

  • 问题4:maven软件配置问题

    • 现象:

  • 解决方案:

    • 思路1:maven/conf/settings.xml 配置错误

    • 思路2:pom.xml文件配置错误

1.5.2 MyBatis

  • 问题1:mapper未注册

    • 现象

      Type interface com.czxy.mapper.OrderMapper is not known to the MapperRegistry.

解决方案:核心配置文件<mappers>配置错误

  • 问题2:缺失属性

    • 显示

  • 解决方案:检查JavaBean对应的属性名

1.6 JavaBean:字段、属性

public class User {j
    private String username;        //字段Field
    
    //属性 property :通过getter或setter方法推到而来。
    //  setUsername -->(去掉set) --> Username -->(首字母小写) --> username  写属性
    //  getUsername -->(去掉get) --> Username -->(首字母小写) --> username  读属性
    //注意:默认情况下,属性名和字段名一致的。
    public void setUsername(String username) {  
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
}
public class Book {
    private String title;           //字段名:title
            
    public void setBookTitle(String title) {        //写属性:bookTitle
        this.title = title;
    }
}

2.MyBatis 基于XML开发

2.1 分析

  • 基于注解开发 和 基于XML开发 对比

2.2入门案例

2.2.1 项目结构

2.2.2 JavaBean

package com.czxy.domain;
​
import lombok.Data;
​
import java.util.Date;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
@Data
public class Order {
    private Integer oid;
    private Double price;
    private Date createTime;
    private Date updateTime;
    private String desc;
}
​
/*
create table `order`(
    oid int primary key auto_increment,
    price double(6,2),
    create_time date,
    update_time date,
    `desc` varchar(100)
);
 */

2.2.3 映射类

package com.czxy.mapper;
​
import com.czxy.domain.Order;
​
import java.util.List;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public interface OrderMapper {
​
    /**
     * 查询所有
     * @return
     */
    public List<Order> selectAll();
}
​

2.2.4 测试类

package com.czxy;
​
import com.czxy.domain.Order;
import com.czxy.mapper.OrderMapper;
import com.czxy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
​
import java.util.List;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public class TestOrderMapper {
​
    @Test
    public void testSelectAll() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        List<Order> orderList = orderMapper.selectAll();
        //4 处理结果
        orderList.forEach(System.out::println);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
}
​

2.2.5 新增:添加 映射对应配置文件 *Mapper.xml

  • mapper文件为自定义内容,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="映射类全限定类名(包名.类名)">
-->
<mapper namespace="com.czxy.mapper.OrderMapper">
​
  <!--
    查询: <select id="方法名" resultType="返回值类型">SQL语句</select>
    添加:<insert id="方法名">
    修改:<update id="方法名">
    删除:<delete id="方法名">
  -->
  <select id="selectAll" resultType="com.czxy.domain.Order">
    select oid,price,create_time createTime,update_time as updateTime, `desc` from `order`
  </select>
</mapper>

2.2.6 新增:核心配置加载xml

    <mappers>
        <!--声明含有sql的接口所在包
        <package name="com.czxy.mapper"/>
        -->
        <mapper resource="mapper/OrderMapper.xml"></mapper>
    </mappers>

2.3 增删改查

2.3.0 项目结构&测试类

package com.czxy;
​
import com.czxy.domain.Order;
import com.czxy.mapper.OrderMapper;
import com.czxy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
​
import java.util.Date;
import java.util.List;
​
/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 * @description
 */
public class TestOrderMapper {
​
    @Test
    public void testSelectAll() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        List<Order> orderList = orderMapper.selectAll();
        //4 处理结果
        orderList.forEach(System.out::println);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testInsert() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = new Order();
        order.setPrice(345d);
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        order.setDesc("66666");
        Integer result = orderMapper.insert(order);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testSelectById() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = orderMapper.selectById(1);
        //4 处理结果
        System.out.println(order);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testUpdate() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Order order = new Order();
        order.setOid(2);
        order.setPrice(1234d);
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        order.setDesc("76543");
        Integer result = orderMapper.update(order);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
​
    @Test
    public void testDelete() {
        //1 获得session
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2 获得映射mapper
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3 操作
        Integer result = orderMapper.deleteById(2);
        //4 处理结果
        System.out.println(result);
        //5 释放资源
        MybatisUtils.close(sqlSession);
    }
}

2.3.1 查询所有

  • 映射接口

       /**
         * 查询所有
         * @return
         */
    //    @Select("select oid,price,create_time createTime,update_time as updateTime, `desc` from `order`")
        public List<Order> selectAll();

  • xml配置

      <!--
        查询: <select id="方法名" resultType="返回值类型" resultMap="自定义封装对象">SQL语句</select>
            resultType 和 resultMap 二选一
        添加:<insert id="方法名" parameterType="参数类型">
        修改:<update id="方法名" parameterType="参数类型">
        删除:<delete id="方法名" parameterType="参数类型">
      -->
      <select id="selectAll" resultType="com.czxy.domain.Order">
        select oid,price,create_time createTime,update_time as updateTime, `desc` from `order`
      </select>

2.3.2 添加

  • 映射接口

     /**
         * 添加订单
         * @param order
         * @return
         */
        public Integer insert(Order order);
    ​

  • xml配置

    ​
      <insert id="insert" parameterType="com.czxy.domain.Order">
        insert into `order`(price,create_time,update_time,`desc`) values(#{price}, #{createTime}, #{updateTime}, #{desc})
      </insert>

2.3.3 查询详情

  • 映射接口

        /**
         * 通过id查询详情
         * @param oid
         * @return
         */
        public Order selectById(@Param("oid") Integer oid);
    ​

  • xml配置

    <!--自定义映射关系
        <resultMap id="名称" type="结果封装的JavaBean类型">
          <result property="JavaBean属性" column="表的列名"></result>
        </resultMap>
      -->
      <resultMap id="orderResultMap" type="com.czxy.domain.Order">
        <result property="createTime" column="create_time"></result>
        <result property="updateTime" column="update_time"></result>
      </resultMap>
    ​
      <select id="selectById" parameterType="Integer" resultMap="orderResultMap" >
        select * from `order` where oid = #{oid}
      </select>

2.3.4 修改

  • 映射接口

        /**
         * 更新
         * @param order
         * @return
         */
        public Integer update(Order order);

  • xml配置

    <update id="update" parameterType="com.czxy.domain.Order">
        update `order` set price=#{price}, create_time=#{createTime}, update_time=#{updateTime}, `desc`=#{desc} where oid=#{oid}
      </update>

2.3.5 通过id删除

  • 映射接口

       /**
         * 通过id删除
         * @param oid
         * @return
         */
        public Integer deleteById(@Param("oid") Integer oid);

  • xml配置

    <delete id="deleteById">
        delete from `order` where oid = #{oid}
      </delete>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值