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>