拉链表的使用
一、Java实现拉链表
技术选型:MyBatis
1)mysql建表
create database mydemo;
use mydemo;
create table orders(
orderid int primary key not null auto_increment,
orderno varchar(20),
orderstatus int,
begintime date,
overtime date
);
2)使用Maven的quickstart工程,添加两个依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
3)新建资源文件夹,添加xml配置
①mybatis.cfg.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>
<typeAliases>
<typeAlias type="cn.kgc.dwlearn.mylink.entity.Orders" alias="order"></typeAlias>
</typeAliases>
<environments default="jun">
<environment id="jun">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.247.188:3306/mydemo"/>
<property name="username" value="root"/>
<property name="password" value="javakb10"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/orders.xml"></mapper>
</mappers>
</configuration>
②orders.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="cn.kgc.dwlearn.mylink.dao.OrdersDAO">
<insert id="addOrder" parameterType="order">
insert into orders(orderno,orderstatus,begintime,overtime)
values(#{orderno},#{orderstatus},#{begintime},'9999-12-31')
</insert>
<update id="updateOrder" parameterType="order">
update orders set overtime=#{overtime} where orderid=#{orderid}
</update>
<select id="findByOrderno" parameterType="java.lang.String" resultType="order">
select * from orders where orderno=#{orderno} and overtime='9999-12-31'
</select>
</mapper>
4)创建实体类Orders
package cn.kgc.dwlearn.mylink.entity;
import java.util.Date;
public class Orders {
private int orderid;
private String orderno;
private int orderstatus;
private Date begintime;
private Date overtime;
public Orders() {
}
public Orders(int orderid, String orderno, int orderstatus, Date begintime, Date overtime) {
this.orderid = orderid;
this.orderno = orderno;
this.orderstatus = orderstatus;
this.begintime = begintime;
this.overtime = overtime;
}
public void setOrderid(int orderid) {
this.orderid = orderid;
}
public void setOrderno(String orderno) {
this.orderno = orderno;
}
public void setOrderstatus(int orderstatus) {
this.orderstatus = orderstatus;
}
public void setBegintime(Date begintime) {
this.begintime = begintime;
}
public void setOvertime(Date overtime) {
this.overtime = overtime;
}
public int getOrderid() {
return orderid;
}
public String getOrderno() {
return orderno;
}
public int getOrderstatus() {
return orderstatus;
}
public Date getBegintime() {
return begintime;
}
public Date getOvertime() {
return overtime;
}
}
5)OrdersDAO接口
package cn.kgc.dwlearn.mylink.dao;
import cn.kgc.dwlearn.mylink.entity.Orders;
public interface OrdersDAO {
public void addOrder(Orders orders);
public void updateOrder(Orders orders);
public Orders findByOrderno(String orderno);
}
6)测试类
扫描二维码关注公众号,回复:
12993862 查看本文章
package cn.kgc.dwlearn.mylink.demo;
import cn.kgc.dwlearn.mylink.dao.OrdersDAO;
import cn.kgc.dwlearn.mylink.entity.Orders;
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.Reader;
import java.util.Date;
public class MyDemo {
public static void main(String[] args) throws Exception{
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
OrdersDAO odao = session.getMapper(OrdersDAO.class);
//先去数据库查询是否有订单123456
//创建一个新订单
Orders ord = new Orders(1,"123456",1,new Date(),null);
Orders order = odao.findByOrderno(ord.getOrderno());
if (order != null){
order.setOvertime(new Date());
odao.updateOrder(order);
}
odao.addOrder(ord);
session.commit();
session.close();
}
}
我们先执行一次程序,orders表会多一条数据
再插入另一条记录
此时,我们再插入一条orderno为123456
,orderstatus为2
的数据,更新订单状态
原理就是在插入数据时,会判定该orderno是否存在,如果不存在则插入数据;如果存在,会更新上一条数据的结束时间overtime
,并插入该orderno
新的订单状态的数据
二、Hive实现拉链表
待更新…